График на данни с една колона като основна отметка и друга като второстепенна

Обобщих някои данни от времеви серии на почасово ниво за една седмица. За да направя това, разделих датите и генерирах две колони в рамка с данни - едната указва часа, а другата деня от седмицата.

Искам да начертая всички данни с големи отметки по оста 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

person user3471145    schedule 28.03.2014    source източник
comment
dotplot е нефункционираща R функция.   -  person Robert Krzyzanowski    schedule 28.03.2014


Отговори (1)


#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

въведете описание на изображението тук

person Andre Silva    schedule 30.03.2014