如何使用Python Matplotlib绘制指定结构的分组柱状图
如何使用Python Matplotlib绘制指定结构的分组柱状图
嗨,我来帮你搞定这个分组柱状图的需求!用Matplotlib就能轻松实现你要的「5个组,每组3根柱子」的效果,我把完整的实现代码和思路给你理清楚:
首先咱们得先导入需要的库,然后把你已有的labels和data放进去,核心是通过计算柱子的位置来实现分组效果,具体代码和解释如下:
import matplotlib.pyplot as plt import numpy as np # 你提供的标签和数据集 labels = ["Label 1", "Label 2", "Label 3", "Label 4", "Label 5"] data = { "Data 1": [12, 20, 17, 16, 32], "Data 2": [12, 20, 17, 16, 32], "Data 3": [12, 20, 17, 16, 32] } # 设定单根柱子的宽度,选0.25是因为3根柱子总宽度0.75,组间会留空隙,视觉效果更舒服 bar_width = 0.25 # 生成每个组的中心x轴位置,对应5个标签组 x = np.arange(len(labels)) # 分别绘制每个数据系列的柱子:通过加减宽度让3根柱子在同一组内排列 plt.bar(x - bar_width, data["Data 1"], width=bar_width, label="Data 1") plt.bar(x, data["Data 2"], width=bar_width, label="Data 2") plt.bar(x + bar_width, data["Data 3"], width=bar_width, label="Data 3") # 把x轴刻度放在每个组的中心,确保标签和分组对应正确 plt.xticks(x, labels) # 给图表加标题和轴标签,你可以根据自己的需求修改文字 plt.title("分组柱状图示例") plt.xlabel("标签组") plt.ylabel("数值") # 显示图例,方便区分不同数据系列 plt.legend() # 展示最终的图表 plt.show()
我再给你划几个关键点:
- 柱子宽度的选择:如果觉得分组太挤或太松,直接调整
bar_width就行,比如改成0.3也没问题 - 位置计算逻辑:
x是每个组的中心,通过加减宽度让同组的柱子挨在一起,不会和其他组的柱子重叠 - 如果以后你的数据系列数量变了(比如不是3个),可以用循环简化代码,不用手动写多次
plt.bar,比如:
# 适配任意数量数据系列的循环写法 bar_width = 0.25 x = np.arange(len(labels)) data_list = list(data.items()) for idx, (series_name, series_values) in enumerate(data_list): # 自动计算每个系列的柱子位置 bar_pos = x + (idx - len(data_list)//2) * bar_width plt.bar(bar_pos, series_values, width=bar_width, label=series_name)
这样不管你有2个还是5个数据系列,都能自动生成对应的分组效果!
备注:内容来源于stack exchange,提问作者user25770979




