2012-12-16 87 views
3

我有一個包含許多事件的數據框,每個事件都有一個時間戳。我需要這樣一個二維圖:x軸代表天,y軸代表一天的時間(例如小時),並且在這一天的這個小時內的事件數由顏色(或也許另一種方式?)的相應單元格。R中的2d彩色繪圖

首先,我已經嘗試了特定小時內使用,由於有大量的事件(超過1萬個),它可能只看到有事件的事實

 ggplot(events) + 
     geom_jitter(aes(x = round(TimeStamp/(3600*24)), 
         y = TimeStamp %% (3600*24))), 

但是,不是有多少(幾乎所有的細胞都充滿了黑色)。所以,問題是 - 如何在R中創建這樣的情節?

+0

你可以給你的數據的樣本,至少事件data.frame的結構? – agstudy

+0

事件框架有一個TimeStamp列(現在它是unix時間戳,但可以轉換爲任何其他表示形式)以及與此繪圖無關的其他列。 – aplavin

+0

你嘗試修改點(alpha)的透明度嗎? – agstudy

回答

3

你可以做一個hexbin情節:

set.seed(42) 
events <- data.frame(x=round(rbinom(1000,1000, 0.1)),y=round(rnorm(1000,10,3))) 
library(ggplot2) 
library(hexbin) 
p1 <- ggplot(events,aes(x,y)) + geom_hex() 
print(p1) 

hexbin plot

+0

+1我剛剛爲我的答案添加了一個hexbin圖。 – plannapus

+0

謝謝,這是我想要的! – aplavin

+0

還有一個小問題 - 如何改變顏色?看起來更好的辦法是讓紅色的值更高的單元格,而我找不到如何做到這一點。 – aplavin

2

我做的是使用小阿爾法(即透明度),每個事件使疊加事件有較高的(累積)α,從而使疊加事件的數量的想法方式:

library(ggplot2) 
events <- data.frame(x=round(rbinom(1000,1000, 0.1)),y=round(rnorm(1000,10,3))) 
ggplot(events) 
+ geom_point(aes(x=x, y=y), colour="black", alpha=0.2) 

enter image description here

另一解決方案是將其表示爲一個熱圖:

hm <- table(events) 
xhm <- as.numeric(rownames(hm)) 
yhm <- as.numeric(colnames(hm)) 
image(xhm,yhm,hm) 

enter image description here

+0

現在我已經嘗試過了,它可以工作,但是非常緩慢(再次,因爲數以百萬計的觀察結果,並且它們中的每一個對應於圖上的一個點)。我還記得,在某處我看到了這樣的好地方,每個單元格中的觀察數量都是用顏色表示的(比如熱度),但不記得這些地塊的名字來搜索它們。 – aplavin