【问题标题】:format x labels as %d/%m将 x 标签格式化为 %d/%m
【发布时间】:2019-12-18 18:46:46
【问题描述】:

我有一个创建的热图,我试图将 x 轴标签格式化为 %d/%m (dd/mm)。我需要将原始日期转换为离散的因子。尝试了以下代码,但它给了我一个错误:

ggplot(data,aes(x=as.factor(DATE) ,y=as.factor(PRODUCT),fill=escale)) +
     geom_tile(colour="white",size=0.25) + 
     scale_x_discrete(position = "top",label=format(DATE,"%d/%y")) 

如何编写正确的代码来格式化 x 标签,使其类似于“18/12”,例如 (dd/mm)。

【问题讨论】:

  • 当您将x 设置为factor 时,它不再是日期,而format 将不起作用
  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。您可能希望避免在 x 值上使用as.factor,而是使用scale_x_date() 之类的东西,具体取决于您的日期实际存储方式。
  • 嗨 MrFlick,scale_x_date() 会显示周末,我需要过滤一些东西,因此我以离散比例转换以使周末脱离坐标轴。
  • 如果您不需要显示某些日期,您可以这样做,但因素可能是最不方便的方法
  • 谢谢卡米尔,我想是的,但我也想知道是否有办法使用因子并格式化它。

标签: r ggplot2 dplyr


【解决方案1】:

正如 cmets 中所指出的,这在不转换为因子的情况下更容易做到,尽管您需要使用 breaks。在scale_x_date 中使用scales::date_format:

library(ggplot2)
library(scales)

df <- data.frame(
  expand.grid(date = as.Date(c("2019-11-01", "2019-11-20")),
              y = letters[1:2]), 
  value = 1:4)

ggplot(df, aes(date, y, fill = value)) +
  geom_tile() +
  scale_x_date(breaks = df$date, 
               labels = date_format(format = "%d/%m"))

由reprex package (v0.3.0) 于 2019 年 12 月 18 日创建

听起来您还可以从scales::date_breaks 中获得一些关于您的特定用例的信息,但如果没有更多细节就很难说。

【讨论】:

  • 你好,这可能是一个解决方案,但是我有一个问题,因为它是一个连续的比例,所以周数显示为空格。
  • 如上所述,您可以在绘图前过滤掉周末值。参见例如here 获取有关如何确定日期是否为周末日期的一些想法。然后使用例如dplyr::filter 删除。
  • 我确实过滤了周末(原始数据集上没有它的数据)但是 x 轴上一直显示空白,除非我将其转换为离散值。
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2016-07-03
相关资源
最近更新 更多