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

如何在Pandas中绘制X轴为数值数轴而非分类的堆叠条形图

解决方案

问题原因

pandas内置的plot.bar方法默认会将x轴输入转换为离散分类变量,因此所有条形的间距是统一的,不会按照x的实际数值比例展示。

实现代码

直接使用matplotlib原生的bar方法手动堆叠绘制,即可保留x轴的数值比例特性:

import pandas as pd
import matplotlib.pyplot as plt

# 原有数据集
fid = ["name", "name", "name", "name", "name"]
x = [1.02, 1.3, 2, 5, 10.6]
y1 = [0, 1, 0.2, 0.6, 0.1]
y2 = [0.3, 0, 0.1, 0.1, 0.4]
y3 = [0.7, 0, 0.7, 0.3, 0.5]
df = pd.DataFrame(data=zip(fid, x, y1, y2, y3), columns=["fid", "x", "y1", "y2", "y3"])

fig, ax = plt.subplots()
# 可根据x轴数值分布调整条形宽度,避免重叠
bar_width = 0.2

# 逐层绘制堆叠条形
ax.bar(df['x'], df['y1'], width=bar_width, label='y1')
ax.bar(df['x'], df['y2'], bottom=df['y1'], width=bar_width, label='y2')
ax.bar(df['x'], df['y3'], bottom=df['y1'] + df['y2'], width=bar_width, label='y3')

# 设置x轴固定刻度间隔,按需调整范围和步长即可
ax.set_xticks(range(0, 12, 2))
# 可选添加y轴网格提升可读性
ax.grid(axis='y', alpha=0.3)

plt.legend(bbox_to_anchor=(1.05, 1), loc=2)
plt.show()

可选优化

如果你的实际数据集x轴密度较高,更推荐使用堆叠面积图实现,展示效果更顺滑:
只需要将堆叠条形的绘制代码替换为:

ax.stackplot(df['x'], df['y1'], df['y2'], df['y3'], labels=['y1','y2','y3'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:54:02