[英]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.