我有一个温度记录的数据集,如:
row.names Collection_date temprature col_yr col_mnth
1 1 4-Aug-04 27 2004 8
2 2 9-Aug-04 26 2004 8
3 3 4-Aug-04 27 2004 8
4 4 9-Aug-04 26 2004 8
5 5 9-Aug-04 26 2004 8
6 6 9-Aug-04 26 2004 8
...
1031 1031 6-Aug-06 32 2006 8
我想在R中用x轴创建boxplot,如:
1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 ...
2004 2005
答案 0 :(得分:2)
这不是一个非常优雅的解决方案,但它是我唯一能想到的,因此你的箱形图有适当的宽度。
给出您的样本数据:
dat <- read.table(textConnection("row.names Collection_date temprature col_yr col_mnth
1 1 4-Aug-04 27 2004 8
2 2 9-Aug-04 26 2004 8
3 3 4-Aug-04 27 2004 8
4 4 9-Aug-04 26 2004 8
5 5 9-Aug-04 26 2004 8
6 6 9-Aug-04 26 2004 8
1031 1031 6-Aug-06 32 2006 8"))
首先将您的日期声明为POSIXct对象(请注意,在您的情况下,您必须确保您的语言环境设置为英语,因为您的月份缩写为英语):
dat$Collection_date <- strptime(dat$Collection_date,"%d-%b-%y")
然后创建数月和数年的序列:
ax_month <- seq(min(dat$Collection_date),max(dat$Collection_date),"month")
ax_year <- seq(min(dat$Collection_date),max(dat$Collection_date),"year")
然后用你的轴绘制一个空图:
plot(NA, xaxt="n",type="n", ylab="Temperature", xlab=NA,
xlim=range(seq_along(ax_month)), ylim=range(dat$temprature))
axis(3,at=seq_along(ax_month), labels=format(ax_month,"%m"))
mtext(format(ax_year,"%Y"), side=3, line=3, at=seq(1,length(ax_month), by=12))
最后是每月的箱形图:
for(i in seq_along(ax_month)){
sub_dat <- dat[format(dat$Collection_date, "%m-%Y") == format(ax_month[i], "%m-%Y"),]
boxplot(sub_dat$temprature, add=TRUE, axes=FALSE, at=i)
}
显然,考虑到你提供的数据样本,这里的结果不是很漂亮,但我猜这与实际数据的结合很好。
但是这里有一些(虚构的)更完整的数据会是什么样子: