我一直在ggplot2中遇到这个问题,也许有人可以帮助我.
我有一个图,其中图例中变量的顺序与它们在图上的显示方式相反.
例如:
df=data.frame(
mean=runif(9,2,3),
Cat1=rep(c("A","B","C"),3),
Cat2=rep(c("X","Y","Z"),each=3))
dodge=position_dodge(width=1)
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+
geom_point(aes(shape=Cat2),size=4,position=dodge)+
scale_color_manual(values=c("red","blue","black"))+
scale_shape_manual(values=c(16:19))+
coord_flip()
Run Code Online (Sandbox Code Playgroud)
生产:

所以点在图上显示为Cat2 = Z,Y,然后是X(黑色菱形,蓝色三角形,红色圆圈),但在图例中它们显示为Cat2 = X,Y,然后是Z(红色圆圈,蓝色三角形,黑钻石).
如何在不改变绘图上的点的情况下反转图例的顺序?重新排序因子会产生相反的问题(图上的点会反转).
谢谢!
为了充实哈德利的评论,我们会这样做:
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+
geom_point(aes(shape=Cat2),size=4,position=dodge)+
scale_color_manual(values=c("red","blue","black"),breaks = c('Z','Y','X'))+
scale_shape_manual(values=c(16:19),breaks = c('Z','Y','X'))+
coord_flip()
Run Code Online (Sandbox Code Playgroud)

请注意,我们必须在两个音阶中设置中断。如果我们只做一个,它们将不匹配,并且 ggplot 会将它们分成两个图例,而不是合并它们。
据我了解你想要实现的目标,这个简单的操作对我来说很有效:
这是执行此操作的代码:
library(ggplot2)
df=data.frame(
mean=runif(9,2,3),
Cat1=rep(c("A","B","C"),3),
Cat2=factor(rep(c("X","Y","Z"),each=3), levels=c('Z', 'Y', 'X')))
dodge=position_dodge(width=1)
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+
geom_point(aes(shape=Cat2),size=4,position=dodge)+
scale_color_manual(values=c("black","blue","red"))+
scale_shape_manual(values=c(18:16))+
coord_flip()
Run Code Online (Sandbox Code Playgroud)