ggplot2中scale_fill_continuous函数失效问题求助
解决ggplot2中scale_fill_continuous不生效的问题
嘿,我来帮你搞定这个scale_fill_continuous没生效的问题!
问题原因
你当前的代码里,把fill映射到了原始的x.1变量,但geom_histogram是先将数据分箱(bin)再绘制的——每个直方图的柱子对应一组数据点,这时候ggplot没办法直接把原始连续变量的渐变颜色对应到每个分箱柱子上,所以渐变填充没生效,只能显示默认的黑灰色。
解决方案
把fill的映射改成after_stat(x),这样就能基于分箱后的x轴数值来应用渐变填充了。after_stat()函数可以让我们访问到geom_histogram内部计算出的统计值(这里的x就是分箱的中心值)。
修改后的完整代码
# 生成数据 df_1 <- data.frame( x = replicate( n = 2, expr = rnorm(n = 3000, mean = 100, sd = 10) ), y = sample(x = 1:3, size = 3000, replace = TRUE) ) # 绘图代码 library(tidyverse) ggplot(data = df_1, mapping = aes(x = x.1, fill = after_stat(x))) + geom_histogram(color = 'black', bins = 100) + scale_fill_continuous(low = 'blue', high = 'red') + theme_dark()
额外说明
- 如果想让渐变的基准更贴合分箱的范围,也可以用
after_stat(mid)(分箱的中点值),效果和after_stat(x)几乎一致; - 你还可以通过
scale_fill_gradient()来更灵活地调整渐变颜色,比如设置中点颜色:scale_fill_gradient(low = "blue", mid = "white", high = "red", midpoint = 100)。
内容的提问来源于stack exchange,提问作者neves
相关产品推荐
相关产品推荐

