【问题标题】:Issue with ggplot with discrete x-axis in date format (yyyy-mm-dd)带有日期格式离散 x 轴的 ggplot 问题 (yyyy-mm-dd)
【发布时间】:2018-08-29 15:50:41
【问题描述】:

我有一个如下所示的数据框。我需要使用 ggplot 绘制线图,每条线显示每年(即 2014 年、2015 年等),每年都有不同的颜色。

我无法用下面显示的代码将这些点连接起来。但是,它确实只为每年绘制不同颜色的点。这可能是一件简单的事情,但我就是想不通。

library(reshape2)
library(ggplot2)

plot.data <- melt(Table_1, id.vars = 'Day Obs')
ggplot(plot.data, aes(x = `Day Obs`, y = value)) +
  geom_line(mapping = aes(x = `Day Obs`, y = value, colour = variable),size=1.0) +
  geom_point(mapping = aes(x = `Day Obs`, y = value, colour = variable),size=2.3)

表_1:

Day Obs     2014    2015   2016   2017    2018
2018-08-01    NA     NA     NA     NA    1.002    
2018-08-03    NA     0.85   NA     NA       NA
2018-08-06    NA     NA     NA     NA      0.9
2018-08-07    NA     NA    0.78   0.88      NA
.
.

【问题讨论】:

  • 请让您的数据集可重现
  • @kath,我尝试了你的建议,但没有成功。不过还是谢谢。
  • 我不明白value是什么?
  • @Salman。当你融化 Table-1 时,你会得到“plot.data”。在那个“plot.data”中,三个列的名称是 Day Obs、variable 和 value。只需尝试使用示例数据集。希望我说清楚了。

标签: r ggplot2 line


【解决方案1】:

问题是您在观察和geom_line 之间缺少值 i 然后不连接点(因为缺少信息)。这可以在 2018 年看到:

library(reshape2)
library(ggplot2)

plot.data <- melt(Table_1, id.vars = 'Day Obs')
plot.data[plot.data$variable == 2018, ]
#       Day Obs variable value
# 17 2018-08-01     2018 1.002
# 18 2018-08-03     2018    NA
# 19 2018-08-06     2018 0.900
# 20 2018-08-07     2018    NA

这里明确缺少 2018-08-03 的信息。因此,如果我们绘制它们,这些点之间就没有联系。

ggplot(plot.data, aes(x = `Day Obs`, y = value, colour = variable)) +
  geom_line(size = 1.0) +
  geom_point(size = 2.3)

您可以删除显式缺失值并且它可以工作:

ggplot(plot.data[!is.na(plot.data$value), ], 
       aes(x = `Day Obs`, y = value, colour = variable)) +
  geom_line(size = 1.0) +
  geom_point(size = 2.3)

数据

Table_1 <- structure(list(`Day Obs` = structure(c(17744, 17746, 17749, 17750), class = "Date"), 
                          `2014` = c(NA, NA, NA, NA), 
                          `2015` = c(NA, 0.85, NA, NA), 
                          `2016` = c(NA, NA, NA, 0.78), 
                          `2017` = c(NA, NA, NA, 0.88), 
                          `2018` = c(1.002, NA, 0.9, NA)), 
                     row.names = c(NA, -4L), class = "data.frame")

【讨论】:

  • 你成功了。有效。谢谢一堆。我在 ggplotting 方面还有很长的路要走。 :)。
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多