2014-05-17 49 views
1

我正在环视网络,但无法找到我正在寻找的答案。 这里是我的输入数据:基于Date类绘制直方图

Date   Calls 
2012-01-01  3 
2012-01-01  3 
2012-01-01  10 
2012-03-02  15 
2012-03-02  7 
2012-03-02  5 
2012-04-02  0 
2012-04-02  5 
2012-04-02  18 
2012-04-02  1 
2012-04-02  0 
2012-05-02  2 

我想绘制HIST将在“日期”栏调用每个天的总和。 是的,它可以通过确定日期列的级别并加起来相应的呼叫,但想知道如果作为一个优雅的方式来做到这一点。 “Date”列为“Date”data.class()。 根据这个例子,最终的hist应该有4个bin(16,27,24,2)。

干杯,

回答

4

好,从技术上讲,直方图实际上只是估计连续数据的密度函数和数据编码的方式,更像是日期是分类变量。所以你可能只需要一个计数条形图而不是真正的直方图。你可以用

qplot(Date,Calls, data=dd, stat="summary", fun.y="sum", geom="bar") 

resulting plot

+0

不错。我试图使用'stat_sum',但无法使其工作。 –

1

读取数据:

d <- read.table(text= 
"Date   Calls 
2012-01-01  3 
2012-01-01  3 
2012-01-01  10 
2012-03-02  15 
2012-03-02  7 
2012-03-02  5 
2012-04-02  0 
2012-04-02  5 
2012-04-02  18 
2012-04-02  1 
2012-04-02  0 
2012-05-02  2", 
header=TRUE) 

d$Date <- as.Date(d$Date) 
library(plyr) 
s <- ddply(d,"Date",summarize,Calls=sum(Calls)) 
library(ggplot2) 

如果我们用Date作为变量x,我们得到一个月的标签:

ggplot(s,aes(x=Date,y=Calls))+geom_bar(stat="identity") 

你可能更喜欢特定日期标签:

ggplot(s,aes(x=factor(Date),y=Calls))+geom_bar(stat="identity") 

或非默认标签:

ggplot(s,aes(x=format(Date,"%d-%b"),y=Calls))+geom_bar(stat="identity")+ 
    labs(x="Date") 

它也应该可以通过构建自己的hist对象,并把它传递给plot.histogram要做到这一点,但我觉得这种方式很容易...

+0

感谢做什么用ggplot,这是伟大的!但我想做直方图。我正在创建一个新的数据框:'for(我在levels(factor(activity $ Date))){print(sum(activity $ calls [activity $ Date == i]))}'然后绘制新的框架。只是为了挑战,我想它作为基本的直方图... :) – flamenco

+0

“基本直方图”你的意思是看起来像'hist()'的输出?我的回答,以及在重复问题中链接的几个答案,向您展示了如何更高效地进行聚合。正如我在我的回答中所说的,你可以构造一个'hist()'对象并用plot.histogram()来绘制它,但这有点痛苦 - 你必须找出断点,中点等等。 –

+0

是的!这就是我所需要的! – flamenco