我已经按小时汇总了一些时间序列数据一周。为此,我分割了日期时间并在数据框中生成了两列 - 一列表示小时,另一列表示星期几。
我希望将整个数据绘制为x轴主刻度标签作为星期几,并将小刻度作为一天中的小时以升序绘制。
这是我正在使用的代码,但它只针对一列进行绘制。在绘图之前,我应该将我的两列重新转换为一个时间戳吗?
dotplot( Vol ~ Day.Hour, data=merged, type="l",xlab="Time(Day.Hour)",ylab="Number of People Departure/Arrival")
我的数据与此类似:
Day.Hour Hour Day Vol
Sun.0 0 Sun 2557
Fri.3 3 Fri 4050
答案 0 :(得分:0)
#reproducible example
merged = read.table(header=T, sep=" ", text="
Day.Hour Hour Day Vol
Sun.0 0 Sun 2557
Sun.3 3 Sun 1234
Sun.6 6 Sun 2045
Sun.9 9 Sun 4050")
在df中添加一个带有序列值的列。我假设你的时间序列有一个固定和连续的时间间隔。
merged = data.frame(merged,Seq=seq(1,nrow(merged))) #add column Seq
merged #visualize the new data
Day.Hour Hour Day Vol Seq
1 Sun.0 0 Sun 2557 1
2 Sun.3 3 Sun 1234 2
3 Sun.6 6 Sun 2045 3
4 Sun.9 9 Sun 4050 4
用两个" x"绘制折线图。轴分别指小时和工作日。
plot(merged$Seq, merged$Vol,
type="l",
xlab="Time(Day.Hour)",ylab="Number of People Departure/Arrival",
col.axis="white", xaxt='n', yaxt='n')
axis(side=1, at=merged$Seq, labels = merged$Hour,tick=F)
axis(side=1, at=merged$Seq, labels = merged$Day, padj=1.5)
axis(side=2, at=round(seq(min(merged$Vol),
max(merged$Vol),
by=((max(merged$Vol)-min(merged$Vol))/3)),0)) #plot only four values in y axis starting on minimum and ending on maximum