R 使用ggplot2更改时间序列上的x记号数

R 使用ggplot2更改时间序列上的x记号数,r,ggplot2,time-series,graphing,R,Ggplot2,Time Series,Graphing,我试图绘制一个时间序列x_输出,如下所示: timestamp city wait_time weekday time 2015-07-14 09:00:00 Boston 1.6 Tuesday 09:00:00 2015-07-14 09:01:00 Boston 1.8 Tuesday 09:00:00 2015-07-14 09:02:00 Boston 2.4 Tuesday 09:00

我试图绘制一个时间序列
x_输出
,如下所示:

              timestamp   city wait_time weekday     time
    2015-07-14 09:00:00 Boston       1.6 Tuesday 09:00:00
    2015-07-14 09:01:00 Boston       1.8 Tuesday 09:00:00
    2015-07-14 09:02:00 Boston       2.4 Tuesday 09:00:00
    2015-07-14 09:03:00 Boston       2.9 Tuesday 09:00:00
    2015-07-14 09:04:00 Boston       4.5 Tuesday 09:00:00
    2015-07-14 09:05:00 Boston       5.6 Tuesday 09:00:00
下面是我如何绘制它的:

brks <- seq(1, length(x_output$timestamp), 10)
brks_labels <- x_output[brks, ]

p <- ggplot(x_output, aes(x=as.character(timestamp), y=wait_time, group=city)) + geom_line(aes(color=city), size=1.5) + theme(axis.text.x = element_text(angle = 90, hjust=1), legend.position = "bottom") + labs(x=NULL, y="Waiting time (minutes)") + scale_x_discrete(breaks = brks, labels = brks_labels)
print(p)

brk您的中断必须与您的
aes(x=
)类型相同,即
scale\u x\u离散(中断=x\u输出$timestamp[brk])
工作

但是,请注意,将时间戳转换为这样的分类在时间刻度上可能不准确-如果一个时间戳跳过2分钟,其余时间跳过1分钟,则不会反映在图形上


我认为您最好将X作为日期时间,并使用
+scale\u X\u datetime(breaks=date\u breaks(“10分钟”))
。如果有多个时间窗口被无数据的广度分隔,则可以使用一个变量来指示每行所属的“窗口”,并使用
facet\u wrap
并排绘制窗口,这将允许您在保留x轴比例的同时跳过间隙。例如,如果r数据每天只针对一个特定的窗口。

最好有一个可复制的示例-在您的示例数据中,所有等待时间都是NA,因此我们很难绘制任何类型的图。如果更简单,只需生成一些虚拟数据。这很有效!谢谢。最后一个问题(我也可以为其打开一个新问题):您知道如何在ggplot2上设置时间戳的x范围限制吗?它在绘图上显示24小时,但我只需要上午9点到下午6点。我觉得这就像是
scale\u x\u datetime(breaks=date\u breaks(“1小时”)、limits=c(as.POSIXct(“9:00”)、as.POSIXct(“18:00”))
但我不确定如何在timestampdate\u breaks()上指定一个没有日期的时间。不推荐使用breaks\u width()。