我希望建立一个情节,基本上与我使用ggplots生成的情节相同' stat_bin2d'而不是将计数映射到变量,我希望与bin关联的计数显示为每个bin的标签。
获得了等效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
答案 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()
答案 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,因此它不是理想的解决方案。当你将变量转换为文本时,我不知道它为什么会起作用,但它就是。