使用R更改时间序列图表中的X轴值

3

我是一名新手R用户,需要在时间序列图中寻求帮助。我创建了一个时间序列图,但无法弄清如何将X轴值更改为与样本日期相对应。我的数据如下:

 Year  Month  Level
 2009   8     350
 2009   9     210
 2009   10    173
 2009   11    166
 2009   12    153
 2010   1     141
 2010   2     129
 2010   3     124
 2010   4     103
 2010   5     69
 2010   6     51
 2010   7     49
 2010   8     51
 2010   9     51

假设这些数据被保存为名称为"data.csv"的文件。
data = read.table("data.csv", sep = ",", header = T)
data.ts = ts(data, frequency = 1)
plot(dat.mission.ts[, 3], ylab = "level", main = "main", axes = T)

我已经尝试将 start = c(2009, 8) 输入到 ts 函数中,但是仍然得到错误的值。

当我绘制图表时,我的 x 轴与 2009 年 8 月至 2010 年 9 月不相关。它要么按年增长,要么仅按十进制增长。我在网上查找了许多示例,还通过 R 的 ? 帮助查找了很长时间,但无法找到重新标记轴值的方法。任何帮助都将不胜感激。

3个回答

3

使用base编码,您可以通过几个步骤实现此目的。如SO答案所述,如果您同时使用as.Datepaste函数并加入一个日期(即月份的第一天;“1”),则可以将“Month”和“Year”数据标识为日期。对于本答案,我将简单地将您提供的数据称为df

df$date<-with(df,as.Date(paste(Year,Month,'1',sep='-'),format='%Y-%m-%d'))
df
   Year Month Level       date
1  2009     8   350 2009-08-01
2  2009     9   210 2009-09-01
3  2009    10   173 2009-10-01
4  2009    11   166 2009-11-01
5  2009    12   153 2009-12-01
6  2010     1   141 2010-01-01
7  2010     2   129 2010-02-01
8  2010     3   124 2010-03-01
9  2010     4   103 2010-04-01
10 2010     5    69 2010-05-01
11 2010     6    51 2010-06-01
12 2010     7    49 2010-07-01
13 2010     8    51 2010-08-01
14 2010     9    51 2010-09-01

然后,您可以使用基本的plotaxismtext函数来控制您想要如何可视化数据和轴。例如:

xmin<-min(df$date,na.rm=T);xmax<-max(df$date,na.rm=T) #ESTABLISH X-VALUES (MIN & MAX)
ymin<-min(df$Level,na.rm=T);ymax<-max(df$Level,na.rm=T) #ESTABLISH Y-VALUES (MIN & MAX)

xseq<-seq.Date(xmin,xmax,by='1 month') #CREATE DATE SEQUENCE THAT INCREASES BY MONTH FROM DATE MINIMUM TO MAXIMUM
yseq<-round(seq(0,ymax,by=50),0) # CREATE SEQUENCE FROM 0-350 BY 50

par(mar=c(1,1,0,0),oma=c(6,5,3,2)) #CONTROLS YOUR IMAGE MARGINS
plot(Level~date,data=df,type='b',ylim=c(0,ymax),axes=F,xlab='',ylab='');box() #PLOT LEVEL AS A FUNCTION OF DATE, REMOVE AXES FOR FUTURE CUSTOMIZATION 
axis.Date(side=1,at=xseq,format='%Y-%m',labels=T,las=3) #ADD X-AXIS LABELS WITH "YEAR-MONTH" FORMAT
axis(side=2,at=yseq,las=2) #ADD Y-AXIS LABELS
mtext('Date (Year-Month)',side=1,line=5) #X-AXIS LABEL
mtext('Level',side=2,line=4) #Y-AXIS LABEL

enter image description here


1
library(data.table)
library(ggplot2)
library(scales)

data<-data.table(datetime=seq(as.POSIXct("2009/08/01",format="%Y/%m/%d"),
                              as.POSIXct("2010/09/01",format="%Y/%m/%d"),by="1 month"),
                 Level=c(350,210,173,166,153,141,129,124,103,69,51,49,51,51))


ggplot(data)+
 geom_point(aes(x=datetime,y=Level),col="brown1",size=1)+
 scale_x_datetime(labels = date_format("%Y/%m"),breaks = "1 month")+
 theme(axis.text.x = element_text(angle = 90, hjust = 1,vjust=0.3))

0

使用xts包的示例:

library(xts)
ts1 <- xts(data$Level, as.POSIXct(sprintf("%d-%d-01", data$Year, data$Month)))

# or ts1 <- xts(data$Level, as.yearmon(data$Year + (data$Month-1)/12))

plot(ts1)

如果您正在使用ggplot2:
library(ggplot2)
autoplot(ts1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接