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

使用含不完整x值的pandas dataframe创建堆叠条形图并自定义x轴刻度

方案1:pandas快速补全缺失位置为0(推荐)

你的初始思路是对的,补0是最稳妥易维护的方案,pandas有非常简便的方法实现补全,不需要手动处理,支持多列value的场景:

import pandas as pd

# 示例原始数据,替换为你自己的df即可
df = pd.DataFrame({
    "Position": [3001, 3003, 3007],
    "value1": [1, 4, 10],
    "value2": [2, 1, 3] # 对应你实际的第二组堆叠数值
})

# 1. 定义你需要覆盖的全区间范围:3000到3050(包含两端)
full_position_range = range(3000, 3051)
# 2. 将Position设为索引后重排索引,缺失值统一填0,最后重置索引恢复Position列
df_full = df.set_index("Position").reindex(full_position_range, fill_value=0).reset_index()

执行后得到的df_full就是你需要的补全后格式,所有缺失位置的value1、value2都会自动填0。

方案2:直接绘制堆叠条形图(无需提前补0,不推荐)

本质是绘图时手动补0,逻辑和方案1一致,但代码更繁琐,容易出错:

import matplotlib.pyplot as plt
import numpy as np

full_position_range = range(3000, 3051)
x = np.arange(len(full_position_range))
# 初始化两个全0数组,对应两个value列
val1 = np.zeros(len(full_position_range))
val2 = np.zeros(len(full_position_range))

# 给存在的位置赋值
for _, row in df.iterrows():
    idx = row["Position"] - 3000
    val1[idx] = row["value1"]
    val2[idx] = row["value2"]

# 绘制堆叠图
plt.bar(x, val1, label="value1")
plt.bar(x, val2, bottom=val1, label="value2")
plt.legend()
plt.show()

X轴替换为自定义基因组标签的方法

你提前准备好和full_position_range长度一致、顺序一一对应的基因组标签列表genome_labels(第一个元素对应3000位置的标签,第二个对应3001,以此类推),绘图后添加以下代码即可替换刻度:

# 替换x轴刻度,标签过长可以加rotation=90参数旋转90度
plt.xticks(ticks=x, labels=genome_labels)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:00:04