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

jsl*_*che 8 r legend ggplot2

我一直在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(红色圆圈,蓝色三角形,黑钻石).

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

谢谢!

jor*_*ran 6

为了充实哈德利的评论,我们会这样做:

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 会将它们分成两个图例,而不是合并它们。


Mat*_*ois 0

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

  1. 将 Cat2 定义为一个因素(级别按适当的顺序排列)并且
  2. 更改颜色和形状的顺序以匹配级别顺序(在scale_manual命令中)

这是执行此操作的代码:

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)