【问题标题】:How to reorder plots in combined ggplot2 graph?如何在组合 ggplot2 图中重新排序图?
【发布时间】:2021-08-25 23:04:21
【问题描述】:

我已经看到了在仅绘制一个对象时重新排序子图的解决方案(例如mydata),但我不确定在绘制多个对象时如何执行此操作(在这种情况下,mydata1mydata2)。我想切换小提琴的顺序,使 Treatment2 在左侧,Treatment1 在右侧,而不是像我目前拥有的那样:

mycp <- ggplot() + geom_violin(data = mydata1, aes(x= treatment, y = Myc_List1, fill = Myc_List1, colour="Myc Pathway (Treatment1)")) + 
  geom_violin(data = mydata2, aes(x= treatment, y = Myc_List1, fill = Myc_List1, colour = "Myc Pathway (Treatment2)")) 

当我尝试Ordering of bars in ggplot 等解决方案或https://www.r-graph-gallery.com/22-order-boxplot-labels-by-names.html 提出的以下解决方案时,此图保持不变。

希望这是有道理的,感谢您的阅读!

更新

这是https://www.datanovia.com/en/blog/how-to-change-ggplot-legend-order/的另一个解决方案

mydata$treatment<- factor(mydata$treatment, levels = c("Treatment2", "Treatment1"))

【问题讨论】:

  • 无法访问mydata1,我们只是在猜测。

标签: r ggplot2


【解决方案1】:

我不确定在这种情况下如何重新排序因子,但您可以更改 x 轴比例以获得所需的结果,例如

library(tidyverse)

data("Puromycin")
dat1 <- Puromycin %>% 
  filter(state == "treated")
dat2 <- Puromycin %>% 
  filter(state == "untreated")

mycp <- ggplot() +
  geom_violin(data = dat1, aes(x= state, y = conc, colour = "Puromycin (Treatment1)")) + 
  geom_violin(data = dat2, aes(x= state, y = conc, colour = "Puromycin (Treatment2)")) 
mycp

mycp2 <- ggplot() +
  geom_violin(data = dat1, aes(x = state, y = conc, colour = "Puromycin (Treatment1)")) +
  geom_violin(data = dat2, aes(x = state, y = conc, colour = "Puromycin (Treatment2)")) +
  scale_x_discrete(limits = c("untreated", "treated"))
mycp2

【讨论】:

  • 第一个示例的第一部分然后继续第二个示例对我有用@jared_mamrot!太感谢了! library(tidyverse) data("Puromycin") dat1 &lt;- Puromycin %&gt;% filter(state == "treated") dat2 &lt;- Puromycin %&gt;% filter(state == "untreated") mycp2 &lt;- ggplot() + geom_violin(data = dat1, aes(x = state, y = conc, colour = "Puromycin (Treatment1)")) + geom_violin(data = dat2, aes(x = state, y = conc, colour = "Puromycin (Treatment2)")) + scale_x_discrete(limits = c("untreated", "treated")) mycp2
  • 是的@KaitS,我的回答是minimal reproducible example (MRE) 的一个例子。答案的第一部分提供了一个公开可用的数据集和复制问题所需的最少代码量(即“起点”),第二部分显示了一个潜在的解决方案。在 StackOverflow 上,强烈建议您在提出问题时创建 MRE,因为它可以帮助我们解决问题(请在以后的问题中使用 MRE,包括您自己解决问题的尝试)。我很高兴它解决了你的问题:)
【解决方案2】:

将数据堆叠到单个数据帧中,并通过将treatment 转换为因子来设置顺序。在您的示例中,颜色和图例是多余的,因为您可以标记 x 轴值来描述每种治疗,或将 x 轴标题更改为“Myc Pathway”,但无论如何下面的代码都显示了如何获取订购。

library(tidyverse)

bind_rows(mydata1, mydata2) %>%
  mutate(treatment = factor(treatment, levels=paste0("Treatment", c(2,1)) %>%
  ggplot(aes(treatment, Myc_List1, colour=treatment)) +
    geom_violin()

这是一个可重现的例子:

library(tidyverse)
theme_set(theme_bw(base_size=15))

# Create two separate data frames to start with
d1=iris %>% filter(Species=="setosa")
d2=iris %>% filter(Species=="versicolor") 

bind_rows(d1, d2) %>% 
  mutate(Species = factor(Species, levels=c("versicolor", "setosa"))) %>% 
  ggplot(aes(Species, Petal.Width, colour=Species)) +
    geom_violin()

【讨论】:

  • 按照你的第二个例子@eipi10,不幸的是我收到了这个错误:“错误:` mutate() 的问题`列treatment。?treatment = +...。x data必须是一个数据框, 或fortify() 强制的其他对象,不是一个因素”。不过感谢您的帮助!我真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2019-05-24
相关资源
最近更新 更多