1

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

    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

我想用 x 轴在 R 中创建箱线图,例如:

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 
4

1 回答 1

3

这不是一个非常优雅的解决方案,但它是我能想到的唯一让您的箱线图具有适当宽度的解决方案。

给定您的样本数据:

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

显然,鉴于您提供的数据样本,这里的结果不是很漂亮,但我想那是实际数据,它会很好地填充。

在此处输入图像描述

但下面是一些(虚构的)更完整数据的样子:

在此处输入图像描述

于 2012-11-05T14:18:48.580 回答