向 geom_bar() / geom_col() 条添加图案或纹理?

2024-01-26

有时,我需要某种用于 geom_bar() / geom_col() 条的图案或纹理(即用于黑白打印)。例如,以下内容对于某些人来说可能很难查看:

library(ggplot2)
library(dplyr, warn.conflicts=FALSE)
library(tidyr)

d <- iris %>% 
    group_by(Species) %>% 
    summarize_all(mean) %>% 
    gather(key, val, -Species)

ggplot(d, aes(x = Species, y = val, fill = key)) +
    geom_col(position = "dodge") +
    scale_fill_grey()

曾经有过Stack Overflow 上的好问题和答案 https://stackoverflow.com/questions/2895319/how-to-add-texture-to-fill-colors-in-ggplot2 (also )。然而,解决方案很复杂,并且基本上涉及手工创建图案或纹理。我想知道是否有人有一般想法或建议或新方法以不同的方式解决这个问题。通常,当我认为我不能用 ggplot2 做某事时,这意味着改变我对解决它的想法 - 但其他(罕见)时间它只是还没有实现!


您可以使用添加模式ggpattern package https://coolbutuseless.github.io/2020/04/01/introducing-ggpattern-pattern-fills-for-ggplot/

# remotes::install_github("coolbutuseless/ggpattern")
library(ggpattern)
library(ggplot2)
library(dplyr, warn.conflicts=FALSE)
library(tidyr)
  
  d <- iris %>% 
    group_by(Species) %>% 
    summarize_all(mean) %>% 
    gather(key, val, -Species)
  
  ggplot(d, aes(x = Species, y = val, fill = key)) +
    geom_col_pattern(position = "dodge",
             pattern = 
               c(
                 "stripe", "stripe", "stripe", # 3rd col
                 "stripe", "stripe", "stripe", # 4th col
                 "none", "none", "none", # 1st col
                 "crosshatch", "crosshatch", "crosshatch" # 2nd col
             ),
             pattern_angle = c(rep(0, 3), 
                               rep(45, 3), 
                               rep(0, 6)),
             pattern_density = .1,
             pattern_spacing = .04,
             pattern_fill = 'black') +
    scale_fill_grey() +
  guides(fill = guide_legend(override.aes = 
                               list(
                                 pattern = c("none", "crosshatch", "stripe", "stripe"),
                                 pattern_spacing = .01,
                                 pattern_angle = c(0, 0, 0, 45)
                                 )
                             ))

Created on 2021-01-13 by the reprex package https://reprex.tidyverse.org (v0.3.0)

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

向 geom_bar() / geom_col() 条添加图案或纹理? 的相关文章

随机推荐

  • 引导程序验证不起作用

    我正在尝试使用验证引导程序 http bootstrapvalidator com 我尝试解决方案为here http jsfiddle net Tkbk9 但它不起作用
  • 确定哪些测试覆盖一行代码

    有没有办法确定可能执行给定代码行的单元测试集 换句话说 你能否自动确定不只是whether给定的行已被覆盖 但覆盖它的实际测试集是什么 考虑一个包含 50K 单元测试的大型代码库 显然 运行所有这些可能需要很长时间 即使不是几天 也可能是几
  • 应用程序配置(Spring?)

    我厌倦了所有这些无聊的样板代码来解析应用程序配置 如数据库连接 工作目录 API 端点等等 Spring IoC 看起来不错 但这将迫使我的应用程序的用户修改 XML 文件 只是为了编辑数据库 URL 等 这也可能非常分布在 XML 文件中
  • Koa 发送响应后运行代码

    为了优化响应延迟 需要执行以下工作after响应已发送回客户端 但是 我似乎可以在发送响应后运行代码的唯一方法是使用setTimeout 有没有更好的办法 也许在发送响应后在某个地方插入代码 或者在某个地方异步运行代码 这是一些代码 koa
  • 实体框架 4:继承和关联

    我确实从提供跟踪的基类派生出我的实体 Since User源自于TrackableBase and TrackableBase与 关联User 我收到错误 无法确定相关操作的有效顺序 由于外键约束 模型 可能存在依赖关系 要求或存储生成的值
  • OData分页与skip和top - 如何知道没有更多数据?

    我有 OData 源 它实现了 skip and top参数 返回的实体数量为 x 假设我只有 250 个实体 然后我尝试像这样进行分页 https example com EntitySet top 30 skip 220 如果我的跳过超
  • 使用 jaxb 验证复杂对象中的嵌套对象

    我有一个像这样的对象的 xml 表示 OrderList has list of 订单 每个订单都有一个商品列表 我想验证我的商品 如果无效 我想将它们从订单中删除 如果所有商品都无效 那么我会从订单列表中删除该订单 我已经能够验证订单列表
  • 将包含 JSON 对象数组的 Spark 数据帧列转换为多行

    我有一个流式 JSON 数据 其结构可以用下面的案例类来描述 case class Hello A String B Array Map String String 相同的示例数据如下 A B ABC C 1 D 1 C 2 D 4 XYZ
  • Spritekit - 不从 SKTextureAtlas 加载 @3x 图像

    由于我的示例项目被删除 我认为这会更容易测试 我将发布一些代码和图像来说明我的观点 这是示例图像 我的图集设置 我的启动图像设置 我将这些精灵添加到场景中的代码 override func didMoveToView view SKView
  • 如何在 Blazor Hybrid 中的 muddatagrid 列中增加模型的值

    如何增加 muddatagrid 列中模型的值 如果我按 olus 图标 它将增加所有数量 建议我一种可以与 onclick eventcallback 一起使用的方法 我还需要将其增加 0 5
  • 如何模拟 URLSession.DataTaskPublisher

    我该如何嘲笑URLSession DataTaskPublisher 我有课Proxy需要注入一个URLSessionProtocol protocol URLSessionProtocol func loadData from url U
  • 如何将密码从文件传递到mysql命令?

    我有一个 shell 脚本 它使用外部文件中的一个参数调用 mysql 命令 它看起来像这样 我也在其他资源中看到了这个示例 mysql user root password cat root mysql 有点不工作 无法连接到 MySQL
  • Android 操作栏(如 Twitter 示例)

    实现 Twitter 示例 UI 模式等操作栏的最佳方法是什么 Android 版 Twitter 深入了解 Android 不断演变的 UI 模式 模式4 操作栏http android developers blogspot com 2
  • 在 Powershell 中写入十六进制转义字符

    有没有办法在Powershell中写这样的东西 Linux 将与 Perl 一起使用 char foo x41 我需要在我的一个程序中输入一些不可打印的字符 你可以这样做将 int 转换为 char 带十进制数 foo 65 as char
  • HttpClient GetAsync 方法 403 错误

    我正在尝试简单地显示 github 存储库 网址 https api github com search repositories q pluralsight https api github com search repositories
  • 使用cmd命令打开pwsh而不退出

    我正在尝试启动一个 Powershell 窗口 使用以下命令启动 ssh 会话 pwsh exe noexit Command ssh
  • 如何在 LINQ 中对单个联接中的多个字段进行左联接

    我正在尝试对 LINQ 执行这个简单的 sql 查询 但它给了我错误 这是需要转换为 LINQ 的 SQL 查询 DECLARE groupID int SET groupID 2 SELECT FROM dbo Person p LEFT
  • C++ 中两个向量的逐元素乘法

    我试图用两个向量进行以下数学运算 v1 a1 a2 a3 a4 a5 v2 b1 b2 b3 b4 b5 想要计算 v a2 b2 a3 b3 a4 b4 a5 b5 请注意 我不想要新向量中的第一个元素 我想知道是否有一种比 for 循环
  • Mongo shell 中的 NumberLong 算术

    如何在 Mongo shell 中对 NumberLong 值执行精确算术 据我了解 Javascript 只有一种数字类型 number 通常限制为 54 位浮点精度 使用 例如 标准加法的直接算术显示将强制转换为较低精度类型 gt Nu
  • 向 geom_bar() / geom_col() 条添加图案或纹理?

    有时 我需要某种用于 geom bar geom col 条的图案或纹理 即用于黑白打印 例如 以下内容对于某些人来说可能很难查看 library ggplot2 library dplyr warn conflicts FALSE lib