ggplot2:修复因子水平的颜色

2024-02-08

我正在开发一个更大的项目,我正在 ggplot2 中创建多个绘图。这些图涉及在几个不同的谨慎类别(例如:国家、物种、类型)中绘制几种不同的结果。我想完全修复离散类型到颜色的映射,以便 Type=A 始终显示为红色,Type=B 始终显示为蓝色,等等,无论存在什么其他因素,在所有图中都是如此。我知道关于scale_fill_manual()我可以在其中手动提供颜色值,然后使用drop = FALSE这有助于处理未使用的因子水平。然而,我发现这非常麻烦,因为每个图都需要一些手动工作来处理以正确的方式对因素进行排序、对颜色值进行排序以匹配因素排序、删除未使用的级别等。

我正在寻找一种可以绘制地图的方法一次且全局将水平因子分解为特定颜色(A = 绿色,B = 蓝色,C = 红色,...),然后继续绘制我喜欢的任何内容,然后 ggplot 选择正确的颜色。

这是一些代码来说明这一点。

# Full set with 4 categories
df1 <- data.frame(Value = c(40, 20, 10, 60), 
                  Type = c("A", "B", "C", "D"))

ggplot(df1, aes(x = Type, y = Value, fill = Type)) + geom_bar(stat = "identity")


# Colors change complete because only 3 factor levels are present
df2 <- data.frame(Value = c(40, 20, 60), 
                  Type = c("A", "B", "D"))

ggplot(df2, aes(x = Type, y = Value, fill = Type)) + geom_bar(stat = "identity")


# Colors change because factor is sorted differently
df3 <- data.frame(Value = c(40, 20, 10, 60), 
                  Type = c("A", "B", "C", "D"))
df3$Type <- factor(df3$Type, levels = c("D", "C", "B", "A"), ordered = TRUE)

ggplot(df3, aes(x = Type, y = Value, fill = Type)) + geom_bar(stat = "identity")

如果您愿意,您可以定义自己的自定义比例。如果你查看源代码scale_fill_manual,

scale_fill_manual
#> function (..., values) 
#> {
#>     manual_scale("fill", values, ...)
#> }
#> <environment: namespace:ggplot2>

其实很简单:

library(ggplot2)

scale_fill_chris <- function(...){
    ggplot2:::manual_scale(
        'fill', 
        values = setNames(c('green', 'blue', 'red', 'orange'), LETTERS[1:4]), 
        ...
    )
}

df1 <- data.frame(Value = c(40, 20, 10, 60), 
                  Type = c("A", "B", "C", "D"))

ggplot(df1, aes(x = Type, y = Value, fill = Type)) + 
    geom_col() + 
    scale_fill_chris()
df2 <- data.frame(Value = c(40, 20, 60), 
                  Type = c("A", "B", "D"))

ggplot(df2, aes(x = Type, y = Value, fill = Type)) + 
    geom_col() + 
    scale_fill_chris()
df3 <- data.frame(Value = c(40, 20, 10, 60), 
                  Type = c("A", "B", "C", "D"))
df3$Type <- factor(df3$Type, levels = c("D", "C", "B", "A"), ordered = TRUE)

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

ggplot2:修复因子水平的颜色 的相关文章

  • 从 data.frame 在 ggplot 图例中添加信息

    我想在图例中添加信息 哪个传感器具有该值 这是我的代码 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor 7 sensor 8
  • 在包加载之前如何知道 R 中特定函数属于哪个包?

    例如 我知道许多流行的功能 例如tbl df 我通常不记得它属于哪个包 即data table or dplyr 所以我必须始终记住并加载一个包 但我做不到 tbl df除非我加载了正确的包 在 R 控制台本身加载或安装包之前 有没有办法知
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • case_when 与部分字符串匹配和 contains()

    我正在使用一个数据集 其中有许多名为 status1 status2 等的列 在这些列中 它表示某人是否豁免 完整 注册等 不幸的是 豁免投入并不一致 这是一个示例 library dplyr problem lt tibble perso
  • 如何从 pdf C# 中获取具有特定颜色的文本

    我必须将 pdf 文件中的数据放入特定的数据库结构中 这要求我能够从 pdf 文件中获取某些数据 由于 pdf 没有任何标签等 我想知道是否可以根据颜色获取文本 比如说我想要所有的红色文本 或者我想要文档中的所有斜体文本 这在 C 中可能吗
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 如何在Rstudio中快速给几个单词加上引号?

    如何将 MI ID FL 转换为 MI ID FL 而无需键入每个双引号 Hmisc 包有一个函数 Cs 它将评估逗号分隔的文本是否带有引号 Cs MI ID FL becomes MI ID FL
  • ggplot 中的 ggsave() for python 不保存

    我已将 ggplot 导入到 python 中 并运行以下脚本 希望 ggsave 实际上将我的绘图保存在某处 但它似乎实际上并未将任何内容写入 png 文件以供以后使用 当我在解释器中将其作为 p 返回时 该图就会返回 但我必须手动保存它
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 我如何查看 quantmod 包中所有可用的数据系列?

    如何显示可用的所有报价 数据系列的列表 例如使用雅虎的 getSymbols 我不知道有什么办法 TTR包有一个功能 stockSymbols 下载 NYSE AMEX 和 NASDAQ 的所有当前代码 它试图将它们采用雅虎可接受的格式 但
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • 获取包含矩阵行内最大值的列名称,该矩阵在数组内包含单独的最大值

    例如给出 dim1 lt c P PO C T dim2 lt c LL RR R Y dim3 lt c Jerry1 Jerry2 Jerry3 Q lt array 1 48 c 4 4 3 dimnames list dim1 di
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 将整个包传递给雪簇

    我正在尝试并行化 使用snow parLapply 一些依赖于包 即除snow 调用函数中引用的对象parLapply必须使用显式传递给集群clusterExport 有没有办法将整个包传递到集群 而不必显式命名每个函数 包括用户函数调用的
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • 如何在R中实现countifs函数(excel)

    我有一个包含 100000 行数据的数据集 我尝试做一些countifExcel 中的操作 但速度慢得惊人 所以我想知道R中是否可以完成这种操作 基本上 我想根据多个条件进行计数 例如 我可以指望职业和性别 row sex occupati

随机推荐

  • 通过PowerShell创建PEM文件

    我正在尝试编写一个脚本来在 powershell 中创建 PEM 证书文件 我不确定我所做的是否完全错误 但是当我尝试在 socat OPENSSL 中使用 PEM 文件时 它返回了错误 socat OPENSSL LISTEN 1337
  • iPad 上的 iOS (Safari) 中 Web SQL DB 的最大大小是多少?本地存储怎么样?

    使用HTML5的Web SQL在iPad本地存储数据时最大数据大小是多少 当你达到这个值时 它是否只是提示用户增加它 这是一个简单的是 否许可请求吗 如果是这样 硬限制是什么 超出该限制 用户甚至没有允许其扩展的选项 LocalStorag
  • 如何使用 Java 8 中的 LocalDateTime 计算两个日期之间的时间差?

    给出了很多答案 但我无法找到与我的情况兼容的答案 我还需要找出 8 小时的时间差异以及日期更改 例如 如果时间大于 8 小时 则不要执行某些操作 我们有没有什么方法可以达到同样的效果LocalDateTime在 Java 8 中 我尝试使用
  • 逻辑回归的搜索/预测时间复杂度是多少?

    我正在研究机器学习算法的时间复杂度 但我找不到预测新输入的逻辑回归的时间复杂度是多少 我读过 分类是 O c d c 类的数量 d 维度的数量 我知道对于线性回归 搜索 预测时间复杂度是 O d 您能否解释一下逻辑回归的搜索 预测时间复杂度
  • 将 Swagger JSON 转换为 RAML/YAML

    如何将 Swagger JSON 转换为 RAML YAML 并验证它 我不是在寻找一种编程方式 只是一次性转换 步骤如下 将 Swagger JSON 导出到驱动器上的文件中 此 JSON 应发布在您的服务器上的以下 URI swagge
  • 如何在多部分post请求中传递参数

    Servlet 代码 request getparameter fname I can t able to get value HTML代码 h3 File Upload h3 Select a file to upload br
  • 动态向 Neo4j 添加属性

    如何动态添加新属性到现有节点 在这里 我想将键和值动态分配给我的 chypher 查询 任何建议将不胜感激 您可以创建一个包含键值对的映射 并使用以下命令添加键值对 SET 示例1 添加属性 将删除其他属性 WITH name Kenny
  • ASP.NET MVC - 如果您不想将 .js 文件存储在 /Scripts 中,您将它们放在哪里?

    我有许多 js 文件 我希望将它们存储在与其视图相同的目录中 它们特定于视图 它只是为了将 javascript 与视图的 HTML 分开 但是 将它们添加到 Views ControllerName 目录不起作用 因为当向网络服务器发出
  • 使用 tkinter 调整大小的可滚动画布

    这是我的一个非常简单的 GUI 的代码 from Tkinter import class my gui Frame def init self main tk object self root Tk init Frame Frame in
  • OCaml 中的多态性 - 特别、参数、包含/子类型

    我在理解不同类型的多态性时遇到问题 特别是关于 OCaml 的多态性 我知道多态性允许 OCaml 中表示为 a 的多种类型 但我不明白不同类型的多态性是什么 如果有人能用相对低级的语言给我解释那就太棒了 临时 参数 包含 子类型 这是一个
  • 从 chrome devtools 扩展将调试器附加到工作线程

    我试图在我的 chrome devtools 扩展中拦截 ws 消息 这个问题 https stackoverflow com questions 31181651 inspecting websocket frames in an und
  • 在远程机器上加载数据INFILE

    如何使用本地文件在远程数据库 不同的机器 上执行以下命令 MYSQL PATH mysql u root h remote net files e LOAD DATA INFILE 1 INTO TABLE TABLE NAME FIELD
  • 将 HttpModule .Net 类库移植到 .Net Core Web API

    我正在将项目从 net Web 应用程序迁移到 Net core Web API 我正在 IIS 集成模式下使用 HTTP 模块 它是 net 框架类库 因此 考虑按原样移植到我的新核心应用程序 我将 web config 粘贴到我的新核心
  • 如何从 PHP 生成包含多个工作表的 Excel 文档?

    我想从 PHP 生成 MS Excel 文件 我知道人们可以做这样的事情 header Content type application vnd ms excel header Content Disposition attachment
  • Python 从网站上抓取 fb 评论

    我一直在尝试使用以下网站页面上的 Beautiful Soup 来抓取 Facebook 评论 import BeautifulSoup import urllib2 import re url http techcrunch com 20
  • 如何垂直拉伸 GridView 的单元格?

    我有这个网格视图
  • 使 HTML 正文背景图像透明

    我试图使我的背景图像透明 而页面的其余部分不透明 例如 在未褪色的 HTML 和 CSS 之上的褪色的背景图像 我有一个 HTML 页面 使用 div 将图像作为背景 以下是该页面的简化版本
  • Eclipse - 如何在不单击/更改主视图的情况下知道我正在哪个工作区工作

    目前在一个项目的 4 个不同分支上工作 对于每个分支 Eclipse 中都有一个不同的工作区 问题是 当我在不同的工作空间上打开多个 Eclipse 时 我很难区分它们并了解当前正在查看的工作空间 路径相同 因此所有分支上的窗口名称相同 我
  • 在MYSQL中复制表而不一次复制一行

    我想复制一个非常大的表 但我不想逐行复制它 有办法复制吗 例如 您可以 TRUNCATE 不删除行 行 所以我想知道是否有类似的东西可以复制整个表 更新 逐行插入非常痛苦 因为有 120M 行 无论如何要避免这种情况 MySQL 不再具有可
  • ggplot2:修复因子水平的颜色

    我正在开发一个更大的项目 我正在 ggplot2 中创建多个绘图 这些图涉及在几个不同的谨慎类别 例如 国家 物种 类型 中绘制几种不同的结果 我想完全修复离散类型到颜色的映射 以便 Type A 始终显示为红色 Type B 始终显示为蓝