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
相关产品推荐
相关产品推荐

