我有几个小时的数据,看起来像这样:
df <- data.frame('hour' = rep(0:23, 2),
'mean' = rnorm(48),
'sd' = rnorm(48))
我希望在整个期间绘制geom_smooth()
:
df %>%
ggplot(aes(y = mean, x = hour)) +
geom_smooth(aes(y = sd))
但是,默认情况下,我的hour
参数被分解为使得每小时仅出现一次,这可以看出是否添加了geom_point()
,但我希望所有48个(实际上还有更多)值出现在我的x轴上
我意识到必须缺少一个唯一的论点,但找不到。
答案 0 :(得分:1)
您需要定义用作date_time对象的小时,下半部分的时间是第二天。
您可以使用以下代码:
library(dplyr)
library(ggplot2)
set.seed(9876) # for reproducibility
df <- data.frame('hour' = seq(c(ISOdate(2019,12,1)), by = "hour", length.out = 48),
'mean' = rnorm(48),
'sd' = rnorm(48))
df %>%
ggplot(aes(y = mean, x = hour)) +
geom_smooth(aes(y = sd))
请让我知道这是否是您想要的。
答案 1 :(得分:0)
如果我的理解正确,您希望geom_smooth行表示数据框中的均值列,而错误功能区则表示sd列。
我相信这应该可以提供您想要的输出:
library(dplyr)
library(ggplot2)
df %>%
ggplot(aes(y = mean, x = hour)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "loess", se = FALSE) +
stat_summary(aes(y = sd), fun.data = mean_se, geom="ribbon", alpha=0.25)