我在矩阵中有一个值列表,其中维度是一天一天(因此每个值代表一周中的特定日期)。这几周是按顺序递增的,日期由他们的名字定义(例如“星期五”)。
我想把它变成一个情节,并且我认为最好的方法是解开它,以便矩阵中的值按日历顺序列出,从指定日期开始。
示例:
Friday Monday Thursday
w1 5 3 2
w2 1 7 1
w3 2 10 9
- > (到星期一):( 3,2,5,7,1,1,10,9,2)
我如何在R中干净利落地做到这一点?如果您对如何更好地呈现数据有另一个想法,请说出来。
答案 0 :(得分:7)
我肯定会解析你的数据并将它们以时间序列的形式出现。如果通常的情节不适合您的目的,您可能需要查看非常整洁的calendarheat.R函数。以下是输出(每日酒店占用率)的示例。看看周末效果,复活节效果,夏季以及年末入住率下降的整齐程度。 (我稍微编辑了这个功能,以便一周中的几天和几个月都是西班牙语。)
编辑2011-11-18(回答代码请求):
我通过包装函数MuestraCalendario调用函数calendarHeat,它只选择一系列日期并为图添加标题:
MuestraCalendario <- function(obs,
main="",
desde="2000-01-01",
hasta="2004-12-31") {
scratch <- window(obs,start=as.Date(desde),end=as.Date(hasta))
calendarHeat(dates=index(scratch),
values=as.vector(coredata(scratch)),
varname=main,
color="r2b")
}
“obs”是包动物园定义的格式的时间序列。图中的图是用
生成的MuestraCalendario(obs,
main=NULL,
desde="2005-01-01",
hasta="2009-12-31")
答案 1 :(得分:2)
?matplot
是你的朋友,非常适合这项工作:它以单独的颜色绘制矩阵的每一列。之后,您可以例如添加一个带有?legend
的图例(巧妙的技巧:你可以通过“topleft”和类似第一个参数:groovy)来显示哪个颜色代表哪一天。
答案 2 :(得分:1)
如果您的矩阵是m
:
# get the days into the correct order: delete the days you don't need
m <- m[, c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")]
m <- as.numeric(m)
答案 3 :(得分:1)
就个人而言,我会使用reshape(或reshape2)将您的数据融合为Week,Day,Value格式,然后绘制该格式。
#Your data
foo<-matrix(data=c(5,1,2,3,7,10,2,1,9),
nrow=3, ncol=3,
dimnames=list(c("w1", "w2", "w3"), c("Friday", "Monday", "Thursday")))
#Convert to Data frame
bar<-as.data.frame(foo)
bar$week<-rownames(bar)
#Melt
library(reshape)
melteddata<-melt(data=bar, measure.vars=c("Friday", "Monday", "Thursday"))
#Plot
library(ggplot2)
qplot(data=melteddata, x=week, y=value, colour=variable, geom="point")
答案 4 :(得分:0)
我最近创作了一个基于ggplot2
的库,可让您以ggplot() + stat_calendar_heatmap
方式绘制日历热图 - https://github.com/Ather-Energy/ggTimeSeries。