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

如何在Python中绘制展示基因突变数据的发散条形图?

基因突变发散条形图实现思路

1. 修正并生成模拟数据集

你提供的示例代码存在语法错误且仅生成单个样本,先修正并生成批量模拟数据:

import random
import pandas as pd

# 生成1000个模拟突变样本
data = []
for _ in range(1000):
    position = random.randint(1, 250)
    pathogenicity = random.choice([-1, 1])
    data.append({"position": position, "pathogenicity": pathogenicity})

df = pd.DataFrame(data)

2. 数据聚合:统计各位置的突变次数

按基因位置和突变类型分组,统计每个位置的致病性/非致病性突变数量,整理成绘图所需格式:

# 分组统计每个位置的两类突变次数
count_df = df.groupby(["position", "pathogenicity"]).size().unstack(fill_value=0)
# 重命名列便于识别
count_df.columns = ["致病性突变", "非致病性突变"]
count_df = count_df.reset_index()

3. 绘制发散条形图

使用matplotlib实现核心效果:将致病性突变的计数设为负数(实现条形向下延伸),非致病性保持正数(向上延伸):

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))

# 绘制致病性突变条形(向下)
plt.bar(count_df["position"], -count_df["致病性突变"], color="#dc3545", label="致病性突变")
# 绘制非致病性突变条形(向上)
plt.bar(count_df["position"], count_df["非致病性突变"], color="#28a745", label="非致病性突变")

# 配置图表样式
plt.xlabel("基因位置")
plt.ylabel("突变计数")
plt.title("基因位置突变分布")
plt.xlim(0, 251)  # 适配1-250的位置范围
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.6)

plt.show()

核心逻辑说明

  • 条形方向控制:通过给致病性突变的计数添加负号,让其条形向下延伸,与非致病性突变形成发散布局
  • 数据聚合必要性:必须先统计每个位置的两类突变次数,才能让条形高度准确反映对应位置的突变数量
  • 样式自定义:可根据需求调整颜色、图表尺寸、网格样式等,匹配目标视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:37:23