【问题标题】:set axis breaks in R with POSIX time使用 POSIX 时间在 R 中设置轴中断
【发布时间】: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


【解决方案1】:

猜猜看,我为你找到了答案: 你想使用

scale_x_datetime

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

它非常简洁,完全符合您的要求。但我知道你是 R 新手,所以没关系。祝你好运!

谢谢,找到这个了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多