Повторяя ось х R - PullRequest
       1

Повторяя ось х R

0 голосов
/ 26 ноября 2018

У меня есть данные с количеством излучения в определенное время (час, минуты) за три повторяющихся дня.Я хочу построить это так, чтобы ось х шла от 0 до 24 3 раза.Таким образом, ось х повторяется.А на оси у количество радиации.Я попробовал следующий скрипт без каких-либо успехов.

plot(gegevens[,1],gegevens[,2],type='l',col='red',xaxt='n',yaxt='n',xlab='',ylab='')

axis(1, at=(0:74),labels = rep.int(0:24,3), las=2)

mtext('Zonnetijd (u)', side=1,line=3)

Набор данных был слишком большим, поэтому я выбрал первые два часа из двух дней.Первый столбец - время, а второй - излучение.Затем данные выглядят следующим образом:

structure(c(0, 0.083333333333333, 0.166666666666667, 0.25, 0.333333333333333, 
0.416666666666667, 0.5, 0.583333333333333, 0.666666666666667, 
0.75, 0.833333333333333, 0.916666666666667, 1, 1.08333333333333, 
1.16666666666667, 1.25, 1.33333333333333, 1.41666666666667, 1.5, 
1.58333333333333, 1.66666666666667, 1.75, 1.83333333333333, 1.91666666666667, 
0.0158590638878904, 0.0991923972212234, 0.182525730554557, 0.26585906388789, 
0.349192397221223, 0.432525730554557, 0.51585906388789, 0.599192397221223, 
0.682525730554557, 0.76585906388789, 0.849192397221223, 0.932525730554557, 
1.01585906388789, 1.09919239722122, 1.18252573055456, 1.26585906388789, 
1.34919239722122, 1.43252573055456, 1.51585906388789, 1.59919239722122, 
1.68252573055456, 1.76585906388789, 1.84919239722122, 1.93252573055456, 
0.066, 0.066, 0.068, 0.068, 0.068, 0.066, 0.066, 0.066, 0.066, 
0.066, 0.066, 0.066, 0.057, 0, 0, 0, -0.002, 0, 0, -0.002, 0, 
-0.002, -0.009, -0.011, 0, -0.002, 0, -0.002, 0, -0.002, 0, 0.002, 
0, 0, 0, 0, -0.002, -0.002, -0.007, 0, -0.002, 0, 0, 0, -0.002, 
-0.002, -0.002, 0), .Dim = c(48L, 2L), .Dimnames = list(NULL, 
    c("t", "z")))

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Марк дает хороший совет по использованию класса datetime.В целом, это хороший путь. См. В этом вопросе примеры преобразования десятичного числа в часах в POSIX класс datetime .

Если вы хотите продолжить работу с вашими числовыми данными, мы сами данные, чтобы указать, в какой день это происходит,Здесь мы создаем новый столбец, идентичный первому, но добавляем 24 каждый раз, когда первый столбец имеет отрицательную разницу между последовательными строками:

gegevens = cbind(gegevens, gegevens[, 1] + 24 * c(0, cumsum(diff(gegevens[, 1]) < 0)))

Теперь, когда мы строим график с использованием нашего нового столбца, часыправильное расстояние по дням:

plot(gegevens[, 3], gegevens[, 2], type = 'l', col = 'red', xaxt = 'n', yaxt = 'n', xlab = '', ylab = '')

У вас также есть некоторые проблемы с осями.Часа 24 нет, мы обычно называем этот час 024 * 3 = 72, а не 74, поэтому наш максимальный час (начиная с 0) составляет 71:

axis(1, at= 0:71, labels = rep.int(0:23,3), las = 2)

. Вот результирующий график на данных выборки.Он должен «работать» с вашими полными данными, но я согласен с Марком, что это, вероятно, слишком много ярлыков.Использование формата даты и времени POSIXct - лучший способ гибко вносить изменения.

enter image description here

0 голосов
/ 26 ноября 2018

Я думаю, вам лучше перейти к классу даты / времени для вашей оси.Тогда вы сможете лучше контролировать, что строить и т. Д. Ниже приведен пример:

# create example data
df <- data.frame(
  T = seq.POSIXt(as.POSIXct("2000-01-01 00:00:00"), 
    by = "hours", length.out = 24*3)
)
df
df$St <- cumsum(rnorm(24*3))

# plot
png("test.png", width = 8, height = 4, units = "in", res = 200)
op <- par(mar = c(4,4,1,1), ps = 8)
plot(St ~ T, df, type="l",col='red',xaxt='n',yaxt='n',xlab='',ylab='')
axis(1, at=df$T, labels = format(df$T, "%H"), las=2)
mtext('Zonnetijd (u)', side=1,line=3)
par(op)
dev.off()

enter image description here

Вы можете видеть, что у вас может быть местоПроблемы с метками при построении каждой из них.

Вот еще один пример с метками приращения за 3 часа:

# alt plot
AT <- seq(min(df$T), max(df$T), by = "3 hour") # 3 hour increments
LAB <- format(AT, "%H")
png("test2.png", width = 8, height = 4, units = "in", res = 200)
op <- par(mar = c(4,4,1,1), ps = 8)
plot(St ~ T, df, type="l",col='red', xlab='', ylab='', xaxt='n')
axis(1, at = AT, labels = LAB, las=2)
mtext('Zonnetijd (u)', side=2, line=3)
mtext('hour', side=1, line=3)
par(op)
dev.off()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...