【问题标题】:Manually adding labels to axis on a Date-sclaed variable手动将标签添加到日期缩放变量的轴上
【发布时间】:2013-10-10 04:32:00
【问题描述】:

我想将第二个图中显示的标签添加到第一个图中,同时保留已经存在的日期标签。

做典型的

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) )

【问题讨论】:

  • 第二个图中没有刻度(只有标签),至少假设您的意思是 x 轴刻度。
  • 感谢@Dwin 纠正我的术语。我已经编辑了问题的标题和内容

标签: r ggplot2 axis-labels


【解决方案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= 不会更改。

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))

【讨论】:

  • 如果您将第二个labels 字符参数设置为“”,您可以获得奖励积分。
  • +1 提供有用的答案,谢谢。我仍然很好奇是否有一种方法可以添加第二个标签而无需返回并从第一个图中获取数据
猜你喜欢
  • 1970-01-01
  • 2019-11-17
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多