如何用matplotlib为合并后的pandas DataFrame绘制并列分组柱状图
分组并排柱状图修改方案
问题原因
当前代码的柱状图呈现堆叠视觉效果,是因为两次ax.bar()调用使用了完全相同的x轴位置,两组柱子直接重叠在一起。
修改方法
需要调整两组柱子的x轴位置,使其向左右偏移,实现并排显示,具体修改步骤如下:
- 自定义柱子宽度,通常设置为0.3~0.4之间即可
- 将分类key转换为数值型坐标序列,作为x轴基准位置
- 两组柱子分别向左右偏移半个宽度的位置绘制
- 重新设置x轴刻度标签为原始的key值
完整修改后代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt np.random.seed(0) df1 = pd.DataFrame({ 'key': ['A', 'B', 'C', 'D'], 'value':[ 10 ,6, 6, 8]}) df2 = pd.DataFrame({ 'key': ['B', 'D', 'A', 'F'], 'value':[ 3, 5, 5, 7]}) df3 = pd.merge(df1, df2, how='inner', on=['key']) print(df1) print(df2) print(df3) fig, ax = plt.subplots(figsize=(12, 8)) # 新增修改部分开始 bar_width = 0.35 # 生成数值型x基准坐标 x = np.arange(len(df3['key'])) # 两组柱子分别偏移绘制 b1 = ax.bar(x - bar_width/2, df3['value_x'], width=bar_width, label='df1数值') b2 = ax.bar(x + bar_width/2, df3['value_y'], width=bar_width, label='df2数值') # 重置x轴刻度为原始key ax.set_xticks(x) ax.set_xticklabels(df3['key']) # 增加图例区分两组数据 ax.legend() # 新增修改部分结束 pngname = "demo.png" fig.savefig(pngname, dpi=fig.dpi) print("[[./%s]]"%(pngname))
运行后即可得到两组柱子并排显示的分组柱状图效果。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

