График данных с одним столбцом в качестве основного тика, а другой - в качестве второстепенного

Я собрал некоторые данные временных рядов на почасовом уровне за неделю. Для этого я разделил дату и время и сгенерировал два столбца во фрейме данных — один указывает час, а другой — день недели.

Я хочу отобразить все данные с метками основных тиков по оси 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