在R中绘制箱形图,其中包含年和月的温度记录

时间:2012-11-05 12:56:53

标签: r boxplot

我有一个温度记录的数据集,如:

    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 

1 个答案:

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

显然,考虑到你提供的数据样本,这里的结果不是很漂亮,但我猜这与实际数据的结合很好。

enter image description here

但是这里有一些(虚构的)更完整的数据会是什么样子:

enter image description here