【问题标题】:Plotting two boxplots using the same variable in one figure in base R在base R中的一个图中使用相同的变量绘制两个箱线图
【发布时间】:2021-04-24 21:05:26
【问题描述】:

我试图在基础 R 中的同一图中绘制两个箱线图,一个箱线图用于 PM2.5 的值,其中 RAIN 为 0,小时为 12,另一个用于当 RAIN 更大时 PM2.5 的值大于 0,小时为 12。这是我的数据集的一小部分,称为“dat”:

     No year month day hour PM2.5 PM10 SO2 NO2   CO O3 TEMP   PRES  DEWP RAIN  wd WSPM      station
1  7345 2014     1   1    0    20   90  18  62   NA NA -1.5 1007.3 -12.5    0 SSE  0.6 Aotizhongxin
2  7346 2014     1   1    1    43  348  25  91 1100  1 -2.6 1006.9 -12.1    0 WSW  0.2 Aotizhongxin
3  7347 2014     1   1    2    79  423  41 103 1800  1 -3.0 1006.9 -11.3    0 WSW  0.6 Aotizhongxin
4  7348 2014     1   1    3    82  337  43 101 2100  1 -3.3 1006.4 -11.1    0  SW  0.6 Aotizhongxin
5  7349 2014     1   1    4   124  594  59 130 2400  1 -2.7 1006.1 -10.5    0 ENE  1.8 Aotizhongxin
6  7350 2014     1   1    5    89  307  47 102 2500  1 -3.1 1006.6 -10.4    0   N  1.0 Aotizhongxin
7  7351 2014     1   1    6    59  161  45  91 1900  1 -2.6 1007.2 -10.9    0   S  1.0 Aotizhongxin
8  7352 2014     1   1    7    31   93  24  69  900  4 -2.9 1007.9 -10.2    0  SE  1.1 Aotizhongxin

这是我迄今为止尝试过的,但我只从中得到了一个箱线图:

not_rainy <- subset(dat, dat$hour == 12 & dat$RAIN == 0)
rainy <- subset(dat, dat$hour == 12 & dat$RAIN > 0)
vals <- c(rainy$PM2.5,not_rainy$PM2.5)
boxplot(vals)

我应该对此有何改变?

【问题讨论】:

    标签: r


    【解决方案1】:

    不需要concatenate 两个子集:

    not_rainy <- subset(dat, dat$hour == 12 & dat$RAIN == 0)
    rainy <- subset(dat, dat$hour == 12 & dat$RAIN > 0)
    # vals <- c(rainy$PM2.5,not_rainy$PM2.5)
    boxplot(not_rainy, rainy)
    

    【讨论】:

      【解决方案2】:

      ggplot 通常是答案:

      library(ggplot2)
      
      dat$rainy <- dat$RAIN > 0
      ggplot(dat[dat$hour == 12,], aes(rainy, PM2.5)) + geom_boxplot() 
         
      

      【讨论】:

        【解决方案3】:

        如果您想使用基础绘图系统:

        也许您可以通过调整 mfrow 参数来尝试多面板图:

        par(mfrow=c(2, 1))
        

        然后你可以用两个数据集调用boxplot()

        boxplot(rainy)
        boxplot(not_rainy)
        

        你也可以用ggplot2来做

        -您可以将分类逻辑变量/参数映射到 aes() 的“x”参数并使用 +geom_boxplot(),正如 @dash2 所建议的那样。
        -另一种选择:通过调用某些东西将您的数据放入长格式 喜欢:

        data.frame(data=vals, rainy=c(rep(c(TRUE, FALSE), times=length(rainy)), rep(c(TRUE, FALSE), times=length(not_rainy))))
        

        然后在调用 ggplot 时使用 +facet_wrap(~rainy)

        另一种选择是使用 cowplot 包:

        创建两个 ggplot 对象并保存它们*:

        plot1<-ggplot(rainy, aes(y=PM2.5))+geom_boxplot()
        plot2<-ggplot(not_rainy, aes(y=PM2.5))+geom_boxplot()
        

        然后使用cowplot::plot_grid():

        cowplot::plot_grid(plot1, plot2)
        

        *这也可以与基图一起使用

        【讨论】:

          猜你喜欢
          • 2020-12-02
          • 1970-01-01
          • 1970-01-01
          • 2021-01-01
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多