绘制数据,其中一列为主要刻度,另一列为次要刻度

时间:2014-03-28 03:56:04

标签: r plot time-series data-visualization axis-labels

我已经按小时汇总了一些时间序列数据一周。为此,我分割了日期时间并在数据框中生成了两列 - 一列表示小时,另一列表示星期几。

我希望将整个数据绘制为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

1 个答案:

答案 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

enter image description here