R中的周/日值的图

时间:2011-11-17 07:36:04

标签: r

我在矩阵中有一个值列表,其中维度是一天一天(因此每个值代表一周中的特定日期)。这几周是按顺序递增的,日期由他们的名字定义(例如“星期五”)。

我想把它变成一个情节,并且我认为最好的方法是解开它,以便矩阵中的值按日历顺序列出,从指定日期开始。

示例:

   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中干净利落地做到这一点?如果您对如何更好地呈现数据有另一个想法,请说出来。

5 个答案:

答案 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")

enter image description here

答案 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

enter image description here