重新排序图例而不更改绘图上的点顺序

时间:2011-09-26 14:05:46

标签: r ggplot2 legend

我一直在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()

产生

example

因此点在图上显示为Cat2 = Z,Y,然后是X(黑色菱形,蓝色三角形,红色圆圈),但在图例中它们显示为Cat2 = X,Y,然后是Z(红色圆圈,蓝色三角形,黑色钻石)。

如何在不改变地块上的点的情况下反转图例的顺序?重新排序因子会产生相反的问题(图中的点会反转)。

谢谢!

2 个答案:

答案 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()

enter image description here

请注意,我们必须在两个比例中设置中断。如果我们只做一个,它们就不匹配了,ggplot会把它们分成两个传说,而不是合并它们。

答案 1 :(得分:0)

据我了解你想要实现的目标,这个简单的操作对我有用:

  1. 将Cat2定义为一个因子(级别以适当的顺序排列)和
  2. 使用颜色和形状的顺序来匹配级别顺序(在scale_manual命令中)
  3. 以下是执行此操作的代码:

    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()