我在R studio中与boxplots斗争。我有一个数据集,看起来像这样:
| 现场|日期|氯化物_mgL|
| - -----|- -----|- -----|
| B| 2021-06-08 12:00:00| 29.13800|
| D| 2021-06-08 12:00:00| 29.41100|
| D| 2021-06-15 12:00:00| 29.92400|
| E级|2021-06-08 12:00:00| 29.29100|
| 一个|2021-06-08 12:00:00| 29.16800|
| D| 2021-06-22 12:00:00| 32.79500|
| C类|2021-06-22 12:00:00| 30.59200|
地点是字符,日期是POSIX,氯化物是数字。我需要制作箱形图,x轴为日期,y轴为氯化物,按日期分组。因此,例如,我需要一个2021-06-08 12:00:00的框,该框由该日期/时间所有研究中心的所有氯化物值组成。我可以做出来,但是由于某些原因,当我做的时候,盒子很小,我需要它们更大,但是width =函数只是把盒子变成了细线,而不是盒子。
这就是我如何制作箱线图:
c <- ggplot(sylvan[sylvan$Site %in% c("A", "B", "C", "D", "E", "F", "G") & sylvan$Chloride_mgL > 25, ], aes(x = date, y = Chloride_mgL, group = date)) +
geom_boxplot(outlier.shape = NA, color = "dark blue") + theme_minimal() + labs(y ="Chloride (mg/L)")
c
这给出了:
太好了,但我想要更大的盒子。所以我尝试使用width参数:
c <- ggplot(sylvan[sylvan$Site %in% c("A", "B", "C", "D", "E", "F", "G") & sylvan$Chloride_mgL > 25, ], aes(x = date, y = Chloride_mgL, group = date)) +
geom_boxplot(width = 2, outlier.shape = NA, color = "dark blue") + theme_minimal() + labs(y ="Chloride (mg/L)")
c
然后它变成了这个:
我怎样才能使方框变宽而不是变成细线条呢?非常感谢!
编辑:尝试@TarJae解决方案,结果是这样的:enter image description here
2条答案
按热度按时间db2dz4w81#
以下是POSIXct中每日数据的箱线图示例:
连续轴上箱线图的默认间距将找到适合该空间的分辨率。
如果我们指定width = 1,盒子将是1个单位宽,在POSIX中是1秒,导致盒子太窄。
在7天间隔的情况下,前两根柱宽为一周,但最后两根(相隔一天)被挤压在一起,形成更窄的柱。
或者我们可以将x轴转换为日期,其中一个单位是一天。宽度为1时,最后两个条将排成一行,中间没有空间。任何更宽的和ggplot将挤压重叠的,以避免重叠。
mec1mxoz2#
问题是datetime类。尝试整个过程中留下的日期作为字符的宽度应该工作。
这个解释直接取自@Jon Spring的评论:
“boxplot width 1将使方框宽度为1个单位。对于x轴上的POSIXct,1个单位是1秒,这对于这个数据来说太窄了。例如,尝试使用width = 60 * 60 * 24 * 5使它们的宽度为5天。棘手的B/c我看到一些比这更接近,所以你会有重叠”