【问题标题】:R ggplot - Boxplot with fill displaying different values than bargraphR ggplot - 填充显示与条形图不同的值的箱线图
【发布时间】:2021-01-04 09:31:51
【问题描述】:

我有一个使用以下代码生成的箱线图,在检查数据集后,这里的所有值都是正确的。

myplot <- inDATA %>% filter(PARAMCD=="param1") %>% 
            ggplot(aes(x=ACTARMCD,y=AVAL,fill=ACTARMCD))+
            geom_boxplot()+
            stat_summary(fun.y=mean,na.rm=TRUE,shape=25,col='black',geom='point')

我想生成第二个箱线图,通过应用不同的变量作为填充,将 x 变量分成不同的组。我使用以下代码,但图中显示的值不正确。

myplot <- inDATA %>% filter(PARAMCD=="param1") %>% 
            group_by(ACTARMCD, RESPFL) %>%  
            ggplot(aes(x=ACTARMCD,y=AVAL))+
            geom_boxplot(aes(fill=RESPFL))

但是,当我使用此代码生成条形图时,数字是正确的。

myplot <- inDATA %>%  
            filter(PARAMCD=="param1") %>% 
            group_by(ACTARMCD,RESPFL) %>%
            dplyr::mutate(AVAL = mean(AVAL, na.rm=TRUE)) %>% 
            ggplot(aes(x=ACTARMCD,y=AVAL,fill=RESPFL))+
            geom_bar(stat="identity",position="dodge")

谁能帮我理解我在第二个箱线图上做错了什么?

【问题讨论】:

  • 我无法使用与您的数据相似的随机生成的数据来重现这一点。你能通过dput()分享你的inDATA吗?我曾经复制的按预期工作的是:inDATA &lt;- data.frame(AVAL = rnorm(500,11000,5000), ACTARMCD = sample(c("GROUP_A","GROUP_B"), 500, replace = T), PARAMCD = "param1", RESPFL = sample(c("N","Y"), 500, replace = T))
  • @juljo,很遗憾,我无法上传任何数据,因为它是公司的专有数据。但是,我最终使用下面的代码从 ggplot 切换到 plotly,现在可以按预期工作。有人知道为什么 ggplot 不能在这里工作吗?myplot &lt;- inDATA %&gt;% filter(PARAMCD=="param1") %&gt;% plot_ly(x = ~ACTARMCD, y = ~AVAL, color = ~RESPFL, type = "box",boxmean=TRUE) %&gt;% layout(boxmode = "group")
  • 我怀疑任何人都可以在无法重现问题的情况下给出明确的解释,但值得一提的是,ggplot 中的箱线图代码不需要 group_by(x_variable, fill_variable) 行。

标签: r ggplot2 plot boxplot


【解决方案1】:

我最终通过使用 plotly 而不是 ggplot 解决了这个问题。有效的代码是:

myplot <- inDATA %>% filter(PARAMCD=="param1") %>% 
plot_ly(x = ~ACTARMCD, y = ~AVAL, color = ~RESPFL, type = "box",boxmean=TRUE) %>% layout(boxmode = "group")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多