我如何让所有30分钟的标签中断都显示在x轴上?

问题描述 投票:1回答:1

我有一些以30分钟为间隔记录的数据:

df <- structure(list(from = c("2019-11-24T23:30Z", "2019-11-25T00:00Z", 
"2019-11-25T00:30Z", "2019-11-25T01:00Z", "2019-11-25T01:30Z", 
"2019-11-25T02:00Z", "2019-11-25T02:30Z", "2019-11-25T03:00Z", 
"2019-11-25T03:30Z", "2019-11-25T04:00Z", "2019-11-25T04:30Z", 
"2019-11-25T05:00Z", "2019-11-25T05:30Z", "2019-11-25T06:00Z", 
"2019-11-25T06:30Z", "2019-11-25T07:00Z", "2019-11-25T07:30Z", 
"2019-11-25T08:00Z", "2019-11-25T08:30Z", "2019-11-25T09:00Z", 
"2019-11-25T09:30Z", "2019-11-25T10:00Z", "2019-11-25T10:30Z", 
"2019-11-25T11:00Z", "2019-11-25T11:30Z"), to = c("2019-11-25T00:00Z", 
"2019-11-25T00:30Z", "2019-11-25T01:00Z", "2019-11-25T01:30Z", 
"2019-11-25T02:00Z", "2019-11-25T02:30Z", "2019-11-25T03:00Z", 
"2019-11-25T03:30Z", "2019-11-25T04:00Z", "2019-11-25T04:30Z", 
"2019-11-25T05:00Z", "2019-11-25T05:30Z", "2019-11-25T06:00Z", 
"2019-11-25T06:30Z", "2019-11-25T07:00Z", "2019-11-25T07:30Z", 
"2019-11-25T08:00Z", "2019-11-25T08:30Z", "2019-11-25T09:00Z", 
"2019-11-25T09:30Z", "2019-11-25T10:00Z", "2019-11-25T10:30Z", 
"2019-11-25T11:00Z", "2019-11-25T11:30Z", "2019-11-25T12:00Z"
), forecast = c(210L, 199L, 200L, 204L, 199L, 192L, 191L, 194L, 
197L, 192L, 193L, 194L, 204L, 210L, 242L, 272L, 293L, 290L, 275L, 
270L, 272L, 272L, 269L, 268L, 266L), actual = c(200L, 200L, 198L, 
189L, 191L, 193L, 197L, 193L, 193L, 194L, 199L, 207L, 230L, 255L, 
272L, 283L, 283L, 278L, 277L, 278L, 273L, 270L, 270L, 272L, 283L
), index = c("moderate", "moderate", "moderate", "moderate", 
"moderate", "moderate", "moderate", "moderate", "moderate", "moderate", 
"moderate", "moderate", "moderate", "moderate", "high", "high", 
"high", "high", "high", "high", "high", "high", "high", "high", 
"high")), row.names = c(NA, 25L), class = "data.frame")

产品:

> df
                from                to forecast actual    index
1  2019-11-24T23:30Z 2019-11-25T00:00Z      210    200 moderate
2  2019-11-25T00:00Z 2019-11-25T00:30Z      199    200 moderate
3  2019-11-25T00:30Z 2019-11-25T01:00Z      200    198 moderate
4  2019-11-25T01:00Z 2019-11-25T01:30Z      204    189 moderate
5  2019-11-25T01:30Z 2019-11-25T02:00Z      199    191 moderate
6  2019-11-25T02:00Z 2019-11-25T02:30Z      192    193 moderate
7  2019-11-25T02:30Z 2019-11-25T03:00Z      191    197 moderate
8  2019-11-25T03:00Z 2019-11-25T03:30Z      194    193 moderate
9  2019-11-25T03:30Z 2019-11-25T04:00Z      197    193 moderate
10 2019-11-25T04:00Z 2019-11-25T04:30Z      192    194 moderate
11 2019-11-25T04:30Z 2019-11-25T05:00Z      193    199 moderate
12 2019-11-25T05:00Z 2019-11-25T05:30Z      194    207 moderate
13 2019-11-25T05:30Z 2019-11-25T06:00Z      204    230 moderate
14 2019-11-25T06:00Z 2019-11-25T06:30Z      210    255 moderate
15 2019-11-25T06:30Z 2019-11-25T07:00Z      242    272     high
16 2019-11-25T07:00Z 2019-11-25T07:30Z      272    283     high
17 2019-11-25T07:30Z 2019-11-25T08:00Z      293    283     high
18 2019-11-25T08:00Z 2019-11-25T08:30Z      290    278     high
19 2019-11-25T08:30Z 2019-11-25T09:00Z      275    277     high
20 2019-11-25T09:00Z 2019-11-25T09:30Z      270    278     high
21 2019-11-25T09:30Z 2019-11-25T10:00Z      272    273     high
22 2019-11-25T10:00Z 2019-11-25T10:30Z      272    270     high
23 2019-11-25T10:30Z 2019-11-25T11:00Z      269    270     high
24 2019-11-25T11:00Z 2019-11-25T11:30Z      268    272     high
25 2019-11-25T11:30Z 2019-11-25T12:00Z      266    283     high

一旦绘制,如何在x轴上显示每30分钟的间隔,而不是默认间隔?

library(ggplot2)

ggplot(df) +
  geom_line(aes(from, forecast),
             colour = "grey",
            linetype = "dashed") +
  geom_line(aes(from, actual),
             colour = "blue") +
  theme(axis.text.x = element_text(angle = 90, hjust = 0))

产品:

enter image description here

r ggplot2 label
1个回答
0
投票

请确保x轴具有适当的格式,然后您可以使用scale_x_datetime(date_breaks = "30 min")设置分隔符。

df %>%
  mutate(from = as.POSIXct(from, format="%Y-%m-%dT%H:%M")) %>%
  ggplot() +
  geom_line(aes(from, forecast),
            colour = "grey",
            linetype = "dashed") +
  geom_line(aes(from, actual),
            colour = "blue") +
  theme(axis.text.x = element_text(angle = 90, hjust = 0)) +
  scale_x_datetime(date_breaks = "30 min")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.