分割数据和生成季节性箱形图的最优雅方法是什么?

时间:2012-08-21 09:51:23

标签: r date split boxplot

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

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

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

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

以下是代码:

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

3 个答案:

答案 0 :(得分:5)

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

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

enter image description here

答案 1 :(得分:5)

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

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

boxplot

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

答案 2 :(得分: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

Lattice boxplot

相关问题