Reorder columns in boxplots ggplot2
我有这个箱线图,我想重新排列列。我想要 MCAR、MAR、MNAR 而不是 MAR、MCAR、MNAR。传说也是错误的,橙色是ymiss,蓝色是yobs,但我无法改变它。你能帮助我吗?谢谢!
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
library(ggplot2)
logistic <- function(x) exp(x) / (1 + exp(x)) set.seed(80122) n <- 300 dt <- MASS::mvrnorm(n = n, mu = c(0, 0), Sigma = matrix(c(1, 0.5, 0.5, 1), nrow = 2));dt r2.mcar <- 1 – rbinom(n, 1, 0.5);r2.mcar yobs1<-dt dados<-matrix(cbind(yobs1[,1],yobs2[,1],yobs3[,1],yobs1[,2],yobs2[,2],yobs3[,2]),ncol=1) v<-c(rep(“yobs”,900),rep(“ymiss”,900)) p <- ggplot(dados, aes(x =valores, y = mecanismo)) + |
你的一个问题实际上是两个问题:
改变刻面的顺序。 ggplot2 首先将 dados$mecanismo 中的数据更改为一个因子。方面的顺序与该因素的水平顺序有关,默认情况下,通常是它们在数据集中出现的顺序。要更改顺序,您需要将 dados$mecanismo 定义为数据框中的一个因素,然后还按特定顺序定义级别。
将图例中的特定颜色分配给一个因素。在您的 scale_fill_manual 命令中,您正在分配 values=。默认情况下,值的顺序是根据因子水平的顺序应用的(在本例中为 dados$y)。您可以重新指定该因素的级别,但要专门分配颜色,您不需要。您需要做的就是提供一个 list(.. 或一个命名向量 c(‘name’=’color’, ‘name2’=’color2’,.. 到 values= 来代替颜色向量。顺便说一句…您可以更改 ymiss 和 yobs 在图例中出现的顺序,方法是设置上面 #1 中所示的因子…
这是代码和情节:
1
2 3 4 5 6 7 8 9 |
# relevel factor for right order of facets
dados$mecanismo <- factor(dados$mecanismo, levels=c(‘MCAR’,’MAR’,’MNAR’)) p <- ggplot(dados, aes(x =valores, y = mecanismo)) + # set colors with named vector |
编辑:更改图例键的顺序
经过一些评论,很明显 OP 不仅打算根据 ymiss 和 yobs 的特定值重新着色数据,还打算更改图例中框的位置以匹配的情节。我的意思是,在上面的图中,yobs 的箱线图位于顶部,ymiss 位于下方,但在右侧的图例中,顺序颠倒了。解决此问题的方法是通过 scale_fill_manual 的 breaks= 参数显式指定标签的顺序。这解决并修复了该问题:
1
2 3 4 5 6 7 8 9 10 |
dados$mecanismo <- factor(dados$mecanismo, levels=c(‘MCAR’,’MAR’,’MNAR’))
ggplot(dados, aes(x =valores, y = mecanismo)) + |
- 谢谢你的帮助!它仍然是错误的,因为带有异常值的蓝色箱线图必须是橙色箱线图(ymiss)。传说是对的,唯一的问题是箱线图!
- 好像和你原来的一样,对吧?顶部带有异常值的框是原始框和修改框的 yobs。图例的顺序与框的顺序不同 – 这就是你的意思吗?
- 是的。我原来的盒子是对的,唯一错的是传说!现在唯一的问题是盒子!
- 啊——现在很清楚了。是的,有一个简单的解决方案,它与解决 scale_fill_manual 中的 breaks= 参数有关。在答案中发布了编辑。
- 抱歉又打扰了!我想我不是很清楚。那些有异常值的应该是 ymiss 而不是 yobs。在您的编辑中,图例是正确的,而方框是错误的..
- 那里的问题是数据分配,而不是绘图的代码。在指定 v<-c(rep… 时,您的 ymiss 和 yobs 分配似乎不正确。应该先是ymiss,然后是yobs。
添加此代码,它将起作用:
1
2 3 4 5 6 7 |
#Reorder var
dados$mecanismo <- factor(dados$mecanismo,levels = c(“MCAR”,”MAR”,”MNAR”),ordered = T) p <- ggplot(dados, aes(x =valores, y = mecanismo)) + |
- @Cludia123 太好了!我看到您正在处理缺少的数据机制,这是一个非常酷的话题。如果您对这个答案感到满意,请接受它:)
- 现在唯一的错误是蓝色的应该是橙色的。它们被切换。具有异常值的是 ymiss 所以它应该是橙色的
- 在这种情况下@Cludia123 尝试添加 scale_fill_manual(values = c(yobs=lightskyblue,ymiss=lightsalmon))
来源:https://www.codenong.com/62776858/