以R表示的周/日值的绘图
我有一个矩阵中的值列表,其中维度是逐周的(因此每个值代表一周中的一天)。周的顺序是递增的,日期由其名称定义(例如“星期五”) 我想把它变成一个绘图,我认为最好的方法是分解它,这样矩阵中的值就可以按日历日的顺序列出,从指定的日期开始 例如:以R表示的周/日值的绘图,r,ggplot2,ggtimeseries,R,Ggplot2,Ggtimeseries,我有一个矩阵中的值列表,其中维度是逐周的(因此每个值代表一周中的一天)。周的顺序是递增的,日期由其名称定义(例如“星期五”) 我想把它变成一个绘图,我认为最好的方法是分解它,这样矩阵中的值就可以按日历日的顺序列出,从指定的日期开始 例如: Friday Monday Thursday w1 5 3 2 w2 1 7 1 w3 2 10 9 ->(星期一前):(3、2、5、7、1、1、10、9、2)
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中干净地执行此操作?如果你对如何更好地呈现数据有其他想法,请大胆说出来 matplot是您的朋友,非常适合这项工作:它以单独的颜色绘制矩阵的每一列。之后,您可以添加一个带有
?legend
的图例(巧妙的技巧:您可以传递“topleft”和与第一个参数类似的参数:groovy),以显示哪个颜色代表哪一天。如果矩阵是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)
#将天数按正确顺序排列:删除不需要的天数
我当然会把你的数据分解成一个时间序列。如果通常的绘图不足以满足您的需要,您可能需要查看非常整洁的函数。下面是一个输出示例(每日酒店入住率)。看看周末效应、复活节效应、夏季效应以及年底前后入住率的下降是如何清晰地表现出来的。(我稍微编辑了该函数,以便一周中的几天和几个月都是西班牙语。)
编辑2011-11-18(回答代码请求):
我通过包装器函数muestralendario调用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")
}
就我个人而言,我会使用整形(或整形2)将您的数据融合为周、日、值的格式,然后进行绘图
#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")
#您的数据
foo我最近编写了一个基于ggplot2
的库,它允许您以ggplot()+stat\u calendar\u heatmap
的方式绘制日历热图
很酷。谢谢你的帽尖。你介意加入你的R代码来生成它吗?我已经编辑了这篇文章来显示代码。大部分都在calendarHeat.R的链接中。这太棒了。有没有办法增加y轴的大小,使点之间的距离更清晰?此外,如果我尝试使用geom=“line”(在每天内绘制连接点的线),则绘图不会显示任何内容。知道为什么吗?ggplot有很多选择,查看更多信息。我相信您可以使用ylim设置y最小值和最大值。我认为geom line需要一个组变量,试试组=变量,颜色=变量
#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")