数据文件的日期为时间序列数据的格式,即1975M1、1975M2、... 2011M12。在使用R绘制此数据时,我希望x轴在刻度轴上显示月份。
为了正确读取日期,我尝试将M替换为-以获得%Y-%m格式,但这对于可能需要%Y-%M-%d格式的hydroTSM包中的drawTimeAxis似乎不太好。它会给出错误,即刻度尺寸的尺寸数不正确。
另一种解析和格式化数据的方法,就像在x$newdate <- strptime(as.character(x$date), "%Y-%m")和format(x$newdate,""%Y-%m")中一样,也不能读取数据并给出错误...全是NA。
date <- as.Date( data ,1字符串不是标准明确格式的错误,ts <- read.zoo(xts,as.yearmon(x,1)在数据行给出了错误的拼写。
请给出如何与日期信息一起读取此数据的解决方案。
数据文件的一小部分
date x x2
1975M1 112.44 113.12
1975M2 113.1 114.36
1975M3 115.04 114.81
1975M4 117.65 115.35
1975M5 119.5 116.92
1975M6 121.4 118.56
1975M7 120.64 118.97
1975M8 119.12 119.84
1975M9 118.91 120.59
1975M10 120.58 122.3
1975M11 121.26 123.35
1975M12 122.34 123.33更新:到目前为止,答案通过在xts包中使用%YM%m或添加日期来获取标准格式,解决了正确读取日期的问题。刻度轴的定制仍然是一个问题。drawTimeAxis给出了尺寸错误,并且plot命令不会显示超过一年的数据或其他数据的月度标签。有什么方法可以自定义刻度轴吗?
发布于 2012-10-25 19:33:43
也许您没有正确使用as.yearmon(),因为以下方法对我有效(使用加文答案中的dat ):
library(zoo)
dat$date <- as.yearmon(dat$date, "%YM%m")因此,通过工作让事情正确地绘制出来:
dat <- read.table(文本= "date x x2 1975M1 112.44 113.12 1975M2 113.1 114.36 1975M3 115.04 114.81 1975M4 117.65 115.35 1975M5 119.5 116.92 1975M6 121.4 118.56 1975M7 120.64 118.97 1975M8 119.12 119.84 1975M9 118.91 120.59 1975M10 120.58 122.3 1975M11 121.26 123.35 1975M12 122.34 123.33",header = TRUE)
xts using as.yearmon() from "zoo“package。library(xts) #还将加载动物园日期<- xts(dat-1,order.by =as.yearmon(dat$ dat.xts,"%YM%m")) dat.xts #x x2 #1975年1月112.44 113.12 #2月1975 113.10 114.36 #1975年3月115.04 114.81 #4月1975 117.65 115.35 #1975年5月119.50 116.92 #1975年6月121.40 118.56 #1975年7月120.64 118.97 #1975年8月119.12 119.84 #1975年9月118.91 120.59 #1975年10月120.58 122.30 #1975年11月121.26123.35 #1975年12月122.34 123.33
plot.zoo(dat.xts)

plot.zoo(dat.xts,plot.type=“单色”,plot.type==c(“红色”,“蓝色”))

更新:指定您自己的轴
下面是一些可使用的示例数据(在提问时共享这些示例数据通常很好,因为这会使其他人更容易复制和解决您的问题)。请注意,对于这个示例,我们跳过了使用"xts“包,因为它实际上并不是必需的。
set.seed(1)
dat <- data.frame(date = paste0(rep(1975:1977, each = 12),
"M", rep(1:12, times = 3)),
x1 = runif(36, min = 100, max = 140),
x2 = runif(36, min = 100, max = 140))
library(zoo) # xts is actually unnecessary if this is all you're doing
# Convert your data to a `zoo` object
dat.z <- zoo(dat[-1], order.by = as.yearmon(dat$date, "%YM%m"))这是使用plot(dat.z, screen = 1, col = 1:2)获得的默认图

从你的评论中,听起来你想要像月度标签这样的东西。
xaxt = "n"抑制x轴plot(dat.z,screen = 1,col = 1:2,xaxt =“n”)
?plot.zoo,在其中对其进行修改。)tt <- time(dat.z) #以下是序列1:36。#如果您只想每隔三个月绘制一次,#请使用类似于ix <- seq(1,length(tt),3) ix <- seq_along(tt) #的序列。#这将生成缩写月份-缩写年份fmt <- "%b-%y“实验室<- format(tt,fmt) #生成标签的矢量
las = 2使标签垂直于轴,如果您确实觉得需要在每年的每个月都包含一个标签,则需要这样做。轴(side= 1,at = ttix,labels = labsix,tcl = -0.7,cex.axis = 0.7,las = 2)
这是最终的图:

顺便说一句,如果你得到了像1977.15之类的日期,你可能想通读一些答案to this question,例如,看看@joran对pretty()的使用。
发布于 2012-10-25 19:12:29
使用您的数据:
dat <- read.table(text = "date x x2
1975M1 112.44 113.12
1975M2 113.1 114.36
1975M3 115.04 114.81
1975M4 117.65 115.35
1975M5 119.5 116.92
1975M6 121.4 118.56
1975M7 120.64 118.97
1975M8 119.12 119.84
1975M9 118.91 120.59
1975M10 120.58 122.3
1975M11 121.26 123.35
1975M12 122.34 123.33", header = TRUE)您缺少的是,为了使日期成为as.Date()的有效输入,您需要在日期中添加一个日期。该位可以通过将"-01"附加到date的每个元素来完成。我们需要添加"-"分隔符,以清楚地将月份与我们添加的新日期区分开来。
paste0(as.character(date), "-01") ## temporary step, not needed现在我们有了类似于
> with(dat, paste0(date, "-01")) ## temporary step, not needed
[1] "1975M1-01" "1975M2-01" "1975M3-01" "1975M4-01" "1975M5-01"
[6] "1975M6-01" "1975M7-01" "1975M8-01" "1975M9-01" "1975M10-01"
[11] "1975M11-01" "1975M12-01"我们可以写出as.Date()可以使用的适当格式:"%YM%m-%d"。注意,这里我们包含一个文字"M"和日期部分"-"之前的分隔符。
使用transform()将结果重新插入到dat中,我们得到了:
## full solution
dat <- transform(dat, date = as.Date(paste0(date, "-01"), format = "%YM%m-%d"))这给了我们
> dat
date x x2
1 1975-01-01 112.44 113.12
2 1975-02-01 113.10 114.36
3 1975-03-01 115.04 114.81
4 1975-04-01 117.65 115.35
5 1975-05-01 119.50 116.92
6 1975-06-01 121.40 118.56
7 1975-07-01 120.64 118.97
8 1975-08-01 119.12 119.84
9 1975-09-01 118.91 120.59
10 1975-10-01 120.58 122.30
11 1975-11-01 121.26 123.35
12 1975-12-01 122.34 123.33https://stackoverflow.com/questions/13067012
复制相似问题