我试图控制图例中项目的顺序ggplot2
我查找了其他一些类似的问题,并发现了如何更改我正在绘制的因子变量的水平顺序。我正在绘制 12 月、1 月、7 月和 6 月 4 个月的数据。
如果我只对所有月份执行一个绘图命令,它会按预期工作,图例中排序的月份按因子级别的顺序出现。然而,我需要有一个不同的dodge
夏季(六月和七月)和冬季(十二月和一月)数据的值。我用两个人来做这个geom_pointrange
命令。当我将其分为两步时,图例的顺序又回到字母顺序。您可以通过注释掉“plot Summer”或“plot Winter”命令来进行演示。
我可以更改什么来保持图例中的因子级别顺序?
请忽略看起来奇怪的测试数据 - 真实数据在这种绘图格式中看起来很好。
#testdata
hour <- rep(seq(from=1,to=24,by=1),4)
avg_hou <- sample(seq(0,0.5,0.001),96,replace=TRUE)
lower_ci <- avg_hou - sample(seq(0,0.05,0.001),96,replace=TRUE)
upper_ci <- avg_hou + sample(seq(0,0.05,0.001),96,replace=TRUE)
Month <- c(rep("December",24), rep("January",24), rep("June",24), rep("July",24))
testdata <- data.frame(Month,hour,avg_hou,lower_ci,upper_ci)
testdata$Month <- factor(alldata$Month,levels=c("June", "July", "December","January"))
#basic plot setup
plotx <- ggplot(testdata, aes(x = hour, y = avg_hou, ymin = lower_ci, ymax = upper_ci, color = Month, shape = Month))
plotx <- plotx + scale_color_manual(values = c("June" = "#FDB863", "July" = "#E66101", "December" = "#92C5DE", "January" = "#0571B0"))
#plot summer
plotx <- plotx + geom_pointrange(data = testdata[testdata$Month == "June" | testdata$Month == "July",], size = 1, position=position_dodge(width=0.3))
#plot winter
plotx <- plotx + geom_pointrange(data = testdata[testdata$Month == "December" | testdata$Month == "January",], size = 1, position=position_dodge(width=0.6))
print(plotx)