使用GGPLOT2在1个图表中绘制多个时间序列,并按周或月分组日期

use*_*875 2 r

我喜欢R,但简单的策划让我很生气.我有5列数据.第一列数据的日期为"数字",格式为20101101,20101102等...我尝试从数字转换为日期,但它不起作用.

我想用col1,col2,col3和col4制作一个折线图,用x轴表示每周或每月的日期.我不希望每周或每个月都看到所有日期.你能帮我吗?

这是我的R代码:

dates<-c(20101101,20101102,20101103,20101104,20101105,20101106,20101107,20101108,20101109,20101110,20101111,20101112,20101113,20101114,20101115,20101116,20101117,20101118,20101119,20101120)  <br/>
col1<-c(seq(from=1,to=20, by=1))<br/>
col2<-c(seq(from=11,to=30, by=1))<br/>
col3<-c(seq(from=21,to=40, by=1))<br/>
col4<-c(seq(from=31,to=50, by=1))<br/>
data<-cbind(dates, col1, col2, col3, col4)<br/>
class(dates)<br/>
data  #This is what my data looks like. NOTE: the "dates" field is type numeric so I TRY convert it below<br/><br/>

data[,1]<-as.Date(as.character(data[,1]), format("%Y%m%d"))#convert to date class<br/>
class(data[,1])  ### the conversion did not work. Help? The date column is still is numeric<br/>
Run Code Online (Sandbox Code Playgroud) 现在我想用ggplot显示一条4行的折线图,并在x轴上按周或月显示日期


任何帮助?

#####


谢谢.

use*_*1_G 5

正如@Dwin指出的那样使用data.frame非矩阵,因为你的转换工作正常.

e.g. class(as.Date(as.character(data[,1]), format("%Y%m%d")) )
 #[1] "Date"
Run Code Online (Sandbox Code Playgroud)

绘制你想要的东西,ggplot2你需要你的数据很长,在这里完成,melt()然后scale_x_date()逐周格式化.

data<-data.frame(dates=dates, col1=col1, col2=col2, col3=col3, col4=col4)
library(plyr)
data <- melt(data, id.vars="dates")
data[,1]<-as.Date(as.character(data[,1]), format("%Y%m%d"))
ggplot(data, aes(x=dates,y=value)) + geom_point(aes(colour=variable))  + 
      scale_x_date(breaks = date_breaks("weeks"), labels = date_format("%d-%b"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述