【问题标题】:Making a ggplot boxplot where each column is it's own boxplot制作一个ggplot箱线图,其中每列都是它自己的箱线图
【发布时间】:2021-09-07 03:38:54
【问题描述】:

当使用简单的R boxplot函数时,我可以很容易地将我的数据框直接放入括号中,一个完美的boxplot就出现了,例如:

baseline <- c(0,0,0,0,1)
post_cap <- c(1,5,5,6,11)
qx314 <- c(0,0,0,3,7)
naive_capqx <- data.frame(baseline, post_cap, qx314)
boxplot(naive_capqx)

this is an image of the boxplot made with the simple R boxplot function

但是,我需要让这个箱线图更美观一些,所以我需要使用 ggplot。当我将数据框本身放入时,箱线图无法形成,因为我需要指定我没有的 x、y 和填充坐标。我的 y 坐标是数据框中每个向量的值,我的 x 坐标只是向量的名称。如何使用 ggplot 做到这一点?有没有办法改革我的数据框,以便我可以将其拆分为坐标,或者有没有办法 ggplot 可以读取我的数据?

【问题讨论】:

    标签: r dataframe ggplot2 boxplot


    【解决方案1】:

    geom_boxplot 需要 tidy 数据。您的数据不整洁,因为列名包含信息。所以首先要做的就是使用pivot_longer整理你的数据...

    library(tidyverse)
    
    naive_capqx %>%  
      pivot_longer(everything(), values_to="Value", names_to="Variable") %>% 
      ggplot() +
      geom_boxplot(aes(x=Variable, y=Value))
    

    给予

    【讨论】:

    • 嗨,我尝试使用此代码,但我的 R 无法破译 %>%。这是一个我可能没有加载的单独包吗?
    • %&gt;%magrittr 包的一部分,该包包含在 tidyverse 元包中。我的代码是 MWE,应该按原样运行。如果您愿意,可以通过将naive_capqx %&gt;% pivot_longer(everything()... 替换为pivot_longer(naive_capqx, everything()... 来避免使用%&gt;%。请注意,@RebeccaAmodeo 的解决方案虽然正确,但使用了 gather(),它已被 pivot_XXXX 函数取代。
    【解决方案2】:

    将 df 转换为长格式 df。下面,我使用gather() 来加长df;我使用group_by() 确保通过键(以前的列名)计算箱线图。

    pacman::p_load(ggplot2, tidyverse)
    
    baseline <- c(0,0,0,0,1)
    post_cap <- c(1,5,5,6,11)
    qx314 <- c(0,0,0,3,7)
    
    naive_capqx <- data.frame(baseline, post_cap, qx314) %>%
      gather("key", "value")) %>%
      group_by(key)
      
    
    ggplot(naive_capqx, mapping = aes(x = key, y = value)) +
      geom_boxplot()
    

    【讨论】:

    • 嗨,对不起,%>% 是什么意思?我的 R 听不懂!
    • 嗨@NuritEliana,感谢您的提问!它是一种称为“管道”的运算符。它发送之前的任何内容(在其左侧)并将其发送到下一个命令。它消除了在其后的命令中输入 data 参数的需要,因为 R 将知道管道之前的对象是您想要用作 data 参数的对象。我认为这就像对 R 说“然后”。它最初位于magrittr 包中,并包含在dplyrtidyverse 包以及R 4.1 中。它节省了很多打字!一个video。希望有帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2015-10-14
    • 2020-03-02
    相关资源
    最近更新 更多