Имам две линейни графики, създадени от този набор от данни https://www.dropbox.com/s/77epslia52odt7m/undervotes_new.csv
Те са графики на кумулативните гласове въз основа на вида на гласуването. Исках да използвам фасети на ggplot, за да създам кумулативни графики на гласуване въз основа на вида на подадената бюлетина. Но това наистина прецака този проблем, който не можах да разбера как да поправя: Защо `cumsum` не работи в рамките на групи или аспекти в ggplot?
И така, работата ми е просто да ги начертая отделно и да ги комбинирам с gridarrange. Но осите се различават по своите точки на прекъсване. Знам, че могат да бъдат зададени ръчно, но имам проблеми с това, защото са във формат POSIX?
Как мога да настроя прекъсванията (и в идеалния случай обхвата) на двете графики да бъдат "Nov 06, Nov 07, Nov 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)
grid.arrange
. Просто използвайте една от функциите split-apply-combine (ddply
от пакета plyr е лесна за използване), за да изчислите кумулативните суми по групи и след това да фасетирате графиката. Това решава проблема ви с оста и създава по-добре изглеждаща графика. - person Roland   schedule 18.08.2014theme
или NA или премахването на извънредни стойности тук), ще отида и ще отговоря на някои други въпрос вместо това. Да можеш да създадеш минимален възпроизводим пример е много полезно умение. Доста често сами ще намерите решението в процеса на създаване. Както и да е, ако искате отговори, трябва да ги направите възможно най-лесни за отговор. - person Roland   schedule 19.08.2014