我使用R来绘制值,并尝试用我自己的x轴标签替换,如下所示:
plot(date, value, xaxt="n", xlab="Year", ylab="value")
axis(1, at=seq(min(year), max(year), by=10))
其中min(年)= 1969年,最大(年)= 2016年。
情节本身看起来很好,但x轴刻度标签不是:
正如您所看到的那样,x轴刻度全部聚集在一起,而不是均匀地分布在x轴上,只显示其中一年。
我错过了什么?
谢谢!
我的源数据如下所示:
site year date value
1 MLO 1969 1969-08-20 323.95
2 MLO 1969 1969-08-27 324.58
3 MLO 1969 1969-09-02 321.61
4 MLO 1969 1969-09-12 321.15
5 MLO 1969 1969-09-24 321.15
6 MLO 1969 1969-10-03 320.54
,值为:
date <- data[["date"]]
value <- data[["value"]]
year <- data[["year"]]
答案 0 :(得分:3)
一个问题是,您将factor
日期视为具有数字相关性。在内部,factor
只是integer
,这意味着它们顺序绘制的事实很方便,但并不反映实际$date
之间的有效分隔。
相反,将它们转换为实际的Date
对象并使用它。 (由于数据量很小,我稍微改变了数据)
dat <- read.table(text='site year date value
MLO 1969 1965-08-20 323.95
MLO 1969 1968-08-27 324.58
MLO 1969 1970-09-02 321.61
MLO 1969 1972-09-12 321.15
MLO 1969 1979-09-24 321.15
MLO 1969 1983-10-03 320.54', header=TRUE, stringsAsFactors=FALSE)
dat$date <- as.Date(dat$date, format='%Y-%m-%d')
从这里,(大部分)你的情节。
plot(value ~ date, data=dat, type='b', xaxt="n", xlab="Year", ylab="value")
years <- as.Date(format(range(dat$date), "%Y-01-01"))
years <- seq(years[1], years[2], '5 years')
str(years)
# Date[1:4], format: "1965-01-01" "1970-01-01" "1975-01-01" "1980-01-01"
axis(1, at=years, labels=format(years, '%Y'))
# or more directly (thanks @thelatemail)
axis.Date(1, years, format="%Y")
我同时使用at
和labels
的原因是,我们可以获取完整Date
对象的值/位置,同时保留仅年份的打印格式。< / p>