ggplot2:更改图例中因子的顺序

3

我有一张折线图,想要重新排列因素在图例中的显示顺序。我尝试使用scale_fill_discrete,但它并没有改变顺序。 以下是我的问题模拟:

df <- data.frame(var1=c("F", "F", "F", "B", "B", "B"),
                 var2=c("levelB", "levelC", "levelA"),
                 value=c("2.487585", "2.535944", "3.444764", "2.917308", "2.954155","3.739049"))

p <- ggplot(data=df, aes(x=var1, y=value, 
  group=var2, colour=var2, shape = var2)) +
  geom_line(size = 0.8) +
  geom_point()+
  xlab("var1") + ylab("Value") +
  scale_x_discrete(limits=c("F","B")) + 
  theme(legend.title = element_text(size=12)) + 
  theme(legend.text = element_text(size=10)) +
  scale_fill_discrete(breaks=c("levelB","levelC","levelA")) +
  theme(title = element_text(size=12)) +
  blank + scale_color_manual(values=c("green2", "red", "black")) +
  theme(legend.key = element_blank())
p

这会生成以下内容:

enter image description here

我希望所有内容保持不变,除了图例,我想将顺序更改为levelB,然后是levelC,最后是levelA。 我猜ggplot2按字母顺序对图例进行排序,我想覆盖这一点。 重新排列我的数据框没有起作用,scale_fill_discrete也没有改变它。 有什么想法吗?

谢谢!


1
可能是控制ggplot2图例显示顺序的重复问题。 - jeremycg
3
不是重复问题,因为那个问题涉及多个图例的排序,而不是图例内部的排序。 - kneijenhuijs
1个回答

13

通过重新排列因子的水平,您可以更改图例标签的顺序。运行:

df$var2 <- factor(df$var2, levels=c("levelB", "levelC", "levelA"))

然后重新运行ggplot代码,levelB现在应该在图例顶部且为绿色,levelC第二并且为红色,levelA第三并且为黑色。


1
谢谢,是的,那个有效。只需要重新排序颜色如下:scale_color_manual(values=c("black", "red", "green2")) + - pd441
哦,我错过了你想让其他所有东西保持不变的要求(所以颜色也是)!是的,那将需要重新排列颜色。 - kneijenhuijs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接