ggplot2: Change factor order in legend

女生的网名这么多〃 提交于 2019-12-29 01:43:13

问题


I have a a line graph and I want to reorder the way in which the factors appear in the legend. I have tried scale_fill_discrete but it doesn't change the order. Here's a simulation of my problem:

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

Which creates this:

I would like everything to remain the exactly the same, except for the legend, where I would like to change the order to levelB then levelC then levelA. I'm guessing ggplot2 orders the legend alphabetically and I would like to override this. Reordering my data frame didn't work, and scale_fill_discrete also doesn't change it. Any ideas?

Thanks!


回答1:


By reordering the levels in your factor, you can change the order of the legend labels. Run:

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

Then rerun the ggplot code, and levelB should now be at the top of the legend and green, levelC second and red, and levelA third and black.



来源:https://stackoverflow.com/questions/33480043/ggplot2-change-factor-order-in-legend

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!