当因子水平超过 6 个时循环点形状

问题描述 投票:0回答:4

shape
内使用美学映射
geom_point
时,当存在的因子数量超过 6 时,我会收到以下消息:

“形状调色板最多可以处理 6 个离散值,因为超过 6 个离散值就很难区分;您有 15 个。如果必须拥有它们,请考虑手动指定形状。”

我倾向于同意限制不同形状数量的原则,但是当将形状与颜色结合使用时这应该不是问题。

有没有一种优雅的方法可以让 ggplot 循环遍历形状,即设置 symbol7 = symbol1 等?现在它只是忽略因子水平 > 6 的点。

r ggplot2
4个回答
26
投票

plot symbols

如您所见,形状有多种可能性。当你达到>6时,你必须手动设置数字,这样:

    ggplot(data=dat1, aes(x=x, y=y,group=method,shape=method,color=method))+
    geom_point() +
    scale_shape_manual(values=seq(0,15))

这样你就不会收到任何警告,并且会在图表上得到相应的符号

更新

正如 Luchonacho 指出的那样,有许多新形状可供选择。请记住,如果您想使用循环设置它们,请不要使用

aes()
,因为它会暂时保留最后一个绘图参考(即仅最后一个循环输入)并仅绘制该参考。


9
投票

现有答案中的形状已经过时。这些是当前的:

如你所见,都是用数字来称呼的。如果您使用符号(如其他答案中所示),则会发生错误。

如果您的数量不超过 6 个,那么手动选择它们很容易。例如,如果您有 10 行,一种替代方法是:

ggplot(mydata, aes(x,y, colour = z)) + 
    geom_line() + scale_shape_manual(values = c(4,8,15,16,17,18,21,22,3,42)) 

图像代码(来源):

d=data.frame(p=c(0:25,32:127))
ggplot() +
scale_y_continuous(name="") +
scale_x_continuous(name="") +
scale_shape_identity() +
geom_point(data=d, mapping=aes(x=p%%16, y=p%/%16, shape=p), size=5, fill="red") +
geom_text(data=d, mapping=aes(x=p%%16, y=p%/%16+0.25, label=p), size=3)

6
投票

正如其他答案所指出的,您需要使用

scale_shape_manual

重复所需的符号,您只需使用

rep(x, times)
即可。例如,如果您想重复填写的符号 14 到 18(有关符号列表,请参阅 luchonacho 答案),您可以使用以下内容:

ggplot(data, aes(x,y, colour = z)) + geom_point()
    scale_shape_manual(values = rep(15:18, 5))

这将重复符号 15 到 18 五次,因此足以满足 20 个不同的

z
值。


1
投票

当因素超过 6 个时,在最终图表中很难区分。我使用颜色和形状的组合来获得 15 个因素的预期效果,将它们分为 3 种颜色和 5 个符号,在 geom_ 行后面使用以下代码

 +scale_color_manual(values=c(rep("#00BFCC",5), rep("#E7AA00",5), rep( "#FC4E07", 5)))  
+scale_shape_manual(values=rep(0:4, 3))

另请注意,这些值可以通过不同的颜色和形状进行更改。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.