我一直在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()
产生
因此点在图上显示为Cat2 = Z,Y,然后是X(黑色菱形,蓝色三角形,红色圆圈),但在图例中它们显示为Cat2 = X,Y,然后是Z(红色圆圈,蓝色三角形,黑色钻石)。
如何在不改变地块上的点的情况下反转图例的顺序?重新排序因子会产生相反的问题(图中的点会反转)。
谢谢!
答案 0 :(得分:4)
为了充实哈德利的评论,我们会做这样的事情:
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()
请注意,我们必须在两个比例中设置中断。如果我们只做一个,它们就不匹配了,ggplot会把它们分成两个传说,而不是合并它们。
答案 1 :(得分:0)
据我了解你想要实现的目标,这个简单的操作对我有用:
以下是执行此操作的代码:
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()