2

我是 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 轴,每个都有小提琴图。谢谢您的帮助。亚历克斯

4

2 回答 2

3

Reshape your data first:

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()

enter image description here

Note that Cl only has a single line because you have only a singly depth.

于 2017-03-28T07:03:47.507 回答
2

就像您已经怀疑的那样,您需要重塑您的数据。使用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)

于 2017-03-27T16:01:32.300 回答