【问题标题】:Violin Plot in R using ggplot2 on multiple data columns在多个数据列上使用 ggplot2 在 R 中绘制小​​提琴图
【发布时间】:2017-08-20 09:19:24
【问题描述】:

我是 R 新手,并试图为每个采样深度的各种物种制作物种计数数据的小提琴图。数据如下所示

    Depth Cd Cf Cl
1  3.6576  0  2  0
2  4.0000  2 13  0
3  4.2672  0  0  0
4 13.1064  0  2  0
5 14.0000  3 17 10
6 17.0000  0  0  0

第 2-5 列中的物种和第 1 列中的深度。我试图在 R 中使用 ggplot2,但假设数据不是以 ggplot2 可以使用的方式组织的。理想情况下,我希望深度是 y 轴,物种沿着 x 轴,每个都有小提琴图。谢谢您的帮助。 亚历克斯

【问题讨论】:

    标签: r ggplot2 violin-plot


    【解决方案1】:

    正如您已经怀疑的那样,您需要重塑数据。使用tidyr::gather 将格式从“宽”更改为“长”,在这种情况下,这对于在 x 轴上绘制物种是必要的。此外,您需要扩展您的计数数据,您可以使用slice 来实现。


    library(tidyverse)
    
    zz <- "Depth Cd Cf Cl
    1  3.6576  0  2  0
    2  4.0000  2 13  0
    3  4.2672  0  0  0
    4 13.1064  0  2  0
    5 14.0000  3 17 10
    6 17.0000  0  0  0"
    
    my_dat <- read.table(text = zz, header = T)
    
    my_dat %>% 
      gather(species, val, -Depth) %>% 
      slice(rep(row_number(), val)) %>%
      ggplot(aes(species, Depth)) +
      geom_violin(adjust = .5)
    

    【讨论】:

    • 感谢您的帮助。你的方法有效,但小提琴看起来都一样。对于每个物种的不同计数数据,这些看起来应该不同。有什么建议吗?
    • @Alexander Axeman 是对的,我忘了扩展计数数据。
    • 感谢大家对此的帮助。这看起来很棒,完全回答了我的问题。再次感谢!问候,
    【解决方案2】:

    首先重塑您的数据:

    library(tidyverse)
    
    my_dat2 <- my_dat %>% 
      gather(species, val, -Depth) %>% 
      slice(rep(row_number(), val)) %>% 
      select(-val)
    
    ggplot(my_dat2, aes(species, Depth)) +
      geom_violin()
    

    请注意,Cl 只有一行,因为您只有一个深度。

    【讨论】:

    • 感谢大家对此的帮助。这看起来很棒,完全回答了我的问题。再次感谢!问候,- 亚历山大刚刚编辑删除
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2018-01-15
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多