【问题标题】:Custom dates tick marks on ggplotggplot上的自定义日期刻度线
【发布时间】:2020-03-23 22:18:58
【问题描述】:

我想绘制以下数据:

set.seed(5)
my_df <- data.frame(date = sample(seq(as.Date("2019-07-03"), as.Date("2019-07-30"), by = 1), 10), val_1 = 1:10, val_2 = 11:20) 

my_df<- gather(my_df, "type", "value", -date)
ggplot(data=my_df, aes(x= date, y=value, colour = type)) + geom_line() 

以上仅将部分日期显示为刻度线,而不是全部 10 个。如何将所有日期显示为刻度线。我试过scale_x_discrete(labels = unique(my_df$date)),但没有用。

【问题讨论】:

  • 你试过scale_x_date吗?
  • 您的日期不是均匀间隔的,所以当我添加scale_x_date(breaks = unique(my_df$date)) 时,它们中的许多是重叠的。您是否打算只增加刻度/标签的频率?
  • @r2evans,谢谢!我需要均匀分布的日期。我应该绘制简单的序列(在 x 轴上)并将日期标签放在它上面。

标签: r date ggplot2


【解决方案1】:

将日期视为因素

ggplot(data = my_df,
  aes(x = as.factor(date), y = value, colour = type, group = type)) +
  geom_line()

您还可以使用@r2evans 提到的 scale_x_date:

ggplot(data=my_df, aes(x= date, y=value, colour = type)) + 
  geom_line() +
  scale_x_date(breaks = unique(my_df$date), minor_breaks = NULL) +
#Added for readability
  theme(axis.text.x = element_text(angle = 30, hjust = 1))

【讨论】:

  • 像这样丢弃信息(事实上它们是离散的日期)并不是一个好主意。此外,数据的间距不均匀,因此这样做会扭曲/拉伸数据。
  • 如何在日期“2019-07-19”处添加垂直线。我试过geom_vline(xintercept=as.Date("2019-07-19") , linetype="dashed", color = "blue"),但没用。
  • @r2evans 好点。我做了更多的研究,发现你在上面的评论中指出的 scale_x_date。
  • 谢谢!我尝试将日期作为因素,但没有奏效。添加group = type 解决了这个问题。为什么我们已经有了colour = type,还需要group = type。已经有基于颜色的分组。
猜你喜欢
  • 2023-04-07
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多