作者:腾龙娱乐开户 | 来源:互联网 | 2023-05-20 09:14
这个问题来自以下两个主题:
如何使用stat_bin2d()来计算ggplot2中的计数标签?
如何在r中的热图单元格中显示数值单元格值
在第一个主题中,用户想要使用stat_bin2d生成热图,然后想要在热图上写入每个bin的计数.用户最初想要使用的方法不起作用,这是表明stat_bin2d设计为使用geom ="rect"而不是"text"的最佳答案.没有给出令人满意的答复.
第二个问题几乎与第一个问题相同,但有一个关键的区别,即第二个问题中的变量是文本,而不是数字.答案产生了所需的结果,将bin的计数值放在stat_2d热图中的bin上.
为了比较我准备以下代码的两种方法:
library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
ggplot(data, aes(x = x, y = y))
geom_bin2d() +
stat_bin2d(geom="text", aes(label=..count..))
我们知道这首先给你错误:
"错误:geom_text需要以下缺失的美学:x,y".
与第一个问题中的问题相同.有趣的是,从stat_bin2d更改为stat_binhex可以正常工作:
library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
ggplot(data, aes(x = x, y = y))
geom_binhex() +
stat_binhex(geom="text", aes(label=..count..))
这是伟大的,但一般来说,我不认为十六进制binning是非常清楚的,并且为了我的目的,我不会为我想要的数据工作.我真的想使用stat_2d.
为了实现这一点,我根据第二个答案准备了以下工作:
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之前确定bin宽度(我是通过舍入来完成的).我在写这个问题的时候实际上已经弄明白了,所以我也可以完成.这是结果:(事实证明我无法发布图像)
所以我真正的问题是,有没有人有更好的方法来做到这一点?我很高兴我至少得到了它的工作,但到目前为止,我还没有看到在使用数字变量时将标签放在stat_2d箱上的答案.
有没有人有一个方法可以从stat_2dbin传递x和y参数到geom_text而不必使用解决方法?任何人都可以解释为什么它适用于文本变量但不适用于数字?
1> user20650..:
另一项工作(但可能更少的工作).与..count..
方法类似,您可以分两步从绘图对象中提取计数.
library(ggplot2)
set.seed(1)
dat <- data.frame(x = rnorm(1000), y = rnorm(1000))
# plot
p <- ggplot(dat, aes(x = x, y = y)) + geom_bin2d()
# Get data - this includes counts and x,y coordinates
newdat <- ggplot_build(p)$data[[1]]
# add in text labels
p + geom_text(data=newdat, aes((xmin + xmax)/2, (ymin + ymax)/2,
label=count), col="white")