在 ggplot2 中,如何将堆叠直方图中的小值条形组合在一起?

2024-05-27

示例数据:

tmp_df <-  
    data.frame(a = rnorm(100, 0, 1),
                      b = rnorm(100, 0.5, 1),
                      c = rnorm(100, -0.5, 1),
                      d = rnorm(100, 1, 1),
                      e = rnorm(100, -1, 1)) %>%
    tidyr::gather()

并生成堆叠直方图:

tmp_df %>%
    ggplot(aes(x = value, fill = key)) +
    geom_histogram(binwidth = 0.1, position = 'stack')

一切都很好,在每个 bin 中,我们有 5 个不同颜色的条形,显示每个组的每个 bin 中的计数。

如果我只想显示每个 bin 的前 N ​​个(假设 N = 2)组的计数,并将其他计数分类和聚合到“其他”组中,我该怎么办?

例如,对于 N = 2 且 bin 以零为中心,我想显示a and c作为单独的条落入此垃圾箱,但将条的长度组合起来b, d, and e合而为一。对于以大约 -1.4 为中心的垃圾箱,我想显示组的计数e and c,但汇总其他两个。


您可以通过创建一个新的分组变量(我们将其称为group),对于每个 bin,取值为key对于前两个级别key or other对于其他三个级别key。为了实现这一点,您需要在绘制数据之前对数据进行分类和统计,然后创建新的group列并将其用作fill审美在ggplot.

library(dplyr)
library(ggplot2)

# Set a seed for reproducibility
set.seed(59)
tmp_df <-  
  data.frame(a = rnorm(100, 0, 1),
             b = rnorm(100, 0.5, 1),
             c = rnorm(100, -0.5, 1),
             d = rnorm(100, 1, 1),
             e = rnorm(100, -1, 1)) %>%
  tidyr::gather()

在下面的代码中,我们对数据进行分箱并创建新的分组变量。我使用了 0.2 个单位宽的垃圾箱,标签等于垃圾箱的中点。要创建group列,我们使用rank找到两个最常见的值key在每个垃圾箱中,并将其余的设置为“其他”。

tmp_df = tmp_df %>% 
  group_by(key, 
           bins=cut(value, seq(-10,10,0.2), labels=seq(-9.9,9.9,0.2))) %>%
  tally %>%
  group_by(bins) %>%
  mutate(group = ifelse(key %in% key[rank(-n, ties="first") %in% 1:2], key, "other")) %>%
  arrange(bins, key)

现在,对于我们使用的情节geom_bar我们用新的填充group我们在上面创建的列。另外,我们转换bins(箱标签)从因子到数字,因此 x 轴将是连续的,而不是离散的。

tmp_df %>%
  ungroup %>%
  mutate(bins = as.numeric(as.character(bins))) %>%
  ggplot(aes(x=bins, y=n, fill = group)) +
  geom_bar(stat='identity') +
  scale_fill_manual(values=c(hcl(seq(15,375,length.out=6)[1:5],100,65),"black"))

让我知道这是否是您的想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ggplot2 中,如何将堆叠直方图中的小值条形组合在一起? 的相关文章

随机推荐

  • 有没有带有保存和语法突出显示功能的 HTML、CSS 在线文本编辑器?

    我想让 css 文件可以从任何地方 家庭 办公室等 访问并准备好编辑 并保存 我将进行手工编码 只想语法突出显示并保存在网络设施上 我尝试了谷歌文档 这很好 因为我可以在线保存 而且它也有修订历史记录功能 这很有用 但它没有语法突出显示 也
  • 卸载 SSL 时保护表单身份验证 Cookie

    我正在尝试使用 ASP NET MVC 2 0 和表单身份验证来保护我当前正在开发的网站 为了保护表单身份验证cookie 我想将requiresSSL 属性设置为true 以便浏览器仅在连接处于SSL 下时才发送cookie 并且显然确保
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • 图像映射区域周围不需要的边框

    我正在使用带有圆形区域的图像贴图 问题是我在 IE7 中的区域周围出现了不需要的边框 此边框不会出现在 FF 和 Chrome 中 也不会出现在 IE8 IE9 中 我尝试向图像添加 border 0 锚点的 css 属性 即 a bord
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • 在 R 中使用 randomforest() 进行分类?

    我最初有一个由 N 行 12 列组成的数据框 最后一列是我的班级 0 或 1 我必须将整个数据框转换为数字 training lt sapply training temp as numeric 但后来我认为我需要将类列作为因子列来使用 r
  • Node.js 和 .net 之间的命名管道通信

    我正在研究 net v4 5 2 和 Javascript node js v8 9 0 应用程序之间的进程间通信 我想为此使用 Windows 命名管道 并且仅限命名管道 对于 Javascript 应用程序 我使用的是命名管道包 v0
  • 创建动态对象

    如何动态创建对象 string columnNames EmpName EmpID PhoneNo List
  • 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

    好吧 我正在寻找一种方法来更改我的微调器图像并使用自定义图像 有什么建议吗 我创建了一个UIActivityIndi catorView 的子类 https github com cncool CDActivityIndicatorView
  • 如何解决 MySQL Workbench 上的这些行错误?

    正如您所看到的 我的代码中没有语法错误或类似的错误 你们能帮我吗 我想这只是错误标记机制中的一个小错误 尝试编辑代码或关闭此编辑器并打开一个新编辑器 如果您有重现此问题的步骤列表 您甚至可以创建一个错误报告 http bugs mysql
  • SingleChildScrollView 内垂直居中的小部件

    我是 Flutter 新手 所以我通过制作一个简单的表单来训练自己 我意识到当我在 iPhone 上调试时 虚拟键盘触发了一个错误 A RenderFlex overflowed by 29 pixels on the bottom 我通过
  • 为什么 Ajax 在第一个请求时可以正常工作,但在第二个请求时会在新页面上返回部分视图?

    我有一个嵌套在表中每一行中的 Ajax 表单 以提供添加 删除功能 该部分列出了所有可用的角色 Microsoft Identity 2 0 以及每个角色的指定用户是否与该角色关联 以及用于切换用户进出角色的按钮 Ajax 当我使用 Aja
  • 未定义的参考错误 - rand

    我正在创建一个命令行 C 测试应用程序 可执行 以便在我的 root Android 设备上运行 该可执行文件使用多个预构建的 C 库 其中之一使用 rand 在链接状态期间我收到错误 rand 的未定义引用 为了检查路径是否设置正确 我尝
  • 在 Office UI Fabric 中导出到 Excel

    有没有导出到excel的功能办公室 UI 结构默认列表 我在官方文档中找不到它 不 目前没有这方面的功能 Office ui fabric 是用户界面主要关注用户体验设计 UX 而不是功能的库
  • Python:并行修改数组的简单方法

    这个问题可能听起来很简单 但作为 Python 并行化的新手 我肯定会遇到困难 我处理了 OpenMP for C 中的并行化问题 这要容易得多 我需要做的是并行修改矩阵的条目 就是这样 问题是 我无法使用简单的 joblib 库来做到这一
  • 具有动态特性的 Python 嵌套作用域

    需要帮助理解以下句子PEP 227 http www python org dev peps pep 0227 和Python 语言参考 http docs python org reference executionmodel html
  • CSS class 和 id 同名

    css class 和 id 同名有什么问题吗 就像文章 帖子页脚的 footer 和页面页脚的 footer 一样 不 完全可以接受 一个类是使用 a 来定义的 并且 ID 是使用定义的 因此 就浏览器而言 它们是两个完全独立的项目 唯一
  • 类型错误:不支持的操作数类型 -:“int”和“list”

    我正在尝试用 python 创建一个程序 它会使用 Zeller 算法告诉你你出生在星期几http en wikipedia org wiki Zeller 27s congruence http en wikipedia org wiki
  • 如何从 C# 可移植类库 (PCL) 添加对 F# 可移植库的引用

    我有一个项目 其中包含两个 F 项目和一个 C 项目 我想在其中编写一些 XUnit 测试 FS PL F 3 1 3 3 1 0 可移植库 FS PL Legacy F 31 2 3 5 1 可移植库 旧版 测试 C NET 4 5 Wi
  • 在 ggplot2 中,如何将堆叠直方图中的小值条形组合在一起?

    示例数据 tmp df lt data frame a rnorm 100 0 1 b rnorm 100 0 5 1 c rnorm 100 0 5 1 d rnorm 100 1 1 e rnorm 100 1 1 gt tidyr g