如何在ggplot2中包含小的中断

时间:2016-07-24 00:30:44

标签: r ggplot2

我想在我的图表中包含一些小刹车,以便在每个月的月初打印完整日期,并且在x轴上标记日期。 我现在所拥有的并不是检索错误,但输出并不是我想要的,因为这些日子里没有嘀嗒声。

library(ggplot2)

df <- data.frame(date=as.Date(1:60,origin = "1970-01-01"),value=rnorm(60,4,3))
str(df)
ggplot()+
  geom_line(data=df, aes(x=date, y=value))+
  scale_x_date(date_breaks = 'month', date_minor_breaks = 'day')

会话:

other attached packages:
[1] scales_0.4.0  cowplot_0.6.2 ggplot2_2.1.0 dplyr_0.5.0   zoo_1.7-13  

这个问题已在Formatting dates with scale_x_date in ggplot2中讨论过了,但我想知道是否有变化,因为如果我遵循建议的代码

scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=date_format("%B")) 

我实际上收到错误

> ggplot()+
+   geom_line(data=df, aes(x=date, y=value))+
+   scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=date_format("%B"))
Error in strsplit(unitspec, " ") : non-character argument

1 个答案:

答案 0 :(得分:1)

我不确定您的错误是什么,因为这不是一个可重复的样本。

以下代码适用于我的计算机,并为您提供每周刻度。

ggplot() +
     geom_line(data=df, aes(x=date, y=value)) +
     scale_x_date(date_breaks = "1 week", 
                   date_minor_breaks = "1 day",)

您可以使用date_labels参数更改每周标签的格式,例如,使用%D为您提供m/d/y,如下所示。

ggplot() +
     geom_line(data=df, aes(x=date, y=value)) +
     scale_x_date(date_breaks = "1 week", 
                    date_minor_breaks = "1 day",
                    date_labels = "%D")

您可以使用theme图层更改刻度的美学效果。例如,更改为以下内容将为您提供更长或更大的刻度。

   ggplot() +
     geom_line(data=df, aes(x=date, y=value)) +
     scale_x_date(date_breaks = "1 week", 
                   date_minor_breaks = "1 day",) +
    theme(axis.text.x=element_text(size=10),
          axis.ticks = element_line(size = .5),
          axis.ticks.length = unit(.2, "cm"))

编辑:发表评论后,我认为这就是你想要的。不知道为什么,但它看起来有点&#34;丑陋&#34;对我来说。希望这可以帮助。

library(lubridate) 
not_first_of_the_month<- which(duplicated(floor_date(df$date, "month")))
xlabels <- as.character(df$date)
xlabels[not_first_of_the_month] <-rep("", length(not_first_of_the_month))

ggplot() +
     geom_line(data=df, aes(x=date, y=value)) +
               scale_x_date(breaks = df$date,
                            labels = xlabels,
               date_minor_breaks = "1 day")