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

求助:制作按指定数据框值填充、其余为灰/黑的ggplot柱状图

解决方案

要实现你需要的柱状图(堆叠显示过滤后数值的彩色部分,剩余部分用灰色/黑色填充),可以按照以下步骤操作:

步骤1:合并并整理数据

首先将两个数据框合并,计算每个组蛋白标记的「剩余频数」(总频数 - 过滤后频数),并转换为ggplot适用的长格式:

library(dplyr)
library(tidyr)
library(ggplot2)

# 合并数据并计算剩余频数
combined_data <- table %>% 
  rename(total_freq = Freq) %>% 
  inner_join(table_filt %>% rename(filtered_freq = Freq), by = "Var1") %>% 
  mutate(remaining_freq = total_freq - filtered_freq) %>% 
  # 转换为长格式
  pivot_longer(
    cols = c(filtered_freq, remaining_freq),
    names_to = "freq_type",
    values_to = "freq"
  )

步骤2:定义颜色映射

为过滤后的部分分配你指定的颜色,剩余部分统一设置为灰色(或黑色,将#999999替换为#000000即可):

# 创建颜色映射规则:过滤部分用指定颜色,剩余部分用灰色
color_rules <- c(
  # 为每个组蛋白标记的过滤部分绑定对应颜色
  setNames(colours, paste(names(colours), "filtered_freq", sep = "_")),
  # 所有剩余部分统一灰色
  setNames(rep("#999999", length(colours)), paste(names(colours), "remaining_freq", sep = "_"))
)

步骤3:绘制堆叠柱状图

使用堆叠柱状图展示两部分数据,并应用颜色规则:

ggplot(combined_data, aes(x = Var1, y = freq, fill = interaction(Var1, freq_type))) +
  geom_col(position = "stack") +
  # 应用颜色映射,隐藏图例(不需要区分频数类型)
  scale_fill_manual(values = color_rules, guide = "none") +
  labs(x = "组蛋白修饰标记", y = "频数") +
  theme_bw()

替代简化方案(直接绑定颜色列)

如果觉得颜色映射太繁琐,可以在数据框中直接生成颜色列,再用scale_fill_identity()直接应用:

combined_data_simple <- table %>% 
  rename(total_freq = Freq) %>% 
  inner_join(table_filt %>% rename(filtered_freq = Freq), by = "Var1") %>% 
  mutate(remaining_freq = total_freq - filtered_freq) %>% 
  pivot_longer(
    cols = c(filtered_freq, remaining_freq),
    names_to = "freq_type",
    values_to = "freq"
  ) %>% 
  # 直接为每行分配颜色
  mutate(fill_color = ifelse(
    freq_type == "filtered_freq",
    colours[match(Var1, names(colours))],
    "#999999" # 剩余部分颜色,可改为黑色#000000
  ))

ggplot(combined_data_simple, aes(x = Var1, y = freq, fill = fill_color)) +
  geom_col(position = "stack") +
  scale_fill_identity() + # 直接使用数据中的颜色值
  labs(x = "组蛋白修饰标记", y = "频数") +
  theme_bw()

效果说明

最终生成的柱状图会和你参考的样式一致:每个柱子的彩色部分对应table_filt的数值,其余空白部分用灰色/黑色填充,同时保留你指定的组蛋白标记颜色规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:20:22