【问题标题】:Plot times series multiple line x axis as date将时间序列多行 x 轴绘制为日期
【发布时间】:2019-04-22 12:34:10
【问题描述】:

我知道这可能是一个老问题,但我搜索了所有可能的页面,但找不到合适的答案。我有一个时间序列数据,如下所示。我想将它绘制为 x 轴作为时间(只是年或月和年),其余列作为 y(全部在一个图中)。我尝试了不同的函数,例如 plot、ggplot(2)、ts.plot、plot.ts,但它们都没有给我我需要的东西。有什么建议吗?

【问题讨论】:

标签: r date plot time-series


【解决方案1】:

试试这个。

您需要创建一个日期字段。请参阅下面的示例,它有一些您可以忽略的虚拟值代码。您可以使用日期部分(我使用 lubridate)和 ggplot

library(tidyverse)
library(lubridate)

mp$date <- ymd(paste(mp$year,'-',mp$month,'-','01',sep = ""))
mp$Uymax <- rnorm(48,4555,54)
mp$Uymin<- rnorm(48,5656,34)
mp$uymedian<- rnorm(48,6767,43)
mp$uy90<- rnorm(48,7676,56)
mp$uy10<- rnorm(48,7676,66)

library(tidyverse)
mp$date <- ymd(paste(mp$year,'-',mp$month,'-','01',sep = ""))

mp %>% ggplot() +
  geom_line(aes(date,Uymax,color='Uymax')) +
  geom_line(aes(date,Uymin,color='Uymin')) +
  geom_line(aes(date,uymedian,color='uymedian')) +
  geom_line(aes(date,uy90,color='uy90')) +
  geom_line(aes(date,uy10,color='uy10'))  

【讨论】:

  • 谢谢@Aji。有效。我也对它做了一个小改动。由于在您的代码中,y 标签是根据第一行 Uymax 自动设置的(这可能不是所需的),因此我将第一行更改为 ggplot(mp, aes(Date,mp))。因此,y lab 现在是 mp 或可以更改为任何其他所需的名称。
【解决方案2】:

首先,我建议将您的数据从宽格式转换为长格式,以便在一个图中绘制多个变量。这是一个很好的tutorial,可以帮助你。

这是一个模仿您的代码的示例

library(reshape2); library(ggplot2)


df <- data.frame(Month = 1:11, Year = 2000: 2010, UY_Min = 1:11, UY_Media = 20:30, UY_90Per = 30:40)

df_long <- melt(df, id.vars = c("Month", "Year"), variable.name = "UY", value.name = 
   "Values") #convert the table from wide to long format. you can name variable.name and value.name appropriately

在这里,我以线图为例,但实际上,一旦您将数据整形为长格式,您就可以使用任何您想要的几何函数。然后根据需要打扮它。

ggplot(df_long, aes(Year, The_Values, col = UY)) +
  geom_line() + 
  scale_x_continuous(breaks = seq(2000, 2010, by = 1))

【讨论】:

  • @感谢 Wally Ali。我以前试过这个。该图不像我需要的那样合适。
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 2021-05-18
  • 2015-01-19
  • 2014-06-02
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多