我想为很多不同的时间序列制作季节性的箱形图。我希望下面的代码清楚地说明了我想要做的事情。
我现在的问题是,如何以尽可能少的代码行以最优雅的方式完成此操作。我可以使用函数“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)
答案 0 :(得分:5)
最好直接使用"%b"
格式选择月份名称,并使用有序因子和boxplot
的公式界面:
DF$month <- factor(strftime(DF$Time,"%b"),levels=month.abb)
boxplot(Data~month,DF)
答案 1 :(得分:5)
使用'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函数使用的方法略有不同,小样本可能很明显。“ - 见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