嵌套 y 轴,带面包装 x 轴

Nested y axis with faced wrap x axis

提问人:Erik 提问时间:7/18/2023 更新时间:8/10/2023 访问量:30

问:

我想绘制以下数据集,以可视化所有已完成或缺失的测量:

data<- read.table(text = "Sample_ID Species Time Treatment
    Amu1 Amu   1  A
    Amu1 Amu   2  A
    Amu1 Amu   3  A
    Amu5 Amu   1  B
    Amu5 Amu   2  B
    Amu2 Amu   1  A
    Amu2 Amu   2  A
    Amu2 Amu   3  A
    Amu3 Amu   1  A
    Amu3 Amu   2  A
    Amu4 Amu   1  A
    Amu4 Amu   2  A
    Amu4 Amu   3  A
    Amu6 Amu   1  B
    Amu6 Amu   3  B
    Spi1 Spi   1  A
    Spi1 Spi   2  A
    Spi1 Spi   3  A
    Spi4 Spi   1  B
    Spi4 Spi   2  B
    Spi4 Spi   3  B
    Spi2 Spi   2  A
    Spi2 Spi   3  A
    Spi3 Spi   1  A
    Spi3 Spi   2  A
    Spi3 Spi   3  A
    Spi5 Spi   2  B
    Spi5 Spi   3  B
    Gfa5 Gfa   1  B
    Gfa5 Gfa   2  B
    Gfa5 Gfa   3  B
    
    ", header = TRUE)

使用 ggplot 和 facet_wrap,我设法得到了这个图,但我想按物种嵌套 y 轴,以便对物种进行视觉对齐。确切的Sample_ID不是很重要,真正重要的是每次治疗的sample_ID次数。例如,在治疗 A 中,有 4 个 Amu,而在 B 中,只有 2 个。 但是,如果 Y 轴上sample_ID之间的空间始终相同,那就太好了。理想情况下,对于 Amu,我希望在处理 A 中看到 4 条“线”,而在处理 B 中看到 2 条“线”,然后是两条空线。

我希望我很清楚。

非常感谢您的帮助!


ggplot(data = data, 
       aes(x = as.factor(Time), y = fct_rev(Sample_ID),
           color = Species))+
  scale_x_discrete(labels=c("t1", "t2", "t3"))+
  geom_point(size = 3, show.legend = F) +
  scale_color_brewer(palette = "Dark2") +
  theme_bw() +

  facet_wrap(~ Treatment,
             scales = "free_y",
             strip.position = "top",
             ncol = 3 ) +
  theme(
    strip.background = element_rect(color = "transparent", fill = "white"),
    axis.title.y = element_blank())

enter image description here

r ggplot2 嵌套 小面换行

评论


答:

0赞 William Wong 8/10/2023 #1

我不确定这是否是您想要的,但诀窍可能是使用库。ggh4x

library(ggh4x)
ggplot(data = data, 
       aes(x = as.factor(Time), y = fct_rev(interaction(Sample_ID, Species)), # use interaction to specific the grouping variable
           color = Species))+
  scale_x_discrete(labels=c("t1", "t2", "t3"))+
  geom_point(size = 3, show.legend = F) +
  scale_color_brewer(palette = "Dark2") +
  theme_bw() +

  facet_wrap(~ Treatment,
             scales = "free_y",
             strip.position = "top",
             ncol = 3 ) +
  theme(
    strip.background = element_rect(color = "transparent", fill = "white"),
    axis.title.y = element_blank()) +
  guides(y = "axis_nested") ## added here with the package library(ggh4x)