我想在第一个图中添加第二个图中显示的标签,同时保留已存在的日期标签。
做典型的
P1 + scale_x_continuous(breaks = c(startDate, endDate), labels= c("startDate", "endDate"))
不起作用。我可以转换dat $ x,但后来我丢失了日期标签。
我可以添加P1
来添加标签(理想情况下无需更改创建P1的代码)
奖励积分:是否可以从与其他标签重叠的月份中敲出单一标签?
library(ggplot2)
set.seed(1)
dat <- data.frame(date=1:200 + 15e3, value=rep(1:20, each=10) + (rnorm(200, 0, .5)))
startDate <- dat$date[[30]]
endDate <- dat$date[[42]]
P1 <- ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
geom_vline(xintercept=c(startDate, endDate), color="blue") +
xlab("Date")
P2 <- ggplot(data=dat, aes(x=date, y=value)) + geom_line(alpha=0) +
geom_vline(xintercept=c(startDate, endDate), color="blue") +
scale_x_continuous(breaks = c(startDate, endDate)
, labels= c("startDate", "endDate")) +
theme(axis.text.x =element_text(angle=45) )
答案 0 :(得分:1)
一种方法是手动设置所有中断和标签。为此,您需要知道日期值的范围,然后设置休息的位置(我将它们设置为月的第一天)。对于标签也手动添加名称(包括startDate和endDate)。
ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
geom_vline(xintercept=c(startDate, endDate), color="blue") +
scale_x_date("Date",
breaks = c(seq(from=as.Date("2011-02-01"),to=as.Date("2011-08-01"),by="month"),
as.Date(c(startDate, endDate),origin="1970-01-01")),
labels= c("Feb" ,"Mar" ,"Apr", "May", "Jun" ,"Jul" ,"Aug","startDate", "endDate")) +
theme(axis.text.x =element_text(angle=45))
由于开始日期和结束日期接近Mar
标签,您可以将其设置为空白(""
),但此日期的网格线将保留,因为breaks=
不会更改。< / p>
ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
geom_vline(xintercept=c(startDate, endDate), color="blue") +
scale_x_date("Date",
breaks = c(seq(from=as.Date("2011-02-01"),to=as.Date("2011-08-01"),by="month"),
as.Date(c(startDate, endDate),origin="1970-01-01")),
labels= c("Feb" ,"" ,"Apr", "May", "Jun" ,"Jul" ,"Aug","startDate", "endDate")) +
theme(axis.text.x =element_text(angle=45))