首页 > 解决方案 > 来自 dplyr 的挂条图

问题描述

我想弄清楚如何从 dplyr 创建一个悬挂的条形图。

我使用 dplyr 如下:

table4 <- cr %>%
  group_by(samp.N, RSQ) %>%
  summarize(
    MRB_uc = mean(CF.F1F2/0.40*100)-100,
    MRB_sb = mean(SBC.F1F2.Alpha/0.40*100) - 100,
    MRB_bp = mean(BPC.F1F2.Alpha/0.40*100) - 100
  )

这为我提供了这个:

   samp.N   RSQ MRB_uc MRB_sb MRB_bp
 1     50   0.3   1.42  37.6   37.6 
 2     50   0.4   8.61  43.1   43.1 
 3     50   0.5   7.41  31.6   31.6 
 4     50   0.6   5.06  21.5   21.5 
 5     50   0.7   3.38  14.1   14.1 
 6     50   0.8  -1.07   5.16   5.16
 7    100   0.3  -6.41  40.3   40.3 
 8    100   0.4 -10.6   21.0   21.0 
 9    100   0.5  -9.02  13.2   13.2 
10    100   0.6  -9.85   5.14   5.14
11    100   0.7  -7.94   2.08   2.08
12    100   0.8  -4.81   1.28   1.28

我想要做的是创建一个悬挂条形图,其中 x 轴是 samp.N 值和 RSQ 值。条形是 MRB_uc、MRB_sb 和 MRB_bp 的值。鉴于某些值为负数,某些条形将高于零,而另一些则低于零(因此悬挂条形图)

我还没有任何代码,因为我完全不熟悉如何做到这一点。任何建议将不胜感激。

标签: rplotdplyr

解决方案


感谢 r-help listserv 上的海报提供了我正在寻找的答案。

library(ggplot2)
library(dplyr)
library(tidyr)

dta <- read.table( text =
                     "samp.N   RSQ    MRB_uc  MRB_sb  MRB_bp
                   50      0.3      1.42    37.6   37.6
                   50      0.4      8.61    43.1   43.1
                   50      0.5      7.41    31.6   31.6
                   50      0.6      5.06    21.5   21.5
                   50      0.7      3.38    14.1   14.1
                   50      0.8     -1.07    5.16   5.16
                   100      0.3     -6.41    40.3   40.3
                   100      0.4     -10.6    21.0   21.0
                   100      0.5     -9.02    13.2   13.2
                   100      0.6     -9.85    5.14   5.14
                   100      0.7     -7.94    2.08   2.08
                   100      0.8     -4.81    1.28   1.28
                   ", header = TRUE )
dta2 <- (   dta
            %>% mutate( samp.N = factor( samp.N )
                        , RSQ = factor( RSQ )
            )
            %>% gather( Measure, value, -c( samp.N, RSQ ) )
)

ggplot( dta2, aes( x = RSQ, y = value, fill = samp.N ) ) +
  geom_bar( stat = "identity", position = "dodge", colour = "black" ) +
  facet_wrap( ~ Measure, ncol = 1, scale = "free_y" ) +
  ylab( "" )

推荐阅读