【问题标题】:Error in as.Date.numeric(data$Oxygen) for ggplotggplot 的 as.Date.numeric(data$Oxygen) 错误
【发布时间】:2018-06-21 21:13:46
【问题描述】:

我对堆栈溢出有点陌生。我有这个非常大的数据集,在 ggplot 中存在问题,但我已经能够将其提炼成这样:

data <- data.frame(
+     Date <- sample(c("1993-07-09", "1993-08-16", "1993-09-13", "1993-10-11", "1993-11-08")),
+     Oxygen <- sample(c("15", "15.8", "15.3", "16", "16"))
+ )
data$Oxygen <- as.numeric(as.character(data$Oxygen))
data$Date <- as.Date(data$Date)

ggplot(data = data, aes(x=Date, y=Oxygen)) + 
    geom_point() +
    geom_smooth(method = "loess", se=FALSE) +
    scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), label = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")) +
    theme(axis.text.x=element_text(angle = -360, hjust = 0)) +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))

在此之后,我收到此错误:

as.Date.numeric(value) 中的错误:必须提供“原点”

由于各种原因,我不得不手动标记 x 轴。我的数据集具有多年和所有月份的值。我不知道如何解决这个错误,因为我需要 R 来识别该列是日期。

任何帮助将不胜感激!

【问题讨论】:

  • 尝试scale_x_date 而不是data_x_continuous 喜欢:scale_x_date(date_breaks = "1 month", date_minor_breaks = "1 week", date_labels = "%B")
  • @mischva11 所说的有效。由于您有“一个非常大的数据集”,您可能需要更改 date_labels 参数。 This site 给出了 R(和其他语言)中日期的符号列表。因此,如果您希望 x 轴标签具有缩写月份和 2 位数年份,您可以使用 date_labels = '%b %y'
  • 谢谢@mischva11 和@Sam!成功了!

标签: r ggplot2


【解决方案1】:

除了使用scale_x_continuous,您还可以使用 ggplot 的内置函数来获取日期:scale_x_date()。它可以像下面的例子一样使用:

scale_x_date(date_breaks = "1 month", date_minor_breaks = "1 week", date_labels = "%B")

这是一种更适合您预期用途的方法。

Credits and further explanation for scale_x_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多