【发布时间】:2014-08-18 15:16:14
【问题描述】:
我从这个数据集https://www.dropbox.com/s/77epslia52odt7m/undervotes_new.csv创建了两个折线图
它们是基于所投选票类型的累积选票图表。我想使用 ggplot facets 根据投票类型创建累积投票图。但这彻底搞砸了这个问题,我不知道如何解决:Why `cumsum` doesn't work within groups or facets in ggplot?
所以,我的工作只是将它们分开绘制并与 gridarrange 结合。但是轴的断点不同。我知道它们可以手动设置,但是因为它们是 POSIX 格式,所以我在这样做时遇到了麻烦?
如何将两个图表上的中断(理想情况下是范围)设置为两个图表上的“11 月 6 日、11 月 7 日、11 月 8 日”等?
谢谢,
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 函数之一(plyr 包中的ddply易于使用)来按组计算 cumsums,然后对绘图进行刻面。这样可以解决您的轴问题并生成更好看的图表。 -
你不厌倦键入 cumsumP
-
@Roland,请原谅我的无知,但每次我尝试解决刻面问题时,它都不起作用。你能稍微了解一下你的建议是什么样的吗?
-
创建一个minimal reproducible example 我可能会打扰。
-
@rawr,我愿意。我真的愿意。我想这只是一个坏习惯。
标签: r ggplot2 axis-labels