Python中使用Matplotlib绘制多组并列柱状图的完整指南

山海之间
山海之间
发布时间:2026-10-12 | 5人浏览过
原创

在Python数据可视化场景中,并列柱状图是进行多维度数据对比的高效工具。本文详细拆解使用matplotlib库绘制2至5组并列柱状图的完整流程,包含环境配置、坐标偏移计算、顶部数值自动标注,以及符合学术期刊发表要求的黑白花纹样式实现方法,提供开箱即用的代码参考。

并列柱状图绘制原理与前置准备

Matplotlib绘制并列柱状图的核心逻辑是基于统一的X轴基准点,通过数学偏移量将不同数据集的矩形条平行展开。在此之前,需确保运行环境已安装matplotlib与numpy,并完成字体支持配置以兼容中文标签。

# 基础依赖引入
import matplotlib.pyplot as plt
import numpy as np

# 关键配置:解决Windows/Linux下中文显示为方块或乱码的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

第1步:定义数据维度与X轴基准网格

使用np.arange()创建连续的整数序列作为X轴的占位符,同时根据柱体数量设定合适的width(柱宽)。柱宽越小,单组内并列的数据越多,但需预留间距避免重叠。

# 示例:双组对比基础结构
labels = ['G1', 'G2', 'G3', 'G4', 'G5']
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]

x = np.arange(len(labels))  # X轴刻度位置
width = 0.35                # 单根柱体的宽度

第2步:计算偏移量并绘制多组柱体

并列柱状图通过向X轴基准值加上或减去特定距离来实现左右错开。官方推荐的对齐方式是以基准中心为原点,对称分配左右偏移量。以下为标准的双列与五列并列代码实现:

fig, ax = plt.subplots()

# 双列并行绘制:分别向左(-width/2)和向右(+width/2)偏移
rects1 = ax.bar(x - width/2, men_means, width, label='Men')
rects2 = ax.bar(x + width/2, women_means, width, label='Women')

# 若需绘制五列并列,可采用固定增量叠加偏移(示例)
# width = 0.1
# rects_a = ax.bar(x - width*2, a, width, label='a')
# rects_b = ax.bar(x - width + 0.01, b, width, label='b')
# ...依次类推调整增量值
两组变量并列柱状图渲染结果,展示男女得分对比
两组数据并列布局的标准渲染效果

第3步:完善坐标轴文本与顶部数值标注

图表信息易读性依赖于完整的Y/X轴标签、标题及图例。配合循环遍历bar对象集合,可快速在每个柱体顶端附加精确的数值文本。

# 设置轴标签与标题(字号可根据版面调整)
ax.set_ylabel('Scores', fontsize=16)
ax.set_xlabel('Groups', fontsize=16)
ax.set_title('Scores by group and gender')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()

# 自动标注函数:提取高度并垂直向上偏移3pt放置文字
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.annotate(f'{height}',
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)
五项指标并列柱状图输出效果,带全量数值标注
五组数据并列布局及顶部数值标注预览

第4步:生成符合出版规范的黑白花纹样式

部分学术期刊要求插图在无彩色打印环境下依然保持高对比度。Matplotlib原生支持通过hatch参数填充线条纹理,配合白色底色与黑色轮廓即可实现经典的黑白排版风格。

# 定义差异化的花纹填充符号
marks = ["...", "oo", "++", "XX", "**"]

# 示例:循环应用花纹与轮廓配色(此处假设偏移逻辑已就绪)
for i, (name, values, mark) in enumerate(zip(['a','b','c','d','e'], [a,b,c,d,e], marks)):
    ax.bar(
        x + i * offset_adjustment, 
        values, width, label=name,
        hatch=mark,            # 核心:花纹填充模式
        color='w',             # 背景纯白
        edgecolor="k"          # 边框黑色
    )
fig.tight_layout()
plt.show()
黑白花纹填充的并列柱状图,适用于纸质出版物
学术出版级别黑白纹理样式输出

调试排错与最终判定

完成状态判定:运行脚本后弹出窗口或导出图像文件,各柱体边缘无重叠、数值标注未遮挡框线、中文标题清晰可辨即为成功。

常见异常排查:

  • 柱子挤压变形或严重重叠:检查width设置是否过大。多组并列时,总宽度应小于相邻两个刻度的间距。
  • 花纹方向异常:hatch绘制的图案默认受当前坐标系比例缩放影响,若打印后密度不均,可在保存时通过savefig(dpi=300)提升分辨率,或在代码中适当增加linewidth。

总结

以上就是利用Python和matplotlib绘制多组并列柱状图的详细内容,更多关于Python数据可视化进阶与科研图表格式规范化的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表