【问题标题】:Formatting x axis with different dates in ggplot2在ggplot2中用不同日期格式化x轴
【发布时间】:2020-05-03 11:58:26
【问题描述】:

我正在努力用 ggplot2 格式化堆积面积图的 x 轴。这是我的数据:

df <- data.frame(
     Taxon = c("Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms", "Others", "Dinos", "Diatoms"),
     Abundance = c(14192, 120, 440, 6000, 80, 360, 25800, 4384, 169428, 879103, 2000, 52360, 213508, 22560, 470900, 472808, 11920, 316312, 81504, 6280, 15096, 50656, 11360, 43448),
     Date = c("05/01/2019", "05/01/2019", "05/01/2019", "09/03/2019", "09/03/2019", "09/03/2019", "11/04/2019", "11/04/2019", "11/04/2019", "01/05/2019", "01/05/2019", "01/05/2019", "01/06/2019", "01/06/2019", "01/06/2019", "01/07/2019", "01/07/2019", "01/07/2019", "01/08/2019", "01/08/2019", "01/08/2019", "01/09/2019","01/09/2019", "01/09/2019")
)

df %>% group_by(Date, Taxon) %>% summarise_all(sum) -> df1

ggplot(df1, aes(x=as.Date(Date, format="%d/%m/%Y"), Abundance, colour=Taxon, fill=Taxon)) + geom_area(stat="identity", position="stack") + labs(x = "", y = "") + scale_x_date(labels = date_format("%d/%m/%Y")) + theme(axis.text.x = element_text(angle = 45, vjust = 0.5))

这给了我以下情节:

我现在的问题是:

  1. 如何让 x 轴标签与 df2$Date 中的日期而不是当月的第一天相对应?
  2. 我希望所有日期都在 x 轴上可见。我尝试使用scale_x_continuous(labels=dates) dates &lt;- unique(df1$Date) 但这给了我一个错误。如何正确处理?

我将非常感谢任何提示!

【问题讨论】:

  • 如果你想调整 date_breaks 参数而不是 date_labels 参数的间隔(即显示标签的值)
  • 这能回答你的问题吗? R: ggplot display all dates on x axis
  • 感谢您的帮助!乔纳森提供了我需要的东西。

标签: r ggplot2


【解决方案1】:

您应该将scale_x_date 中的breaks 参数设置为您分配给labels 的同一对象。

scale_x_date(labels = as.Date(df1$Date, format="%d/%m/%Y"), 
breaks = as.Date(df1$Date, format="%d/%m/%Y"))

【讨论】:

  • 这正是我想要的!非常感谢!
【解决方案2】:

调整scale_x_date中的date_breaks参数,即:

ggplot(df1, aes(x=as.Date(Date, format="%d/%m/%Y"), Abundance, colour=Taxon, fill=Taxon)) + 
  geom_area(stat="identity", position="stack") + labs(x = "", y = "") + 
  scale_x_date(labels = date_format("%d/%m/%Y"),date_breaks = '1 week') + 
  theme(axis.text.x = element_text(angle = 45, vjust = 0.5))

【讨论】:

    【解决方案3】:

    使用中断参数

    要更改日期频率,您必须在 scale_x_date() 函数上使用 break 参数,如下所示:

    + scale_x_date(labels = date_format("%d/%m/%Y"), breaks = date_breaks("2 weeks"))
    

    这是带有2 weeksbreak 的图表的完整代码:

    library(dplyr)
    library(ggplot2)
    library(scales)
    
    df1 %>% ggplot(aes(
      x = as.Date(Date, format = "%d/%m/%Y"),
      Abundance,
      colour = Taxon,
      fill = Taxon
    )) +
      geom_area(stat = "identity", position = "stack") +
      labs(x = "", y = "") +
      scale_x_date(labels = date_format("%d/%m/%Y"), breaks = date_breaks("2 weeks")) +
      theme(axis.text.x = element_text(angle = 45, vjust = 0.5))
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的帮助,但乔纳森的回答正是我所需要的。
    猜你喜欢
    • 2012-07-29
    • 2021-12-09
    • 2014-08-12
    • 2014-10-11
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多