我无法找到一个解决方案,在一个图中使用R中的boxplot绘制多个箱图。
我有一个数据集,其中包含5个日期测量的48个地点的土壤湿度。站点分为四类:A,C,M,P(每个站点12个站点)。
我将数据保存为包含6列的.csv文件。
第一列包含网站的类别:A,C,M或P.
第2列到第6列包含测量值(febr2017,mar2017,jun2017,sep2017和feb2018)。
我想根据网站的类别绘制所有这5个日期的土壤湿度的箱线图。
到目前为止我的代码是:
boxplot(feb2017~class, humidity, na.action=NULL, main="Soil humidity", xlab="Class", ylab="Humidity (%)", col=(c("yellowgreen")))
然而,这只显示了2月份的土壤湿度。 我试过使用参数" add = TRUE"在其余的图中,它显示了所有重叠的日期。
我的问题是:如何用一些闪避位置在一个图表中显示其余日期?
非常感谢任何帮助。
答案 0 :(得分:1)
这是tidyverse
提供良好解决方案的情况。
一些假数据:
set.seed(111)
df1 <- data.frame(class = sample(c("A", "C", "M", "P"), 100, replace = TRUE),
feb2017 = sample(0:100, 100, replace = TRUE),
mar2017 = sample(0:100, 100, replace = TRUE),
jun2017 = sample(0:100, 100, replace = TRUE),
sep2017 = sample(0:100, 100, replace = TRUE),
feb2018 = sample(0:100, 100, replace = TRUE))
诀窍是将gather
日期分为一列,将这些日期的值改为另一列。您还需要设置因子级别以正确的顺序获取日期。
您可以按构面或颜色指示网站类。如下所示,我认为颜色效果更好。
library(tidyverse)
df1 %>%
gather(Date, Humidity, -class) %>%
mutate(Date = factor(Date, levels = c("feb2017", "mar2017", "jun2017",
"sep2017", "feb2018"))) %>%
ggplot(aes(Date, Humidity)) +
geom_boxplot() +
facet_grid(~class)
df1 %>%
gather(Date, Humidity, -class) %>%
mutate(Date = factor(Date, levels = c("feb2017", "mar2017", "jun2017",
"sep2017", "feb2018"))) %>%
ggplot(aes(Date, Humidity)) +
geom_boxplot(aes(fill = class))