绘制时间序列多行x轴作为日期

时间:2018-11-20 05:21:03

标签: r date plot time-series

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

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,我建议将您的数据从宽格式转换为长格式,以便在一个图中绘制多个变量。这是一个很好的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

在这里,我以线图为例,但实际上,一旦将数据成形为长格式,就可以使用所需的任何geom函数。然后根据需要进行装扮。

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

enter image description here

答案 1 :(得分:0)

尝试一下。

您需要创建一个日期字段。请参阅下面的示例,它具有一些您可以忽略的伪值代码。您可以使用日期部分(我使用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'))