繁体   English   中英

在基础 R 的一个图中使用相同的变量绘制两个箱线图

[英]Plotting two boxplots using the same variable in one figure in base R

我正在尝试 plot 在基础 R 中的同一图中的两个箱线图,一个箱线图用于 PM2.5 的值,其中 RAIN 为 0,小时为 12,另一个用于当 RAIN 大于 0 时 PM2.5 的值和小时是 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)

我应该改变什么?

ggplot 通常是答案:

library(ggplot2)

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

如果您想使用基本绘图系统来执行此操作:

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

par(mfrow=c(2, 1))

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

boxplot(rainy)
boxplot(not_rainy)

您也可以使用 ggplot2 来做到这一点

-您可以 map 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 时使用 use +facet_wrap(~rainy)

另一种选择是使用cowplot package:

创建两个 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)

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

不需要c oncatenate 两个子集:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM