【发布时间】:2017-02-13 17:20:49
【问题描述】:
我有一些连续收集的降雨数据,我从中计算了每日总数。这是一些玩具数据:
Date <- c(seq(as.Date("2016-07-01"), by = "1 day", length.out = 10))
rain_mm <- c(3,6,8,12,0,0,34,23,5,1)
rain_data <- data.frame(Date, rain_mm)
我可以将这些数据绘制如下:
ggplot(rain_data, aes(Date, rain_mm)) +
geom_bar(stat = "identity") +
scale_x_date(date_labels = "%d")
这给出了以下内容:
这看起来不错。某一天的降雨量是显而易见的。但是,也可以理解为在一天的中午到第二天的中午之间,下了一定量的雨,这是错误的。如果该图与同一时期内相关连续变量的其他图相结合,这尤其是一个问题。
为了解决这个问题,我可以使用geom_step,如下所示:
library(ggplot)
ggplot(rain_data, aes(Date, rain_mm)) +
geom_step() +
scale_x_date(date_labels = "%d")
这给出了:
这是显示数据的更好方式,现在 scale_x_date 似乎是一个连续轴。但是,最好将台阶下方的区域填满,但似乎找不到直接的方法。
Q1:如何在 geom_step 下方填充?有可能吗?
将Date 转换为POSIXct 也可能很有用,以便在SO question here 中讨论的多图图形中促进相同的x 轴。
我可以这样做:
library(dplyr)
rain_data_POSIX <- rain_data %>% mutate(Date = as.POSIXct(Date))
Date rain_mm
1 2016-07-01 01:00:00 3
2 2016-07-02 01:00:00 6
3 2016-07-03 01:00:00 8
4 2016-07-04 01:00:00 12
5 2016-07-05 01:00:00 0
6 2016-07-06 01:00:00 0
7 2016-07-07 01:00:00 34
8 2016-07-08 01:00:00 23
9 2016-07-09 01:00:00 5
10 2016-07-10 01:00:00 1
但是,这会为每个日期提供 01:00 的时间。我宁愿有 00:00。我可以在as.POSIXct 函数调用中更改它,还是必须在之后使用单独的函数来更改?我认为这与tz = "" 有关,但无法弄清楚。
如何将类Date 转换为POSIXct 以使生成的时间为00:00?
谢谢
【问题讨论】:
-
第一个问题可能重复:stackoverflow.com/questions/21887088/…
-
第二个问题:尝试
tz="GMT"或干脆删除 1 小时:as.POSIXct(Date) - 3600.. -
@ArtemSokolov 我已经看到了,但无法真正弄清楚答案。也想看看最近有没有什么变化。谢谢
-
@timat
tz="GMT"没有任何影响,我得到相同的 01:00 时间。我可以只减去一个小时的秒数,但这对我理解或使用as.POSIXct函数来处理更长的代码段没有帮助 -
@RoryShaw 我在对您的第二个问题的回复中添加了一个编辑,该编辑使链接示例适应您的数据并提供了一些额外的解释。