График R - нельзя изменить точки (получить знаки минус)

Я хочу построить скорость ветра на трех разных участках с x = датой и y = скоростью ветра.

Сюжет, который я хочу, должен выглядеть примерно так:

введите здесь описание изображенияЗа исключением того, что мне нужна полная дата, а не только день по оси X. Приведенный выше график — это всего лишь обходной путь, так как код, который я хотел использовать, вызывает ошибку, описанную ниже.

Данные:

> u10
          date u10.TXL u10.MF u10.THF
1   2013-05-01     2.9    2.0     3.5
2   2013-05-02     3.1    2.1     4.1
3   2013-05-03     2.8    2.0     3.4

Код, который я хотел использовать:

plot(u10$date[month==5&year==2013],u10$u10.MF[month==5&year==2013],
     type="b", col="green",
     main="wind speed at three sites", ylab="wind speed [m/s]", xlab="date",
     xlim=c(1,30), ylim=c(0,12),
     las=0)

lines(u10$date[month==5&year==2013],u10$u10.THF[month==5&year==2013], col="red")
lines(u10$date[month==5&year==2013],u10$u10.TXL[month==5&year==2013], col="blue")

points(u10$date[month==5&year==2013],u10$u10.THF[month==5&year==2013], col="red")
points(u10$date[month==5&year==2013],u10$u10.TXL[month==5&year==2013], col="blue")

Результаты на следующем графике:

введите здесь описание изображения

Как видите, первые, «исходные» данные построены не со стандартными точками и линией, несмотря на то, что я использовал

type="b"

Я даже пытался использовать команду «pch», которая просто добавит символ поверх знака «минус», который я получаю автоматически.

Вопрос: Почему у меня такой сюжет и почему я не могу его изменить? Это потому, что дата определяется как дата, а R просто принимает значение ветра для каждого времени дня? Но почему это работает для второй и третьей строки?

Обходной путь, кажется, работает, но мне просто интересно, что я сделал не так. Кроме того, я не нашел, как добавить полную дату с помощью обходного решения.

Заранее благодарю за любую помощь

PS: Вот код, который я использовал для обходного пути:

plot(u10$date[month==5&year==2013],NULL,
     type="p", pch="",
     main="wind speed at three sites", ylab="wind speed [m/s]", xlab="date",
     xlim=c(1,30), ylim=c(0,12),
     las=0)

lines(u10$date[month==5&year==2013],u10$u10.MF[month==5&year==2013], col="green")
lines(u10$date[month==5&year==2013],u10$u10.THF[month==5&year==2013], col="red")
lines(u10$date[month==5&year==2013],u10$u10.TXL[month==5&year==2013], col="blue")

points(u10$date[month==5&year==2013],u10$u10.MF[month==5&year==2013], col="green")
points(u10$date[month==5&year==2013],u10$u10.THF[month==5&year==2013], col="red")
points(u10$date[month==5&year==2013],u10$u10.TXL[month==5&year==2013], col="blue")

person Anne    schedule 16.05.2014    source источник
comment
Не могли бы вы отредактировать свой вопрос, чтобы предоставить вывод dput(head(u10,10))?   -  person Stephan Kolassa    schedule 16.05.2014
comment
Кроме того, мне не совсем понятно, чего именно вы пытаетесь достичь. Это просто вопрос получения правильной даты по оси X?   -  person Stephan Kolassa    schedule 16.05.2014
comment
если вам нужен первый график, просто используйте этот код и отключите ось x и добавьте метки даты вручную с помощью mtext или оси   -  person rawr    schedule 16.05.2014


Ответы (2)


Я попробовал ваш код с минимальной выборкой ваших данных. Я также получаю горизонтальные полосы или минусы, когда указываю даты в виде простых строк. Если вы добавите их в data.frame, эти строки преобразуются в формат фактора (str(u10$date)), и если вы попытаетесь построить эти факторы (?plot.factor):

Эта функция реализует метод диаграммы рассеяния для аргументов фактора общей функции графика. Если y отсутствует, создается гистограмма. Для числового y используется прямоугольная диаграмма, а для фактора y показана спин-диаграмма. Для любого другого типа y вызывается следующий метод построения графика, обычно plot.default.

Итак, в вашем случае R пытается нарисовать коробку (фактор по x, числовой по оси y). Минусы - это на самом деле раздавленные боксплоты.

Вы можете решить эту проблему, указав дату в формате Date:

# Generate data
date = c(as.Date(c('2013-05-01', '2013-05-02', '2013-05-03')))
str(date) # 'Date'
u10.TXL = c(2.9,3.1,2.8)
u10.MF = c(2.0,2.1,2.0)
u10.THF = c(3.5,4.1,3.4)
u10 = data.frame(date, u10.TXL, u10.MF, u10.THF)

# Plot the lot:
plot(u10$date,u10$u10.MF,
     type="b", col="green",
     main="wind speed at three sites", ylab="wind speed [m/s]", xlab="date",
     ylim=c(0,12),
     las=0)

lines(u10$date,u10$u10.THF, col="red", type='b')
lines(u10$date,u10$u10.TXL, col="blue", type='b')

Кстати, вы можете делать линии типа «b», чтобы одновременно добавлять точки и линии.

person koekenbakker    schedule 16.05.2014

Я столкнулся с той же проблемой, когда класс переменной, отображаемой по оси X, представляет собой «упорядоченный фактор». Попробуйте перекодировать «дату» как «числовую» переменную, и вы, вероятно, получите нужный формат графика.

person Larry    schedule 03.12.2014