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

为何无法生成自定义阈值的发散条形图?

解决方案

要实现可指定阈值的发散条形图,核心是将原始数值转换为相对于阈值的偏移量,让阈值成为条形的基准点(而非从0开始绘制),以下是修改后的完整代码及说明:

数据预处理

library(tidyverse)

# 自定义阈值,可根据需求修改
threshold <- 1

# 处理数据:计算偏移量并定义颜色
genes_plot2 <- genes_plot %>%
  dplyr::group_by(gen, RQ_avg) %>%
  nest() %>%
  dplyr::mutate(
    y_offset = RQ_avg - threshold,  # 计算相对于阈值的偏移值
    Color = ifelse(y_offset > 0, "green", "red")  # 根据偏移方向分配颜色
  )

绘制发散条形图

ggplot(data = genes_plot2,
       aes(x = reorder(gen, RQ_avg), y = y_offset, 
           fill = Color)) +
  geom_col(stat = "identity") +
  # 添加阈值基准线,清晰区分正负区间
  geom_hline(yintercept = 0, color = "black", linetype = "solid") +
  scale_fill_manual(values = c("green" = "green", "red" = "red"), guide = "none") +
  # 调整Y轴刻度,显示原始的Fold change值
  scale_y_continuous(
    breaks = seq(min(genes_plot2$y_offset), max(genes_plot2$y_offset), by = 0.5),
    labels = function(x) x + threshold
  ) +
  labs(
    x = "Gene", 
    y = "Fold change value",
    title = "Gene expression",
    subtitle = "Relative quantification"
  ) +
  theme_minimal() +
  # 横向翻转坐标轴,适配55个基因的长名称显示(可选)
  coord_flip()

关键说明

  • 偏移量计算:y_offset = RQ_avg - threshold 将原始数值转换为以阈值为中心的偏移量,使阈值对应Y轴0点,大于阈值的条形向上延伸,小于的向下延伸。
  • 基准线:geom_hline 绘制阈值对应的水平线,强化发散效果的视觉区分。
  • 坐标轴转换:通过scale_y_continuous的labels参数,将偏移量转换回原始的RQ_avg数值,保证坐标轴显示的是实际生物学意义上的折叠变化值。
  • 横向条形:coord_flip() 适合多类别(55个基因)的显示,避免X轴标签重叠,可根据需求移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:20:33