【问题标题】:Timestamp is ruining my graph in ggplot2, How can I fix this?时间戳正在破坏我在 ggplot2 中的图表,我该如何解决这个问题?
【发布时间】:2020-03-08 16:22:41
【问题描述】:

我有一个名为 X1234 的数据集,我有三列(数量、时间戳、浓度级别),这是我的数据的示例:

num | timestamp      | Levels of Concentration
1   | 4/2/2019 10:45 | 60.80
2   | 4/2/2019 11:00 | 60.08
3   | 4/2/2019 11:15 | 60.08
4   | 4/2/2019 11:30 | 60.26
5   | 4/2/2019 11:45 | 60.26
6   | 4/2/2019 12:00 | 60.44
7   | 4/2/2019 12:15 | 60.44
8   | 4/2/2019 12:30 | 60.44
9   | 4/2/2019 12:45 | 60:62
10  | 4/2/2019 13:00 | 60.62

当我使用 绘制区域图时(x 轴 = num,y 轴 = Levels of Concentration)我得到了一个很好的图,但是,我想用 @ 987654329@。这是我希望我的图表看起来像的图片,我使用的代码是:

ggplot(X1234, aes(x = X1234$num, y=X1234$`Levels of Concentration`)) + geom_area()

理想图

但是我需要使用 timestamp 作为 x 轴,但是当我这样做时,我的图表完全改变了,我不明白为什么。这是我用于第二张图的代码(x = timestamp, y = Levels of Concentration

X1234$timestamp_local <- as.Date (X1234$timestamp_local, '%m/%d ')
ggplot(data = X1234, aes (x= X1234$timestamp_local, y = X1234$`Levels of Concentration`)) +  geom_area()

我使用时间戳的实际图表

【问题讨论】:

  • 欢迎来到 Stack Overflow!如果您能提供一个代表,那将非常有帮助:reprex.tidyverse.org
  • 请使用dput(X1234) 以文本形式包含数据,而不是图像。这将帮助其他人帮助你。而且你不应该在aes 中使用 $

标签: ggplot r ggplot2 graph timestamp


【解决方案1】:

问题在于num 是一个以连续比例绘制的数字,而timestamp 是导致离散比例的字符类型。

为了以连续比例绘制timestamp,需要正确地将其强制转换为日期时间类POSIXct,例如,通过使用lubridate::mdy_hm()

library(ggplot2)
library(lubridate)
ggplot(X1234) +
  aes(x = mdy_hm(timestamp), y = `Levels of Concentration`) +
  geom_area()

数据

X1234 <- readr::read_delim("
num | timestamp      | Levels of Concentration
1   | 4/2/2019 10:45 | 60.80
2   | 4/2/2019 11:00 | 60.08
3   | 4/2/2019 11:15 | 60.08
4   | 4/2/2019 11:30 | 60.26
5   | 4/2/2019 11:45 | 60.26
6   | 4/2/2019 12:00 | 60.44
7   | 4/2/2019 12:15 | 60.44
8   | 4/2/2019 12:30 | 60.44
9   | 4/2/2019 12:45 | 60.62
10  | 4/2/2019 13:00 | 60.62", delim = "|", trim_ws = TRUE)

【讨论】:

  • 谢谢@Uwe,我能够在我的完整数据集上使用 lubridate。这让我的时间戳可以连续变化。
猜你喜欢
  • 2019-11-02
  • 2016-03-18
  • 2020-03-25
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多