我想在我的图表中包含一些小刹车,以便在每个月的月初打印完整日期,并且在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
答案 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")