我制作了一个包含年,月,温度,上,下列的数据框
最高和最低是每年的最高温度,最低是最低的
我有两个问题:
首先是为什么对于数据帧末尾的某些值不能正确计算上限和下限,但在数据帧的其余部分都可以正常计算呢?
为什么我在使用ggplot时会出现怪异的轴 数据框是这个
您可以看到2017年的上下波动是错误的
Year Month Temp upper lower
1 1880 Jan -.29 -.29 -.09
2 1880 Feb -.18 -.29 -.09
3 1880 Mar -.11 -.29 -.09
......
1655 2017 Nov .84 .96 1.12
1656 2017 Dec .88 .96 1.12
代码是:
newDF <- df %>%
group_by(Year) %>%
mutate(upper = max(Temp), # identify max value for month day
lower = min(Temp) # identify min value for month day
) %>%
ungroup()
p <- ggplot(newDF, aes(Month, Temp)) +
geom_linerange(newDF, mapping=aes(x=Year, ymin=lower, ymax=upper), colour = "wheat2", alpha=.1)
print(p)
答案 0 :(得分:0)
我认为您非常接近-这只是需要调整的第二部分。 ggplot
可以将日期字段用作x轴,但是Month
字段是文本(并且不包括Year)。在这里,我创建了一个称为date
的新列,将它们结合在一起。 lubridate
是一个方便的软件包,因为它可以智能地解析日期格式。
# Fake data
library(dplyr)
df <- data_frame(
Year = rep(1880:2017, each = 12),
Month = rep(month.abb, times = (2017-1880+1)),
Temp = rnorm(n = 1656, mean = 0, sd = 1)
)
newDF = df %>%
# This line adds a date field based on Year and Month
mutate(date = lubridate::ymd(paste(Year, Month, 1))) %>%
group_by(Year) %>%
mutate(upper = max(Temp), # identify max value for month day
lower = min(Temp), # identify min value for month day
) %>%
ungroup()
library(ggplot2)
p <- ggplot(newDF, aes(date, Temp)) +
geom_linerange(newDF, mapping=aes(x=Year, ymin=lower, ymax=upper), colour = "wheat2", alpha=.1)
print(p)