热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用R计算热图中的箱柜数

如何解决《使用R计算热图中的箱柜数》经验,为你挑选了1个好方法。

这个问题来自以下两个主题:

如何使用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")

在此输入图像描述


推荐阅读
author-avatar
腾龙娱乐开户
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有