【问题标题】:Order of dates is not chronological in ggplot2ggplot2中的日期顺序不是按时间顺序排列的
【发布时间】:2016-07-21 20:42:39
【问题描述】:

我正在尝试制作一个图表来描述一段时间内的人口。但是,日期不是按时间顺序排列的。在导入的 CSV 中,日期都是正确且有序的。但是,一旦运行下面的代码,显示的图表中的日期就不会按正确的顺序排列。开始日期在中间,结束日期在开始日期的左边。有什么办法可以解决吗?

sumc <- aggregate(ex2$C, bu=list(ex2$Date, ex2$Temp), FUN=sum)
colnames(sumc) <- c("Date", "Temperature", "Individuals")
ggplot(data= sumc, aes(x=Date, y=Individuals, group=Temperature, colour=Temperature )) + geom_line() + theme(plot.title = element_text(face="bold") 
    ,plot.background = element_blank()
    ,panel.background = element_blank()
    ,panel.grid.major = element_blank()
    ,panel.grid.minor = element_blank()
    ,panel.border = element_blank()
    ,axis.line = element_line(colour="black", size=1)
    ,axis.text.x = element_text(colour="black", size=10)
    ,axis.text.y = element_text(color="black", size=8)
    ,axis.title.x = element_text(colour="black", size=10, face="bold", vjust=-.2)
    ,axis.title.y = element_text(color="black", size=10, face="bold", vjust=1.2)
    ,legend.text=element_text(size=8))

这张图片是一段时间内的人口。但正如您所见,x 轴上的日期不正确且关闭:

【问题讨论】:

  • Details 会有所帮助...的顺序是什么?我立即想到的一件事是,系统可能将轴的数据类型感知为“字符串”,而不是“日期”。您看到的排序是否与这种(错误)解释一致?
  • 订单从 2016 年 7 月 5 日开始,以此类推,直到 2016 年 7 月 20 日结束。我已经在另一个图表上成功地使用了这个代码并且它已经出现了正确的。我不确定这是否可能是由于该错误导致的误解,因为它在另一个图表上是成功的。
  • 但我观察到排序 与我的假设一致(!) 日期字符串被解释为 字符串, 而不是 dates. 因此,我们不能排除您的“其他图表”的成功仅仅是偶然的可能性。 . .你在那个特定的输出中没有看到任何向你揭示 bug(!) 的东西。
  • 问题是您的数据不属于Date 类,正如迈克所说,它只是用作字符串。如果您转换为Date 类,一切都会好起来的。

标签: r date ggplot2


【解决方案1】:

转换为Date 类:

sumc$Date = as.Date(sumc$Date, format = "%m/%d%/Y")

那么你同样的绘图代码就可以正常工作了。

有关转换或format 参数的详细信息,请参阅?as.Datestrptime

【讨论】:

    【解决方案2】:

    如果您的日期在数据框中以正确的顺序导入,请使用

    sumc$Date &lt;- factor(sumc$Date, ordered = T)

    在绘图之前。这将使它们成为基于它们出现的顺序的有序因子,并且 ggplot 将理解它必须保持这种方式。

    编辑:如果日期没有排序,您可以将它们排序并保存到向量中:

    dates <- unique(sort(sumc$Date))
    sumc$Date <- factor(sumc$Date, labels = dates,  ordered = T)
    

    【讨论】:

    • 所有因素都有一个顺序,指定ordered factor 类的唯一原因是在将其放入模型时使用的对比。对于日期,无论如何,Date 类比 factor 类更合适。
    • 很公平。我有时有点不愿意使用 Date 类,因为如果输入使用一些非标准的日期格式,它会变得混乱,但你是对的。
    • 好吧,您的排序将按字母顺序进行(除非它是 Date 类),这正是 OP 已经存在的问题。
    • 非常感谢您的帮助!对此我非常感激!
    【解决方案3】:

    如果您的日期以正确的顺序导入,另一种方法是使用

    sumc$Date <- factor(sumc$Date, levels = unique(sumc$Date))
    

    在绘图之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2021-03-27
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多