r - 如何在 R 中沿 ggplot 的轴添加自定义着色器?
问题描述
我想在 R 中沿 ggplot 热图的轴创建一个附加条。例如,如果我有一个如下所示的数据框:
df <- data.frame(
a = c(1,1,1,2,2,2,3,3,3),
b = c(1,2,3,1,2,3,1,2,3),
y = c(-10, 3, 5, -2, 9, 1, -5, -2, 0)
)
df[c('a', 'b')] <- Map(paste0, c('a', 'b'), df[c('a', 'b')])
df
a b y
a1 b1 -10
a1 b2 3
a1 b3 5
a2 b1 -2
a2 b2 9
a2 b3 1
a3 b1 -5
a3 b2 -2
a3 b3 0
我创建了一个像这样的热图:
gp <- ggplot(dfTest, aes(a, b)) +
geom_tile(aes(fill = y))
gp
但我想在代表其他值的轴周围添加一个彩色条,例如z
:
z <- c(2, 4, 1, 7, 9, 3)
其中,in 中的每个条目z
将代表df
... 中的每个条目,即:
a1 = 2, a2 = 4, a3 = 1 ... b1 = 7, b2 = 9, b3 = 3
我正在考虑在此处annotate
找到的示例中使用 like ...但我似乎无法让它为我工作...有什么建议吗?
解决方案
这个解决方案并不完全存在,但可能会让你接近。
- 我认为您会希望
ggnewscale
在一个图中使用两种不同的填充比例。 - 获得边缘填充可能有更好的功能——我手动将它们放在那里,但 y 轴没有完全对齐。
- 我不确定确保两个边缘图使用相同比例的最佳方法。
一、数据:
df <- data.frame(
a = paste0("a", c(1,1,1,2,2,2,3,3,3)),
b = paste0("b", c(1,2,3,1,2,3,1,2,3)),
c = c(-10, 3, 5, -2, 9, 1, -5, -2, 0)
)
z <- c(2, 4, 1, 7, 9, 3)
然后在这里我们像你一样绘制瓷砖,然后使用ggnewscale::new_scale_fill
为边缘地块启动一个新的比例。
library(tidyverse)
library(ggnewscale)
ggplot(df) +
geom_tile(aes(a, b, fill = c)) +
scale_fill_continuous(guide = guide_legend(order = 1)) +
# everything after this will have new scale for fill
new_scale_fill() +
geom_tile(data = tibble(a = paste0("a", 1:3),
d = z[1:3]),
aes(x = a, y = 0.5, fill = d, height = 0.1)) +
geom_tile(data = tibble(b = paste0("b", 1:3),
d = z[4:6]),
aes(x = 0.45, y = b, fill = d, width = 0.1)) +
scale_fill_viridis_c(option = "D",
guide = guide_legend(order = 2))
推荐阅读
- bash - 对最接近给定数字的数字进行排序
- python - 在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?
- java - 如何在代理后面构建java链码
- javascript - Vue 计算功能不会针对语法错误进行编译
- python - 如何让多个小部件按钮在 Jupyter Notebook 中执行不同的操作?
- javascript - 如何在javascript中拦截“in”运算符?
- java - 错误:类 LineData 中的构造函数 LineData 不能应用于给定类型;
- java - JNI 错误 - 使用 CallVoidMethod 时无法调用 [method]
- c# - 如何从 Blazor 页面访问 env.IsDevelopment()?
- ruby-on-rails - 尝试在heroku上部署rails应用程序时出错