2012-12-16 57 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