gpt4 book ai didi

R - ggplot2 - 如何在 POSIX 轴上使用限制?

转载 作者:行者123 更新时间:2023-12-01 02:19:48 25 4
gpt4 key购买 nike

在 ggplot 轴中操作 POSIX 的最聪明方法是什么?

我正在尝试创建一个函数,用于绘制跨越数周的多个图形(每天一个),使用 POSIX 时间作为 x 轴。

为此,我创建了一个额外的 整数列 DF$Day那天,我输入到函数中。然后,我使用那天创建一个子集,我使用 ggplot2 绘制它。我想出了如何使用 scale_x_datetime格式化 POSIX x 轴。基本上,我让它只显示小时和分钟,省略日期。

这是我的问题:如何在一天中的几个小时内为每个单独的图表设置限制?

下面是一些有效的、可重现的代码来获得一个想法。它创建第一天,显示 3 秒,然后创建第二天的 yield 。但是,每天的限制是根据 time 的范围选择的。多变的。例如,如何使范围成为一整天(0 小时 - 24 小时)?

DF <- data.frame(matrix(ncol = 0, nrow = 4))

DF$time <- as.POSIXct(c("2010-01-01 02:01:00", "2010-01-01 18:10:00", "2010-01-02 04:20:00", "2010-01-02 13:30:00"))
DF$observation <- c(1,2,1,2)
DF$Day <- c(1,1,2,2)

for (Individual_Day in 1:2) {
Day_subset <- DF[DF$Day == as.integer(Individual_Day),]

print(ggplot( data=Day_subset, aes_string( x="time", y="observation") ) + geom_point() +
scale_x_datetime( breaks=("2 hour"), minor_breaks=("1 hour"), labels=date_format("%H:%M")))

Sys.sleep(3) }

Second plot created by the function, to show the axis

最佳答案

嗯,这是一种方法。

# ...
for (Individual_Day in 1:2) {
Day_subset <- DF[DF$Day == as.integer(Individual_Day),]
lower <- with(Day_subset,as.POSIXct(strftime(min(time),"%Y-%m-%d")))
upper <- with(Day_subset,as.POSIXct(strftime(as.Date(max(time))+1,"%Y-%m-%d"))-1)
limits = c(lower,upper)

print(ggplot( data=Day_subset, aes( x=time, y=observation) ) +
geom_point() +
scale_x_datetime( breaks=("2 hour"),
minor_breaks=("1 hour"),
labels=date_format("%H:%M"),
limits=limits)
)
}


lower的计算取子集中的最短时间并将其强制为仅包含日期部分的字符(例如,去除时间部分)。转换回 POSIXct 生成那一天的开始。
upper的计算有点复杂。您必须将最大时间转换为日期值并加 1(例如 1 天),然后转换为字符(去掉时间部分),转换回 POSIXct,然后减去 1(例如,1 秒)。这会在结束日生成 23:59。

这么小的事情要做的工作量很大。我希望其他人发布一个更简单的方法来做到这一点......

关于R - ggplot2 - 如何在 POSIX 轴上使用限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com