2014-05-17 92 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