如何在一个图形中绘制多个箱线图

时间:2018-04-09 22:39:03

标签: r parameters boxplot

我无法找到一个解决方案,在一个图中使用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"在其余的图中,它显示了所有重叠的日期。

我的问题是:如何用一些闪避位置在一个图表中显示其余日期?

非常感谢任何帮助。

1 个答案:

答案 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)

enter image description here

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))

enter image description here