控制ggplot2图例显示顺序

时间:2012-07-09 10:20:31

标签: r ggplot2

有谁知道如何控制ggplot2中的图例排序?

从我可以看到,订单显示与实际比例标签相关,而不是比例声明顺序。更改比例标题会改变顺序。我用钻石数据集做了一个小例子来强调这一点。我正在尝试将ggplot2用于一系列图表,我想让一个变量出现在右边的所有图表中。目前虽然这只发生在其中一些,但我在如何强制执行我想要的订购同时保留适当的比例标签时不知所措。

library(ggplot2)
diamond.data <- diamonds[sample(nrow(diamonds), 1000), ]
plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top", legend.box = "horizontal")
plot # the legend will appear shape then colour 
plot + labs(colour = "A", shape = "B") # legend will be colour then shape
plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour

2 个答案:

答案 0 :(得分:103)

在0.9.1中,确定图例顺序的规则是秘密不可预测。 现在,在github的0.9.2开发版中,您可以使用该参数来设置图例的顺序。

以下是示例:

plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top")

plot + guides(colour = guide_legend(order = 1), 
              shape = guide_legend(order = 2))

enter image description here

plot + guides(colour = guide_legend(order = 2), 
              shape = guide_legend(order = 1))

enter image description here

答案 1 :(得分:12)

在我看来,图例的顺序取决于比例名称中的字符数。 (是的,我同意,这似乎很奇怪。)

因此,解决方法是用空格填充标签:

plot + labs(colour = "Clarity", shape = "      Cut")

enter image description here


我真诚地希望有人能尽快找到合适的解决方案!