在R图中聚集在一起的X轴标签

时间:2018-04-10 04:29:47

标签: r plot

我使用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轴刻度标签不是:

plot with incorrect x axis tick labels

正如您所看到的那样,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"]]

1 个答案:

答案 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")

我同时使用atlabels的原因是,我们可以获取完整Date对象的值/位置,同时保留仅年份的打印格式。< / p>

simple datewise plot