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

