Построение POSIXct в ggplot, масштабирование по оси X вручную - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь построить эти данные о скорости ветра, когда на оси абсцисс отображаются годы. Фрейм данных был настроен как

wsAvg<-data.frame(date=as.POSIXct(ws07$date[1224:1559]),u.1=(ws07$u[1224:1559]),stringsAsFactors = FALSE)
wsAvg<-rbind(wsAvg,c(date=as.POSIXct(ws08$date[1032:1367]),(ws08$u[1032:1367])))

и ниже с использованием ggplot для построения моего фрейма данных о скорости ветра.

ggplot(wsAvg,aes(x=date,y=as.numeric(u.1)))+geom_point(size=3,pch=2)+
  geom_smooth(method="lm",colour="black",se=FALSE)+
  #scale_x_datetime(limits=as.POSIXct(c('2006-09-01','2016-10-01')),breaks=date_breaks("1 year"),labels=date_format("%Y"))+ 

enter image description here

Без scale_x_datetime() в моей команде я получаю эти даты. Когда я добавляю в scale_x_datetime() функцию, чтобы вручную масштабировать мою ось X, чтобы отображались только годы. Все мои данные перенесены на 2007 год. Кто-нибудь знает, почему это так? enter image description here

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Код, который работал для меня. Вместо использования функции c (), когда я связывал данные из других наборов данных, мне пришлось использовать data.frame (), чтобы добавить другие годы в фрейм данных wsAvg.

wsAvg<-data.frame(date=as.POSIXct(ws07$date[1224:1559]),u.1=(ws07$u[1224:1559]),stringsAsFactors = FALSE)
wsAvg<-rbind(wsAvg,data.frame(date=as.POSIXct(ws08$date[1032:1367]),u.1=(ws08$u[1032:1367])))          
0 голосов
/ 22 апреля 2020

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

Эта проблема явно связана с форматированием / данными, расположенными в столбце «дата». , Лучше всего взглянуть на этот шаг и протестировать каждый шаг, чтобы увидеть, что может go не так здесь:

  • Ваши необработанные данные: Вероятно, ничего нет неверно с вашими базовыми данными, но мы не знаем формат вектора "даты" из ws07$date[1224:1559] и ws08$date[1032:1367]. Ваши необработанные данные происходят из двух фреймов данных, поэтому просто подтвердите, что необработанные данные из этих двух векторов отформатированы одинаково, но, что более важно, это уже отформатировано как дата? Что такое class(ws08$date)? Кроме того, как будут выглядеть данные, если вы взяли образец этого набора данных? (например, ws07$date[sample(1224:1559, 20)]).

  • Преобразование в POSIXct: Первый отображаемый код включает as.POSIXct(), но не включает аргумент для format=. Вы можете или не должны указывать это, но я бы порекомендовал обратиться к документации , чтобы убедиться, что вы используете функцию правильно. Вы можете попробовать преобразовать небольшое подмножество данных, просто используя as.POSIXct(ws07$date[1224:1250]) или что-то в этом роде. Правильно ли отформатированы даты? Если нет, попробуйте указать format= arg до тех пор, пока он «не будет работать», как вы предполагали.

  • Начальный график и Второй график Данные распределены в первом сюжет, скорее всего, как вы ожидали. Как насчет комбинаций месяц / день на первом графике - они правильные? Если они верны, это может указывать на то, что год читается неправильно, поскольку, очевидно, все даты сгруппированы примерно в мае и июне 2007 года. При сравнении первого и второго графиков очевидной проблемы с scale_x_datetime() здесь нет. Эти два графика соответствуют данным, которые имеют значения x = даты в период с мая по июнь 2007 года.

Итог: трудно точно определить, где это происходит для вас, но, вероятно, это (1) при преобразовании в дату, используя as.POSIXct из ваших наборов данных ws07 и ws08, или (2) формат ws07$date или ws08$date, который был импортирован / преобразован неправильно. Решение состоит в том, чтобы использовать аргумент format= в используемой вами функции преобразования / импорта дат, чтобы обеспечить правильный формат и соответственно импортировать годы / месяцы / даты.

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