我正在嘗試在 x 軸上繪制一個限制從 2022-05-29 07:00:00 到 2022-05-29 07:00:00 PM 的圖表。在這些限制內,我想要 1 小時的休息時間。我正在使用 scale_x_datetime 以便我可以將其繪制為連續變數而不是離散變數。我創建了一個包含所有中斷的向量,稱為軸序。
c("2022-05-29 07:00:00", "2022-05-29 08:00:00", "2022-05-29 09:00:00",
"2022-05-29 10:00:00", "2022-05-29 11:00:00", "2022-05-29 12:00:00",
"2022-05-29 01:00:00", "2022-05-29 02:00:00", "2022-05-29 03:00:00",
"2022-05-29 04:00:00", "2022-05-29 05:00:00", "2022-05-29 06:00:00",
"2022-05-29 07:00:00", "2022-05-29 08:00:00")
這是我的資料
structure(list(Id = c("user_6", "user_6", "user_6", "user_6",
"user_6", "user_6", "user_6", "user_6", "user_6", "user_6", "user_6",
"user_6", "user_6", "user_6", "user_6", "user_6", "user_6", "user_6",
"user_6", "user_6", "user_6", "user_6", "user_6", "user_6"),
ActivityHour = structure(c(1653825600, 1653786000, 1653789600,
1653793200, 1653796800, 1653800400, 1653804000, 1653807600,
1653811200, 1653814800, 1653818400, 1653822000, 1653825600,
1653786000, 1653789600, 1653793200, 1653796800, 1653800400,
1653804000, 1653807600, 1653811200, 1653814800, 1653818400,
1653822000), class = c("POSIXct", "POSIXt"), tzone = ""),
TotalIntensity = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 28L, 13L,
13L, 143L, 20L, 11L, 19L, 54L, 9L, 19L, 24L, 19L, 9L, 0L,
0L, 0L, 0L), AverageIntensity = c(0, 0, 0, 0, 0, 0, 0, 0.466667,
0.216667, 0.216667, 2.383333, 0.333333, 0.183333, 0.316667,
0.9, 0.15, 0.316667, 0.4, 0.316667, 0.15, 0, 0, 0, 0)), row.names = c(NA,
-24L), class = "data.frame")
最后但并非最不重要的是我的圖形代碼
ggplot(data=df2, aes(x = ActivityHour, y = AverageIntensity))
geom_point()
geom_line()
theme(axis.text.x = element_text(angle = 45))
scale_x_datetime(breaks = "axisorder"), limits = c(as.POSIXct("2022-05-29 07:00:00"),as.POSIXct("2022-05-29 07:00:00"))
ggtitle("Average Intensity user_6",
subtitle = "4-12-2016")
我只是不明白如何設定 scale_x_datetime 來獲得這些限制和中斷?我的 x 軸資料已經格式化為 (posixct.)
任何幫助,將不勝感激!
更新——這就是我所在的地方..
我已將我的 df2$ActivityHour 轉換為 POSIXct
1653800400, 1653804000, 1653807600, 1653811200, 1653814800, 1653818400,
1653822000, 1653825600, 1653786000, 1653789600, 1653793200, 1653796800,
1653800400, 1653804000, 1653807600, 1653811200, 1653814800, 1653818400,
1653822000), class = c("POSIXct", "POSIXt"), tzone = "")
然后我更新了 date_breaks = "hour" 并更改了我的限制 limits = c(as.POSIXct("2022-05-29 07:00:00"), as.POSIXct("....))
我的新繪圖資料看起來像這樣
ggplot(data=df2, aes(x = ActivityHour, y = AverageIntensity))
geom_point()
geom_line()
theme(axis.text.x = element_text(angle = 45))
scale_x_datetime(date_breaks = "hour", limits = c(as.POSIXct("2022-05-29 07:00:00"),as.POSIXct("2022-05-29 19:00:00")))
ggtitle("Average Intensity user_6",
subtitle = "4-12-2016")
我的情節很奇怪,好像 df2$AverageIntensity 沒有用 $ActivityHour 值正確繪制值。例如,13:00:00 不再與 0.31 的平均強度相關,因為沒有資料。我理解這是因為 12:00:00 之后的 df2$ActivityHour 值應該是 13:00:00、14:00:00、15:00:00 等,而不是回到 01:00:00。所以我正在尋找解決這個問題的最快方法?
UPDATE2 - 我用替換功能解決了這個問題
df2$ActivityHour <- replace(df2$ActivityHour,1,"2022-05-29 00:00:00")
然后用每個位置替換。
語法:replace(list , position , replacement_value)
uj5u.com熱心網友回復:
你有幾個問題。
首先,您axisorder是字符格式,而不是所需的 POSIXct。其次,您已將“axisorder”放在引號中,因此 ggplot 認為您希望在名為"axisorder". 無論如何,您實際上并不需要axisorder,因為正如 Stefan 指出的那樣,您可以使用date_breaks = "hour"
第三,也是最重要的一點,您需要使用 24 小時時間格式,因此您的第二個限制應該是“2022-05-29 19:00:00”。資料框中的所有時間也是如此。中午之后的時間需要加上 12 小時(午夜的初始值需要去掉 12 小時):
df2$ActivityHour[14:24] <- df2$ActivityHour[14:24] 12 * 3600
df2$ActivityHour[1] <- df2$ActivityHour[1] - 12 * 3600
ggplot(data=df2, aes(x = ActivityHour, y = AverageIntensity))
geom_point()
geom_line()
theme(axis.text.x = element_text(angle = 45, hjust = 1))
scale_x_datetime(date_breaks = "hour",
limits = c(as.POSIXct("2022-05-29 07:00:00"),
as.POSIXct("2022-05-29 19:00:00")))
ggtitle("Average Intensity user_6", subtitle = "4-12-2016")

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482649.html
上一篇:ggplotx軸刻度線丟失
