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

ste*_*sou 3 r legend ggplot2

我有一个折线图,我想重新排序因子在图例中出现的方式.我试过了,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
Run Code Online (Sandbox Code Playgroud)

这创造了这个:

在此输入图像描述

我想一切都保持完全一致,除了传奇,在这里我想的顺序改变levelB,然后levelClevelA.我猜ggplot2是按字母顺序命令传说,我想覆盖它.重新排序我的数据框架不起作用,scale_fill_discrete也不会改变它.有任何想法吗?

谢谢!

kne*_*ijs 8

通过重新排序因子中的级别,您可以更改图例标签的顺序.跑:

df$var2 <- factor(df$var2, levels=c("levelB", "levelC", "levelA"))
Run Code Online (Sandbox Code Playgroud)

然后重新运行ggplot代码,levelB现在应该位于图例的顶部,绿色,levelC第二和红色,levelA第三和黑色.