Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以R表示的周/日值的绘图_R_Ggplot2_Ggtimeseries - Fatal编程技术网

以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")