You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2柱状图求助:实现填充100-value区域的反向柱状图

解决方案:实现柱状图“fill 100 - value”效果

我猜你想要的是基于100 - number来定制柱状图的填充效果(不管是柱子高度还是填充颜色,下面给你两种常见场景的实现方案):


场景1:柱子高度为100 - number

如果你的需求是让每个柱子的高度等于100 - number,不用提前修改数据框,直接在aes()里计算即可:

library(ggplot2)
df <- data.frame(group = c("Thriller", "Horror", "Action"), number = c(60, 50, 90))
ggplot(df, aes(group, 100 - number)) + 
  geom_col() +
  labs(y = "100 - number") # 给y轴设置合适的标签

这样每个柱子的高度就对应100 - number的结果:Thriller是40,Horror是50,Action是10。


场景2:填充颜色映射到100 - number

如果想保持柱子高度为原number值,但让填充颜色根据100 - number变化,需要把这个计算式放到aes()的fill参数里做映射:

library(ggplot2)
df <- data.frame(group = c("Thriller", "Horror", "Action"), number = c(60, 50, 90))
ggplot(df, aes(group, number, fill = 100 - number)) + 
  geom_col() +
  labs(fill = "100 - number") # 给颜色图例设置说明标签

要是想自定义颜色渐变效果,可以加上scale_fill_gradient()调整,比如:

ggplot(df, aes(group, number, fill = 100 - number)) + 
  geom_col() +
  scale_fill_gradient(low = "#66ccff", high = "#ff6666") +
  labs(fill = "100 - number")

你之前用fill参数没得到预期结果,大概率是没把100 - number放在aes()内部做映射——如果直接在geom_col()里写fill = 100 - number(没包在aes里),只会给所有柱子设置单一颜色,而不是根据数值动态变化哦。

内容的提问来源于stack exchange,提问作者Maya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:17:47