6

我想为许多不同的时间序列制作季节性箱线图。我希望下面的代码清楚地说明了我想要做什么。

我现在的问题是,如何用尽可能少的代码行以最优雅的方式做到这一点。我可以使用函数“子集”为每个月创建一个新对象,然后绘制它,但这似乎不是很优雅。我尝试使用“拆分”功能,但我不知道如何从那里开始。

如果我的问题没有明确说明,请告诉我或对其进行编辑以使其更清楚。

非常感谢任何直接帮助或与其他网站/帖子的链接。谢谢你的时间。

这是代码:

## Create Data
Time <- seq(as.Date("2003/8/6"), as.Date("2011/8/5"), by = "2 weeks")
data <- rnorm(209, mean = 15, sd = 1)
DF <- data.frame(Time = Time, Data = data)
DF[,3] <- as.numeric(format(DF$Time, "%m"))
colnames(DF)[3] <- "Month"

## Create subsets
Jan <- subset(DF, Month == 1)
Feb <- subset(DF, Month == 2)
Mar <- subset(DF, Month == 3)
Apr <- subset(DF, Month == 4)

## Create boxplot
months <- c("Jan", "Feb", "Mar", "Apr")
boxplot(Jan$Data, Feb$Data, Mar$Data, Apr$Data, ylab = "Data", xlab = "Months", names = months)

## Try with "split" function
DF.split <- split(DF, DF$Month)
head(DF.split)
4

3 回答 3

7

使用'ggplot2'(和@James'月份名称,谢谢!):

DF$month <- factor(strftime(DF$Time,"%b"),levels=month.abb)
ggplot(DF, aes(x=,month, y=Data)) +
    geom_boxplot()

箱形图

(顺便说一句:请注意,在“ggplot2”中,上下“铰链”对应于第一个和第三个四分位数(第 25 个和第 7 个百分位数)。这与 boxplot 函数使用的方法略有不同,并且可能在小样本。 ” - 见文档

于 2012-08-21T10:16:14.120 回答
6

您最好直接使用"%b"格式选择月份名称,并使用有序因子和公式接口boxplot

DF$month <- factor(strftime(DF$Time,"%b"),levels=month.abb)
boxplot(Data~month,DF)

在此处输入图像描述

于 2012-08-21T10:06:48.440 回答
0

要在任何区域设置中将月份设置为有序因子,请使用可以在帮助页面中找到的技巧?month.abb

Sys.setlocale("LC_TIME", "German_Germany")
DF$month <- factor(format(DF$Time, "%b"), levels=format(ISOdate(2000, 1:12, 1), "%b"))

你也可以把它画进去lattice

require(lattice)
bwplot(Data~month, DF, pch="|") # set pch to nice line instead of point

格子箱线图

于 2015-06-08T20:58:09.057 回答