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

使用Matplotlib绘制多DataFrame条形图并排时重叠问题求解

如何用Matplotlib实现多个数据框的条形图并排展示?

我完全懂你的挫败感!之前我也查了一堆StackOverflow帖子,调align='edge'/align='center'参数、改宽度,结果条形图还是叠在一起,后来试了几种方法,发现Y.Luo分享的Pandas原生方法是最省心好用的,给你详细说下:

问题根源

你之前只调整样式参数,没解决核心问题:每个数据框的条形需要在x轴上占据不同的位置区间,只调align和宽度没法让它们错开。

最优解决方案(Pandas方法)

把三个数据框按行索引对齐合并,直接用Pandas的plot.bar(),它会自动帮你处理并排逻辑,不需要手动计算位置:

import pandas as pd
import matplotlib.pyplot as plt

# 确保df1、df2、df3有相同的行索引(比如都是分类标签)
combined_df = pd.concat([df1, df2, df3], axis=1)

# 绘制并排条形图
ax = combined_df.plot(kind='bar', figsize=(12, 7), width=0.8)
ax.set_title('三个数据框的并排条形图', fontsize=14)
ax.set_xlabel('分类标签', fontsize=12)
ax.set_ylabel('数值', fontsize=12)
ax.legend(['df1数据', 'df2数据', 'df3数据'], fontsize=10)
plt.xticks(rotation=45)  # 如果标签太长可以旋转
plt.tight_layout()
plt.show()

这种方法的好处是:Pandas会自动给每列分配对应的条形位置,完美避免重叠,代码也最简洁。

备选方案(手动用Matplotlib控制)

如果需要更定制化的样式,可以手动计算每个条形的x轴偏移量:

import matplotlib.pyplot as plt
import numpy as np

# 定义条形宽度
bar_width = 0.25

# 获取x轴基准位置(假设三个数据框的x标签一致)
x = np.arange(len(df1.index))

# 分别绘制三个数据框的条形,每个偏移一个宽度
plt.bar(x - bar_width, df1.iloc[:, 0], width=bar_width, label='df1')
plt.bar(x, df2.iloc[:, 0], width=bar_width, label='df2')
plt.bar(x + bar_width, df3.iloc[:, 0], width=bar_width, label='df3')

# 设置x轴标签和其他样式
plt.xticks(x, df1.index, rotation=45)
plt.title('手动调整的并排条形图')
plt.xlabel('分类标签')
plt.ylabel('数值')
plt.legend()
plt.tight_layout()
plt.show()

这里通过x - bar_width、x、x + bar_width让三个数据框的条形在x轴上错开,再配合一致的宽度,就不会重叠了。

你之前的尝试没成功,就是因为没给每个数据框的条形设置不同的x位置,只调align和宽度是不够的哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:03:24