установить разрывы оси в R с временем POSIX

У меня есть два линейных графика, созданных из этого набора данных https://www.dropbox.com/s/77epslia52odt7m/undervotes_new.csv

Это графики кумулятивных голосов, основанные на том, какой тип бюллетеня был подан. Я хотел использовать фасеты ggplot для создания кумулятивных графиков голосования на основе типа голосования. Но это сильно испортило а-ля эту проблему, которую я не мог понять, как исправить: Почему `cumsum` не работает внутри групп или фасетов в ggplot?

Итак, моя работа заключается в том, чтобы просто нарисовать их отдельно и объединить с gridarrange. Но оси отличаются своими точками останова. Я знаю, что их можно установить вручную, но у меня возникают проблемы с этим, потому что они в формате POSIX?

Как я могу установить перерывы (и в идеале диапазон) на обоих графиках «06 ноября, 07 ноября, 08 ноября» и т. д. и т. д. на обоих графиках?

Спасибо,

library(reshape2)
library(ggplot2)
library(gridExtra)
library(grid)

#transform some variables
Data$Net<-as.numeric(as.character(Data$Net))
Data$CreateDate<-strptime(as.character(Data$CreateDate), "%m/%d/%Y %H:%M")
Data$CreateDate<-as.POSIXlt(Data$CreateDate)

#Get rid of nasty NAs
Data<-Data[complete.cases(Data[,c(15)]),]

##Subset by candidate
Datasubobama<-Data[Data$BallotName=="Barack Obama",]
Datasubromney<-Data[Data$BallotName=="Mitt Romney",]

##Order by date
Datasubobama<-Datasubobama[order(Datasubobama$CreateDate),] #order by date
Datasubromney<-Datasubromney[order(Datasubromney$CreateDate),] #order by date

##Get rid of outliers
Datasubobama<-Datasubobama[1:380,]
Datasubromney<-Datasubromney[1:345,]

##Subset into types of votes
DatasubobamaC<-Datasubobama[Datasubobama$ResultsType=="Certified Votes",]
DatasubobamaP<-Datasubobama[Datasubobama$ResultsType=="Provisional Votes Counted",]
DatasubromneyC<-Datasubromney[Datasubromney$ResultsType=="Certified Votes",]
DatasubromneyP<-Datasubromney[Datasubromney$ResultsType=="Provisional Votes Counted",]

####This is obama/romney certified votes only
cumsumC<-ggplot(DatasubobamaC, aes(x=as.POSIXlt(DatasubobamaC$CreateDate),  y=cumsum(DatasubobamaC$Net)))
cumsumC<-cumsumC+geom_line(color="blue")
cumsumC<-cumsumC+geom_point(color="black")
cumsumC<-cumsumC+geom_line(data=DatasubromneyC, color="red",     aes(x=as.POSIXlt(DatasubromneyC$CreateDate), y=cumsum(DatasubromneyC$Net)))
cumsumC<-cumsumC+geom_point(data=DatasubromneyC,color="black",     aes(x=as.POSIXlt(DatasubromneyC$CreateDate), y=cumsum(DatasubromneyC$Net)))
cumsumC<-cumsumC+ggtitle("Obama (Blue) and Romney (Red) Cumulative Sum [Certified]")
cumsumC<-cumsumC+xlab("Date")
cumsumC<-cumsumC+ylab("Net Votes")
cumsumC<-cumsumC+theme(strip.text.y = element_text(size = 20, color="black"))
cumsumC<-cumsumC+theme(plot.title=element_text(size=20))
cumsumC<-cumsumC+theme(axis.title.x = element_text(size=20))
cumsumC<-cumsumC+theme(axis.title.y = element_text(size=20, vjust=1.5,))
cumsumC<-cumsumC+theme(axis.text.x=element_text(size=15))
cumsumC<-cumsumC+theme(axis.text.y=element_text(size=15))
cumsumC<-cumsumC+theme(axis.ticks.margin=unit(c(.05,.05),'cm'))
cumsumC<-cumsumC+theme(plot.margin=unit(c(.3,1,.3,1),"cm"))
cumsumC

#This is the same for Provisional Only
cumsumP<-ggplot(DatasubobamaP, aes(x=as.POSIXlt(DatasubobamaP$CreateDate),     y=cumsum(DatasubobamaP$Net)))
cumsumP<-cumsumP+geom_line(color="blue")
cumsumP<-cumsumP+geom_point(color="black")
cumsumP<-cumsumP+geom_line(data=DatasubromneyP, color="red",      aes(x=as.POSIXlt(DatasubromneyP$CreateDate), y=cumsum(DatasubromneyP$Net)))
cumsumP<-cumsumP+geom_point(data=DatasubromneyP,color="black",         aes(x=as.POSIXlt(DatasubromneyP$CreateDate), y=cumsum(DatasubromneyP$Net)))
cumsumP<-cumsumP+ggtitle("Obama (Blue) and Romney (Red) Cumulative Sum [Provisional]")
cumsumP<-cumsumP+xlab("Date")
cumsumP<-cumsumP+ylab("Net Votes")
cumsumP<-cumsumP+theme(strip.text.y = element_text(size = 20, color="black"))
cumsumP<-cumsumP+theme(plot.title=element_text(size=20))
cumsumP<-cumsumP+theme(axis.title.x = element_text(size=20))
cumsumP<-cumsumP+theme(axis.title.y = element_text(size=20, vjust=1.5,))
cumsumP<-cumsumP+theme(axis.text.x=element_text(size=15))
cumsumP<-cumsumP+theme(axis.text.y=element_text(size=15))
cumsumP<-cumsumP+theme(axis.ticks.margin=unit(c(.05,.05),'cm'))
cumsumP<-cumsumP+theme(plot.margin=unit(c(.3,1,.3,1),"cm"))
cumsumP

gridcumsum<-grid.arrange(cumsumC,cumsumP)

person PSQ    schedule 18.08.2014    source источник
comment
Нет необходимости в grid.arrange. Просто используйте одну из функций разделения-применения-объединения (проста в использовании ddply из пакета plyr), чтобы вычислить совокупные суммы по группам, а затем разделить график. Это решает проблему с вашей осью и дает более красивый график.   -  person Roland    schedule 18.08.2014
comment
Вам не надоело печатать cumsumP ‹- cumsumP + ... ?   -  person rawr    schedule 18.08.2014
comment
@ Роланд, прости мое невежество, но каждый раз, когда я пытался решить проблему огранки, это не срабатывало. Не могли бы вы дать небольшой пример того, как будут выглядеть ваши предложения?   -  person PSQ    schedule 18.08.2014
comment
Создайте минимально воспроизводимый пример, и я могу побеспокоиться.   -  person Roland    schedule 18.08.2014
comment
@rawr, да. я действительно. просто плохая привычка, я полагаю.   -  person PSQ    schedule 18.08.2014
comment
@Roland, предоставления данных и кода недостаточно?   -  person PSQ    schedule 18.08.2014
comment
Вы похоже не понимаете слова минимальный и я не люблю извлекать данные из какого-то дропбокса.   -  person Roland    schedule 18.08.2014
comment
@Roland Не то чтобы я хотел вступить в спор с незнакомцем в Интернете, но вы мало что делаете, чтобы приветствовать новых людей в R. Может быть, вместо этого вы могли бы просто рассказать мне, как использовать scale_y_continuous(breaks=(c (6 сентября, 7 сентября и т. д.), чтобы выполнить то, что мне нужно, таким образом, который имеет смысл с моим уровнем понимания R. Спасибо.   -  person PSQ    schedule 18.08.2014
comment
@PSQ Я (и другие) бесплатно отвечаю здесь на вопросы в свободное время. Если вам будет сложнее ответить на ваш вопрос, например, включив много кода, который не имеет прямого отношения к проблеме (при чем здесь theme или обработка NA или удаление выбросов), я пойду и отвечу на некоторые другие вместо этого вопрос. Возможность создать минимальный воспроизводимый пример — очень полезный навык. Довольно часто вы сами находите решение в процессе его создания. В любом случае, если вам нужны ответы, вы должны сделать это как можно проще.   -  person Roland    schedule 19.08.2014


Ответы (1)


Угадайте, что я нашел ответ для вас: вы хотите использовать

scale_x_datetime

http://docs.ggplot2.org/0.9.3.1/scale_datetime.html

Это очень аккуратно и делает именно то, что вы хотите. Но я знаю, что вы новичок в R, так что все в порядке. Удачи!

Спасибо и отличная работа найти это.

person PSQ    schedule 18.08.2014