R и ggplot - изменение оси x на дату удаляет уклонение позиции - PullRequest
7 голосов
/ 02 декабря 2011

Я использую ggplot для создания графиков, и мне всегда нравится смещать точки данных по горизонтали, чтобы полосы ошибок не перекрывались.Я обнаружил, что когда я использую данные Date для своей оси x, я теряю возможность смещать свои точки данных.

DF=data.frame(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01", "2010-01-01" ,"2011-01-01"),Count=c(1,2,3,4,5,6,2,4,6,8,10,12),Type=c('A','A','A','A','A','A','B','B','B','B','B','B'))

Если я строю вышеупомянутый фрейм данных, используя ggplot, как это, точки смещаются

dodge=position_dodge(.5)
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge)

Но если я назначу данные Date как фактические даты

DF$Date=as.Date(DF$Date)
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge)

Точки больше не будут смещены, даже если я укажу их как

I 'Мы избежали этой проблемы в прошлом, ограничив мои данные датой только «годом» и рассматривая их как числовые.Но теперь мне нужно включить информацию о месяце (я включаю день в дату с тех пор, как «as.Date становится немного прикольным, если я его не включаю).

Так что кто-нибудь может сказать мне, если есть способЯ могу построить временной ряд, используя ggplot, который позволит мне сместить мои точки данных и полосы ошибок.

1 Ответ

9 голосов
/ 02 декабря 2011

На самом деле точки слегка уклонены.

Вам необходимо помнить, что интервал между годами составляет 365 дней. position_dodge(0.5) перемещает точку на (полдня) / 2. Таким образом, позиция перемещается на 0,5 / 2/365 годового интервала.

Если вы выберете `position_dodge (0.5 * 365), вы получите график, как и ожидалось:

DF <- data.frame(
  expand.grid(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01"),
     Type = c("A", "B")),
  Count = 1:4)
DF$Date2 <- as.Date(DF$Date)

ggplot(data=DF,aes(x=Date2,y=Count,group=Type))+ geom_point(position = position_dodge(365*0.5))

enter image description here

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