gpt4 book ai didi

r - 时间数据的ggplot2和chron条形图scale_x_chron

转载 作者:行者123 更新时间:2023-12-02 09:04:39 27 4
gpt4 key购买 nike

我有很多次,想在条形图中绘制每次的频率

library(ggplot2)
library(chron)
test <- data.frame(times = c(rep("7:00:00",4), rep("8:00:00",3),
rep("12:00:00",1), rep("13:00:00",5)))
test$times <- times(test$times)
test
times
1 07:00:00
2 07:00:00
3 07:00:00
4 07:00:00
5 08:00:00
6 08:00:00
7 08:00:00
8 12:00:00
9 13:00:00
10 13:00:00
11 13:00:00
12 13:00:00
13 13:00:00

选择binwidth的值来表示分钟

p <- ggplot(test, aes(x = times)) + geom_bar(binwidth=1/24/60)
p + scale_x_chron(format="%H:%M")

如您所见,x 轴刻度加一小时:

enter image description here

我感觉这与时区有关,但我无法真正确定它:

Sys.timezone()
[1] "CET"

编辑:感谢@shadow 的评论

更新:

如果我首先运行 Sys.setenv(TZ='GMT') ,它会完美运行。问题出在 times() 函数中。我自动将时区设置为 GMT,如果我绘制 x 轴,ggplot 会注意到我的系统时区是 CET,并在绘图上添加一小时。现在,如果我将系统时区设置为 GMT,ggplot 不会增加一个小时。

最佳答案

问题是 times(...) 假设时区是 GMT,然后 ggplot 补偿您的实际时区。这很公平:除非您指定时区,否则时间毫无意义。更大的问题是,似乎不可能告诉 times(...) 实际时区是什么(如果其他人知道如何做到这一点,我很想知道)。

解决方法是使用 POSIXct 并识别您的时区(我的是 EST)。

test <- data.frame(times = c(rep("7:00:00",4), rep("8:00:00",3), 
rep("12:00:00",1), rep("13:00:00",5)))
test$times <- as.POSIXct(test$times,format="%H:%M:%S",tz="EST")
p <- ggplot(test, aes(x = times)) + geom_bar(binwidth=60,width=.01)

binwidth=60 为 60 秒。

关于r - 时间数据的ggplot2和chron条形图scale_x_chron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377913/

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