如何在geom_contour_filled()中自动匹配层级设置渐变配色?
自动适配geom_contour_filled层级的渐变配色方案
问题背景
想修改geom_contour_filled()的颜色渐变,让配色自动匹配它生成的层级数量,无需手动指定颜色个数。默认代码使用viridis配色(深蓝到黄色):
v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) v + geom_contour_filled()
尝试过的无效方法
以下几种修改方式均无法实现需求:
- 方式1:
v + geom_contour_filled() + scale_fill_binned(type = colorRampPalette(c("grey20", "orange")))
- 方式2:
v + geom_contour_filled() + scale_fill_steps(low = "grey20", high = "orange")
- 方式3:
v + geom_contour_filled() + scale_fill_stepsn(colors = colorRampPalette(c("grey20", "orange"))(8))
可行但不便的方法
以下方法有效,但需要手动指定颜色数量,灵活性不足:
v + geom_contour_filled() + scale_fill_discrete(type = colorRampPalette(c("grey20", "orange"))(8))
最优解决方案
方案1:自动适配的渐变调色板
利用scales::gradient_n_pal创建渐变调色板,它会自动根据geom_contour_filled()生成的层级数量匹配颜色个数,无需手动指定数字:
library(scales) v + geom_contour_filled() + scale_fill_discrete(type = gradient_n_pal(c("grey20", "orange")))
方案2:动态获取层级数生成配色
先提取轮廓数据中的层级数量,再生成对应数量的渐变颜色:
# 动态获取轮廓层级数量 contour_level_count <- length(unique(ggplot_build(v + geom_contour_filled())$data[[1]]$level)) # 应用对应数量的渐变配色 v + geom_contour_filled() + scale_fill_discrete(type = colorRampPalette(c("grey20", "orange"))(contour_level_count))
内容的提问来源于stack exchange,提问作者Dan B
相关产品推荐
相关产品推荐

