如何使用stat_bin2d()来计算ggplot2中的计数标签?

时间:2014-12-15 01:50:15

标签: r ggplot2

我希望建立一个情节,基本上与我使用ggplots生成的情节相同' stat_bin2d'而不是将计数映射到变量,我希望与bin关联的计数显示为每个bin的标签。

我从another thread

获得了等效1D问题的以下解决方案
data <- data.frame(x = rnorm(1000), y = rnorm(1000))

ggplot(data, aes(x = x)) +
  stat_bin() +  
  stat_bin(geom="text", aes(label=..count..), vjust=-1.5)

每个垃圾箱的计数都有明确标记。然而,从1D变为2D情况,这是有效的,

ggplot(data, aes(x = x, y = y)) +
  stat_bin2d()

但这会返回错误。

ggplot(data, aes(x = x, y = y)) +
  stat_bin2d() +  
  stat_bin2d(geom="text", aes(label=..count..))

Error: geom_text requires the following missing aesthetics: x, y

2 个答案:

答案 0 :(得分:5)

ggplot的更新版本中,这是完全可能的,并且可以正常运行。

请确保对stat_bin2d()的调用使用相同的参数。例如,在两行上设置binwidth = 1

library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))

ggplot(data, aes(x = x, y = y)) +
  geom_bin2d(binwidth = 1) + 
  stat_bin2d(geom = "text", aes(label = ..count..), binwidth = 1) +
  scale_fill_gradient(low = "white", high = "red") +
  xlim(-4, 4) +
  ylim(-4, 4) +
  coord_equal()

enter image description here

答案 1 :(得分:4)

我不小心回答了你写一个我自己的问题的问题。我发现当你将从bin编号的变量转换为text时,stat_bin2d会起作用,所以:

library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
x_t<-as.character(round(data$x,.1))
y_t<-as.character(round(data$y,.1))
x_x<-as.character(seq(-3,3),1)
y_y<-as.character(seq(-3,3),1)
data<-cbind(data,x_t,y_t)



ggplot(data, aes(x = x_t, y = y_t)) +
  geom_bin2d() + 
  stat_bin2d(geom="text", aes(label=..count..))+
  scale_x_discrete(limits =x_x) +
  scale_y_discrete(limits=y_y) 

所以你去吧。不幸的是,您必须在ggplot()之外设置binwidth,因此它不是理想的解决方案。当你将变量转换为文本时,我不知道它为什么会起作用,但它就是。