如何在 r 中为 ggplot 自定义调色板?

2023-11-25

我使用此代码绘制北美温度变化地图:

ggplot(maps, aes(y=Latitude, x=Longitude, z=variable)) +
  ggtitle(title)+
  scale_fill_brewer(palette = "Spectral")+
  geom_contour_filled(breaks = c(-Inf,-2., -1.5, -1., -0.5, 0, 0.5, 1, 1.5, 2, 3, 4, 5, 7, 9, 11,Inf))+
  xlim(-146,-44)+
  ylim(35,90)+
  theme(plot.title = element_text(hjust = 0.5))

我想更改调色板以获得更好的可视化效果。目前,它写道scale_fill_brewer(palette = "Spectral"),我要把它改成自定义调色板

colors <- c(rgb(10,40,100,max=255),rgb(51,102,217,max=255),rgb(105,138,236,max=255),rgb(151,180,250,max=255),rgb(204,217,255,max=255),rgb(255,245,204,max=255),rgb(255,224,153,max=255),rgb(255,203,102,max=255),rgb(255,180,51,max=255),rgb(255,140,51,max=255),rgb(255,85,0,max=255),rgb(230,40,30,max=255),rgb(191,0,0,max=255),rgb(140,0,0,max=255),rgb(108,0,0,max=255),rgb(110,0,70,max=255))

Using scale_fill_brewer(palette = colors)将以错误结束,我也尝试过palette(colors),而且它也不起作用。

如何自定义参数可以识别的调色板?


如果我正确理解你的问题,你想创建一个自定义scale_...功能。简而言之,这是对源代码的深入研究。

我将展示一种方法,该方法只需修改包 RColorBrewer、scales,当然还有 ggplot2 中的现有函数。

  1. 核心是修改RcolorBrewer::brewer.pal,我想这基本上就是你想要的。看到代码,它会根据您的“n”从颜色列表中选择正确的颜色。这就是你需要手动创建的。我刚刚复制了调色板“YlOrBr”中的颜色。需要考虑的事情:Brewer 调色板不是随机的,它们已经过测试和创建,可以识别打印、复印和色盲,所以我不确定创建自己的调色板是否非常聪明。看一下https://colorbrewer2.org/找到合适的调色板。
  2. 修改底层颜色选择器scales:::brewer_pal
  3. 修改scale_fill/scale_color功能

我已将功能归结为核心,因此它们不会进行通常的检查,并且灵活性较差。您可以修改原始功能以恢复此功能。

library(ggplot2)

mybrewerpal <- function(n, name) {# modified RcolorBrewer::brewer.pal
## the first call to switch would not be necessary in this example,
## but I leave it in order to make the underlying structure in brewer.pal clearer
  switch(name, mypal = switch(n - 2, rgb(c(255, 254, 217), c(247, 196, 95), c(188, 79, 14), maxColorValue = 255),
    rgb(c(255, 254, 254, 204), c(255, 217, 153, 76), c(212, 142, 41, 2), maxColorValue = 255),
    rgb(c(255, 254, 254, 217, 153), c(255, 217, 153, 95, 52), c(212, 142, 41, 14, 4), maxColorValue = 255),
    rgb(c(255, 254, 254, 254, 217, 153), c(255, 227, 196, 153, 95, 52), c(212, 145, 79, 41, 14, 4), maxColorValue = 255),
    rgb(c(255, 254, 254, 254, 236, 204, 140), c(255, 227, 196, 153, 112, 76, 45), c(212, 145, 79, 41, 20, 2, 4), maxColorValue = 255),
    rgb(c(255, 255, 254, 254, 254, 236, 204, 140), c(255, 247, 227, 196, 153, 112, 76, 45), c(229, 188, 145, 79, 41, 20, 2, 4), maxColorValue = 255),
    rgb(c(255, 255, 254, 254, 254, 236, 204, 153, 102), c(255, 247, 227, 196, 153, 112, 76, 52, 37), c(229, 188, 145, 79, 41, 20, 2, 4, 6), maxColorValue = 255)
  ))
}

brewer_pal2 <- # modified from scales:::brewer_pal
  function() { # stripped down all arguments, just to show the core
    function(n) {
      mybrewerpal(n, "mypal") ##modified, usually this is selected by a function 
      ## with type and name as arguments, selecting a palette from a list called scales:::brewer
    }
  }

scale_fill_custom <- ### modified from scale_fill_brewer, removed some arguments
  function (..., aesthetics = "fill") {
    discrete_scale(aesthetics, "custom", brewer_pal2(), ...) ## give a new name to the
    ## scale, it will create a new Scale object.  
  }

p <- 
  ggplot(mtcars, aes(x = mpg, y = disp)) +
  scale_fill_custom()

p + geom_point(shape = 21, aes(fill = as.factor(cyl))) 

p + geom_point(shape = 21, aes(fill = as.factor(carb))) 

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

如何在 r 中为 ggplot 自定义调色板? 的相关文章

  • R 中 SVG 图形的最佳设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 R 导出 SVG 图形 似乎有两种选择 RSvgDevice 和 Cairo 有人可以对这些包发表评论吗 是默认的还是明显比另一个
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • rvest 函数 html_nodes 返回 {xml_nodeset (0)}

    我正在尝试抓取以下网站的数据框 http stats nba com game 0041700404 playbyplay http stats nba com game 0041700404 playbyplay 我想创建一个表格 其中包
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 在 Google Colab 上的 R 笔记本中安装 python 库

    我正在尝试在 Google Colab 上的 R 笔记本中安装 python 库 为此我使用 reticulate 包 library reticulate py install pandas 但我得到的结果是这个错误 Error coul
  • 自定义轴缩放后 ggplot2 缺少标签

    我正在尝试使用我的 x 轴应用自定义缩放ggplot2 and scales trans new 但是 当我这样做时 一些轴标签丢失了 有人可以帮我弄清楚为什么吗 Setup library tidyverse the data ds lt
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 获取包含矩阵行内最大值的列名称,该矩阵在数组内包含单独的最大值

    例如给出 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
  • 是否有weighted.median()函数?

    我正在寻找类似形式的东西weighted mean 我通过搜索找到了一些解决方案 这些解决方案写出了整个函数 但希望有一些更用户友好的解决方案 以下软件包都有计算加权中位数的函数 aroma light isotone limma cwhm
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 如何使用plotmath更新ggplot图例标签

    我正在尝试更新ggplot要使用的图例标签plotmath但是 当我这样做时 它将之前组合的图例分成两部分 通过一个例子可能更容易理解 test data and the default plot gives the correct col
  • 斯皮尔曼相关性和联系

    我正在一小组配对排名上计算斯皮尔曼的 rho 斯皮尔曼因处理领带不当而闻名 例如 取2组8个排名 即使两组中有6个是平局 相关性仍然很高 gt cor test c 1 2 3 4 5 6 7 8 c 0 0 0 0 0 0 7 8 met
  • 如何根据多个条件创建列?

    我有一个数据框 我想根据多个条件创建一个列 v1 v2 v3 v4 v5 4 1 2 4 5 5 5 2 4 5 6 21 9 20 30 50 6 4 5 7 9 10 3 6 5 9 基本上 使用以下可能的值创建 v6 Cat dog
  • R 中图周围的圆形边框

    我需要在情节周围放置平滑的边框 代码 plot 0 10 0 10 type n xlab X ylab Y box figure col blue 除了简单的蓝线 我如何放置带有圆角的平滑灰线 非常感谢 library grid plot
  • R 颜色 - 许多独特的颜色仍然很漂亮

    我很好奇你是否有一些关于 R 中颜色酿造的技巧 对于许多独特的颜色 在某种程度上图形仍然好看 我需要相当数量的独特颜色 至少 24 种 可能需要更多 50 种 用于堆叠区域图 所以不是热图 渐变颜色不起作用 我发现了 viridis 它的调
  • ggplot 的每个方面都有不同的 `geom_hline()`

    这个问题在这里已经有答案了 library tidyverse ggplot mpg aes cty hwy geom point facet grid year fl geom hline yintercept mean mpg hwy
  • 使用非标准评估公式

    我正在创建一个使用的包非标准评价 http adv r had co nz Computing on the language html跟踪列的含义 该包在函数之间传递数据框 这些函数执行同一组列的各种操作 非标准评估对此非常有用 my s
  • 上传到 Shiny 服务器后在 R 中解压文件

    我正在尝试在我们的本地服务器上使用 Shiny 来构建一个应用程序 允许用户上传包含 ESRI shapefile 和关联文件的 zip 文件 Shiny 服务器的 fileInput 可以获取数据 并且当它这样做时 它会将其存储在临时目录
  • 文件错误(文件,“rt”):complete.cases 程序中的“描述”参数无效

    我正在编写一个 R 函数 该函数读取充满文件的目录并报告每个数据文件中完全观察到的案例的数量 该函数返回一个数据框 其中第一列是文件名称 第二列是完整案例数 such as id nobs 1 108 2 345 etc 这是我写的函数 c
  • autoplot.microbenchmark 实际绘制了什么?

    根据文档 microbenchmark autoplot 使用 ggplot2 生成更清晰的微基准计时图 凉爽的 让我们尝试一下示例代码 library ggplot2 tm lt microbenchmark rchisq 100 0 r

随机推荐

  • 应用“自动”数字格式/数字格式重置

    是否可以通过 GAS 以编程方式应用 自动 数字格式 我的问题是 当我编写数字列时 表格似乎尝试应用适当的格式 但有时会出错 也就是说 特定的小整数 有时为 1 将被格式化为日期 范围被写在一个myRange setValues 方法 我看
  • List 保证插入顺序吗?

    假设列表中有 3 个字符串 例如 1 2 3 然后我想重新排序它们以将 2 放置在位置 1 例如 2 1 3 我正在使用这段代码 将indexToMoveTo设置为1 listInstance Remove itemToMove listI
  • Flask(带有 Flask-RESTful)不解析 JSON 有效负载

    I m creating a frontend in Angular and the backend in Flask with the RESTful extension By default Angular likes to send
  • 如何在 Oracle PL/SQL where 子句中使用变量

    我似乎无法让变量在 Oracle PL SQL where 子句中工作 我有 Microsoft SQL Server 背景 这很容易 例如 执行类似以下操作所需的所有步骤是什么 declare var int set var 1 sele
  • 尝试理解/确定基本的 Git 工作流程

    我一直在读这个流行文件一遍又一遍地尝试起草我自己的 git 工作流程 我想我已经明白了 但我还是有点失落 这是我目前的理解 我们有两个分支机构将始终保持活跃 Master 这是我将推送实际部署到我的生产服务器并由我的用户使用的代码的地方 开
  • 从父目录导入脚本

    如何导入位于父目录中的模块 python 文件 两个目录都有一个 init py文件 但我仍然无法从父目录导入文件 在此文件夹布局中 脚本 B 尝试导入脚本 A Folder A init py Script A Folder B init
  • 使用javascript上下滚动iframe

    是否可以使用按键或 JavaScript 从父窗口滚动 iframe 窗口 iframe 内容来自另一个域 与父窗口不同 由于 iframe 内容来自另一个域 因此出于安全原因您将无法更改它的 DOM 尽管您可以使用箭头键滚动它 但当您激活
  • 如何在Eclipse中查看Javadoc?

    我正在使用第三方库 我已将其包含到我的项目中 它包含应用程序的类 但没有源代码或 Javadoc 正如预期的那样 将鼠标悬停在导入的对象上不会显示 javadoc Note This element neither has attached
  • Android .aidl 中的单向声明是否保证该方法将在单独的线程中调用?

    我正在为 Android 手机设计一个客户端 服务器应用程序框架 我对 Java 和 Android 都很陌生 但对一般编程 特别是线程编程并不陌生 有时我的服务器和客户端将位于同一进程中 有时它们将位于不同的进程中 具体取决于具体的用例
  • 在基本构造函数中使用 lambda 表达式的极端情况

    在我们正在构建的框架中 我们需要以下模式 public class BaseRenderer Func
  • 通过 JavaScript 打开应用程序 (iOS/Android),并回退重定向到 App/Play 商店(2016 版)

    给定 网站 iOS 和 Android 应用程序 注册 urlscheme myapp 目标 在网站上显示一个指向已安装应用程序的 iOS Android 设备的链接 单击该链接应打开应用程序并调用特定逻辑 由应用程序处理 本质上类似于苹果
  • 将表单中的标签与输入旁边对齐

    我有非常基本且已知的表单场景 我需要正确对齐输入旁边的标签 但是我不知道该怎么做 我的目标是标签与右侧的输入旁边对齐 这是所需结果的图片示例 为了您的方便并澄清我现在所拥有的内容 我做了一个小提琴 http jsfiddle net WX5
  • Dispatcher.Invoke 之后应用程序冻结

    我的这个应用程序在调用任何控件的dispatcher invoke 时都会冻结 当我在单选按钮 网格 图像等中调用调度程序时 应用程序冻结但没有给出错误 请帮忙 谢谢 我调用线程 Method RunClient private void
  • Knockout 和 jQuery Mobile:将数据绑定到选择列表

    我在同一个项目中同时使用 Knockout 版本 2 0 和 jQuery Mobile 版本 1 0 1 问题在于将数据绑定到选择列表 jQuery Mobile 以看似选定的值和实际列表是单独元素的方式呈现选择列表 这是通过执行来修复的
  • 什么是索引单子?

    What is 索引单子这个单子的动机是什么 我读到它有助于跟踪副作用 但类型签名和文档并没有引导我到任何地方 有什么例子可以说明它如何帮助跟踪副作用 或任何其他有效的例子 一如既往 人们使用的术语并不完全一致 有各种受单子启发但严格来说并
  • Python 用函数的输出替换字符串模式

    我有一个Python字符串 比如说The quick red fox jumps over the lame brown dog 我正在尝试替换以 以及以单词作为参数的函数的输出 def my replace match return ma
  • 从另一个java类调用静态方法

    我最近从 PHP 工作转向 Java 工作并有一个查询 想要强调一下我是Java的初学者 本质上 我正在文件 A 具有 A 类 中工作 并且想要引用文件 B B 类 中保存的静态方法 使用 A 类时是否需要引用文件 B 我正在沿着PHP中的
  • 如何在 Windows 上取消 select() 中的等待

    在我的程序中 有一个线程 接收线程 负责从 TCP 套接字接收请求 并且有许多线程 工作线程 负责处理接收到的请求 处理请求后 我需要通过 TCP 发送答案 这是一个问题 我想在用于接收数据的同一个线程中发送 TCP 数据 该线程接收数据后
  • Windows 容器无法访问互联网,但 Linux 容器可以访问互联网 - VPN 客户端在主机上处于活动状态

    我的主机上安装了 Stonesoft VPN Client 和 Docker for Windows 我的 Windows 容器似乎无法解析任何主机 甚至是 www google com 然而我的 Linux 容器工作得很好 当我禁用网络适
  • 如何在 r 中为 ggplot 自定义调色板?

    我使用此代码绘制北美温度变化地图 ggplot maps aes y Latitude x Longitude z variable ggtitle title scale fill brewer palette Spectral geom