如何生成这个特定的箱形图,将来自ggplot或tidyverse / R中不同数据源的多个级别的数据组合在一起?

时间:2019-09-23 17:20:49

标签: r ggplot2 dplyr

我正在制作一个由几个不同的箱形图组成的图。请在下面找到我的数据样本。

我已经找到了来自三项不同研究的数据:p$studie==1,2,3

数据包含某种癌症的不同肿瘤样本,该癌症样本分为四个阶段:p$ny_stadie=1,2,3,4

每位肿瘤患者的淋巴结已清除(范围从3到124),并且是一个连续的协变量:p$n_fjernet

因此

  head(p)
  studie ny_stadie n_fjernet
1      1         1        25
2      1         4        10
3      1         1         3
4      1         4        27
5      1         3        13
6      1         4         9

所有这三项研究的数据都具有p$ny_stadie==1,2,3,4的所有四个水平,并且去除了p$n_fjernet的各种双咖啡因淋巴结。

我想制作这张图(也要上到p$ny_stadie==3,4

enter image description here

简单来说,我想显示每个p$ny_stadie和每个p$studie切除的淋巴结的分布。

我使用ggplot和tidyverse。

# My Data
p <- structure(list(studie = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), ny_stadie = structure(c(1, 
4, 1, 4, 3, 4, 4, 4, 4, 4, 4, 3, 1, 3, 4, 3, 1, 1, 1, 4, 4, 3, 
4, 4, 2, 2, 2, 2, 4, 3, 2, 1, 4, 1, 4, 3, 2, 1, 1, 1, 1, 4, 3, 
4, 2, 4, 4, 4, 4, 3, 3, 4, 3, 4, 2, 4, 4, 4, 1, 4, 4, 2, 4, 3, 
3, 4, 4, 4, 4, 3, 2, 4, 4, 3, 3, 3, 2, 1, 3, 4, 4, 3, 4, 4, 4, 
4, 4, 4, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2), class = "AsIs"), 
    n_fjernet = c(25L, 10L, 3L, 27L, 13L, 9L, 7L, 7L, 7L, 6L, 
    6L, 5L, 4L, 3L, 37L, 26L, 19L, 17L, 15L, 9L, 57L, 55L, 33L, 
    33L, 33L, 28L, 27L, 27L, 26L, 23L, 23L, 23L, 22L, 22L, 21L, 
    21L, 20L, 20L, 19L, 18L, 18L, 18L, 18L, 17L, 17L, 16L, 16L, 
    16L, 15L, 15L, 67L, 35L, 56L, 15L, 37L, 44L, 124L, 41L, 30L, 
    31L, 35L, 36L, 28L, 39L, 54L, 25L, 27L, 69L, 53L, 24L, 33L, 
    52L, 77L, 51L, 7L, 22L, 53L, 26L, 58L, 28L, 83L, 39L, 15L, 
    37L, 27L, 9L, 17L, 32L, 26L, 22L, 37L, 28L, 52L, 27L, 15L, 
    11L, 7L, 24L, 11L, 56L, 47L, 27L, 14L)), row.names = c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 
29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 
42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 380L, 381L, 382L, 
383L, 384L, 385L, 386L, 387L, 388L, 389L, 390L, 391L, 392L, 393L, 
394L, 395L, 396L, 397L, 398L, 399L, 400L, 401L, 402L, 403L, 404L, 
405L, 406L, 407L, 408L, 409L, 410L, 411L, 412L, 413L, 414L, 415L, 
416L, 417L, 418L, 620L, 621L, 622L, 623L, 624L, 625L, 626L, 627L, 
628L, 629L, 630L, 631L, 632L, 633L), class = "data.frame")

1 个答案:

答案 0 :(得分:2)

我不确定这是否是您的意图,如果不能纠正我的问题,以便我编辑答案

对数据执行以下操作:

p$ny_stadie_f <- factor(p$ny_stadie)
p$studie_f <- factor(p$studie)
q <- ggplot(p, aes(x = ny_stadie_f, y = n_fjernet, fill= studie_f)) + geom_boxplot()
q

我得到以下输出:

enter image description here

这是您想要的输出?您可以看到ny_stadie=3,4

的情况下studie=3中没有表达式