【问题标题】:ggplot date formatting overlaps with small data framesggplot 日期格式与小数据框重叠
【发布时间】:2013-11-14 16:48:41
【问题描述】:

当数据框中只有 2 行时,ggplot2 中的日期格式存在问题:

> dt <- Sys.Date() - 0:1
> dt
[1] "2013-11-14" "2013-11-13"
> vals <- 0:1
> df <- data.frame(dt, vals)
> df
          dt vals
1 2013-11-14    0
2 2013-11-13    1
> class(df[, 1])
[1] "Date"
> class(df[, 2])
[1] "integer"
> g <- ggplot(df, aes(x = dt, y = vals)) + geom_line()
> plot(g)

看看 x 轴日期标签是如何变得奇怪的。

但这工作正常:

> dt <- Sys.Date() - 0:9
> vals <- 0:9
> df <- data.frame(dt, vals)
> df
           dt vals
1  2013-11-14    0
2  2013-11-13    1
3  2013-11-12    2
4  2013-11-11    3
5  2013-11-10    4
6  2013-11-09    5
7  2013-11-08    6
8  2013-11-07    7
9  2013-11-06    8
10 2013-11-05    9
> g <- ggplot(df, aes(x = dt, y = vals)) + geom_line()
> plot(g)

在糟糕的版本中,它看起来像是两次覆盖了时间。我想我可以(以某种方式)抑制时间分量,但有没有办法完全避免修改 x 轴标签,并且仍然让它在小数据帧中正常工作?

【问题讨论】:

  • 这似乎是ggplot2 中的一个问题。你为什么不file an issue
  • github.com/hadley/ggplot2/issues/797 似乎是同一个问题。
  • 这是一个真正有问题的领域,即使这个错误看起来很少见并且孤立,因为 ggplot 通常做得很好。通过 rcharts 的一些新的基于浏览器的包也有类似的问题。轴范围选择和数字格式是图表编程中最困难的方面之一(任何人都使用 Excel - 很糟糕),而且令人钦佩的是,基本图形在大多数情况下都能正确处理。除了速度,这是不将基本图形扔出窗口的一个重要原因,但公平地说,ggplot2 轴训练对我来说是这个包的巨大好处。

标签: r ggplot2


【解决方案1】:

我会说这是一些错误。但解决方案是添加scale_x_date(),然后使用库scales 中的date_format() 根据需要设置标签。

library(scales)
ggplot(df, aes(x = dt, y = vals)) + geom_line()+
  scale_x_date(labels = date_format("%b %d"))

【讨论】:

  • 工作......但我现在必须确保我不需要 x 轴上的年份。猜猜我们在这里使用 if 语句.....
  • 您可以根据需要制作标签,例如,这还将包括年份 scale_x_date(labels = date_format("%Y %b %d"))。
  • 了解,但我希望标签尽可能简洁,如果只有少量点,则不包括年份。 xts 下的基本图形可以做到这一点。我的图表从 1-2 天到 2-3 年不等,它们在运行时会发生变化。没问题,一些 if 语句会按照您上面所说的进行。谢谢。
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多