r - 给定色标,查找特定值的十六进制颜色
问题描述
我正在为颜色编码而苦苦挣扎,希望你能提供帮助。这是我的问题。我有一个虚拟数据集:
df <- data.frame(x = 1:10, y = sample(1:100, 10, replace = FALSE, set.seed(2021)))
我首先想使用特定的色标绘制这些数据:
ggplot(data = df, aes(x = x, y = y, fill = y)) +
geom_point(shape = 21) +
scale_fill_continuous_divergingx(palette = "RdBu",
mid = 50,
rev = TRUE)
现在我想使用对应于 x = 6(即 y = 70)的颜色来绘制另一个图。鉴于某些限制,我不能只制作另一个具有相同比例的简单 ggplot 来执行此操作,而是需要“硬编码”该特定颜色的十六进制值,即#e99c8f。有没有办法做到这一点,这样我就可以在我的其他情节中使用 fill = "#e99c8f" ?
对于某些色标(例如 viridis),硬编码十六进制值很容易,但我还没有找到一种方法来处理这个,我需要它......:/
谢谢你的帮助!
解决方案
尝试使用该ggplot_build()
函数,以获取包含您的数据和所有图层的 data.frame,并查看它们映射到的颜色点(fill
列):
R> p <- ggplot(data = df, aes(x = x, y = y, fill = y)) +
+ geom_point(shape = 21) +
+ scale_fill_continuous_divergingx(palette = "RdBu",
+ mid = 50,
+ rev = TRUE)
R> x <- ggplot_build(p)
R> x$data
[[1]]
fill x y PANEL group shape colour size alpha stroke
1 #00578C 1 7 1 -1 21 black 1.5 NA 0.5
2 #CBDEEB 2 38 1 -1 21 black 1.5 NA 0.5
3 #ECF1F5 3 46 1 -1 21 black 1.5 NA 0.5
4 #F3D9D6 4 58 1 -1 21 black 1.5 NA 0.5
5 #0772AC 5 12 1 -1 21 black 1.5 NA 0.5
6 #E69C90 6 70 1 -1 21 black 1.5 NA 0.5
7 #EEBCB4 7 64 1 -1 21 black 1.5 NA 0.5
8 #611300 8 99 1 -1 21 black 1.5 NA 0.5
9 #E8A197 9 69 1 -1 21 black 1.5 NA 0.5
10 #4EA4CB 10 23 1 -1 21 black 1.5 NA 0.5
此外,scale_fill_continuous_divergingx()
在内部使用 RColorBrewer 的“RdBu”调色板,您可以通过以下方式查询十六进制颜色:
R> RColorBrewer::brewer.pal(11, "RdBu")
R> scales::show_col(RColorBrewer::brewer.pal(11, "RdBu"))
推荐阅读
- python - 在 python 中用一些值初始化列表时面临困难
- fortran - 在未格式化的直接访问中打开文件时,应在 recl 中使用什么?
- python - 无法使用 Python Selenium 点击 ahref 链接
- python - Python Web Scraping 无法提取数据并显示无
- python - 如何使两个数组连续,以便 Numba 可以加快 np.dot()
- three.js - 三个js对象遍历不更新child
- java - JPackage 更新“PATH”环境变量
- javascript - 无法快速返回流数据
- wordpress - 删除wordpress上图片网址中的日期?
- java - 参考队列始终为空