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

使用ggplot2绘制带颜色缩放的堆叠条形图的方法

解决方案

要实现需求中的堆叠条形图,核心是先根据Category调整对应颜色,再用ggplot2完成绘图,以下是具体步骤:

1. 准备环境与处理颜色

首先我们需要对hypo.类别的颜色进行浅化处理,这里可以借助colorspace包的lighten()函数快速实现,也可以用基础R方法手动调整:

方法一:使用colorspace包(更直观)

# 安装并加载所需包
install.packages("colorspace")
library(ggplot2)
library(colorspace)

# 注意原数据中"hypo."前有空格,需准确匹配;也可先清理空格:toy.df$Category <- trimws(toy.df$Category)
toy.df$fill_color <- ifelse(toy.df$Category == " hypo.",
                           lighten(toy.df$Color, amount = 0.5), # 浅化50%,可调整amount(0-1之间,数值越大颜色越浅)
                           toy.df$Color)

方法二:基础R实现(无需额外包)

如果不想安装新包,可自定义函数调整颜色亮度:

library(ggplot2)

# 自定义颜色浅化函数
lighten_color <- function(color, amount = 0.5) {
  rgb_vals <- col2rgb(color) / 255
  rgb_vals <- rgb_vals + (1 - rgb_vals) * amount
  rgb(rgb_vals[1], rgb_vals[2], rgb_vals[3])
}

# 生成最终填充色列
toy.df$fill_color <- ifelse(toy.df$Category == " hypo.",
                           lighten_color(toy.df$Color, 0.5),
                           toy.df$Color)

2. 绘制堆叠条形图

用处理好的颜色列指定填充色,完成堆叠条形图绘制:

ggplot(toy.df, aes(x = cluster, y = num, fill = interaction(cluster, Category))) +
  geom_col(position = "stack") +
  # 指定自定义颜色,同时调整图例标签与名称
  scale_fill_manual(values = toy.df$fill_color,
                    labels = toy.df$Category,
                    name = "Category") +
  labs(x = "Cluster", y = "Number") +
  theme_minimal()

关键说明

  • 用interaction(cluster, Category)作为填充映射,确保每个cluster的两个类别都能对应独立的颜色;
  • 若原数据中hypo.的空格是输入失误,建议先执行toy.df$Category <- trimws(toy.df$Category)清理空格,避免匹配错误;
  • 颜色浅化程度可通过amount参数调整,0为原颜色,1为纯白色。

内容的提问来源于stack exchange,提问作者say.ff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:25:15