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

如何基于嵌套列表绘制Matplotlib并列对比柱状图?

解决Matplotlib并列柱状图重叠问题的方案

嘿,我懂你的困扰——直接连续调用两次plt.bar()确实会让两组柱子完全重叠,因为它们使用了一模一样的X轴坐标。要实现并列展示的效果,我们只需要给其中一组柱子的X坐标手动偏移一个固定宽度,让两组柱子错开就行!

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 你的原始数据
list1 = [[0,1],[1,2.5],[2,3],[3,5.6]]
list2 = [[0,2],[2,5],[3,7]]

# 提取list1的X轴刻度和对应Y值
x_labels, y_list1 = zip(*list1)

# 为list2生成与list1 X轴一一对应的Y值,缺失的位置补0
y_list2 = []
for x in x_labels:
    # 查找list2中匹配的X值,找不到则返回0
    matched_y = next((item[1] for item in list2 if item[0] == x), 0)
    y_list2.append(matched_y)

# 设置柱子的宽度
bar_width = 0.35

# 将X轴标签转换为numpy数组,方便偏移计算
x = np.array(x_labels)

# 绘制两组并列的柱状图:一组左移宽度的一半,一组右移宽度的一半
plt.bar(x - bar_width/2, y_list1, bar_width, label='List1数据')
plt.bar(x + bar_width/2, y_list2, bar_width, label='List2数据')

# 添加图表元素
plt.xlabel('X轴数值')
plt.ylabel('Y轴数值')
plt.title('两组数据的并列对比柱状图')
plt.xticks(x)  # 保持X轴刻度为原始的0、1、2、3
plt.legend()

plt.show()

关键细节解释

  1. X坐标偏移:
    默认情况下,plt.bar()的柱子是居中对齐在给定的X坐标上的。我们把第一组柱子的X坐标左移bar_width/2,第二组右移bar_width/2,这样两组柱子就会刚好并排,不会重叠,总占用宽度为bar_width * 2。

  2. 处理缺失数据:
    你的list2中缺少X=1的对应数据,所以我们通过遍历list1的X刻度,为list2补充缺失位置的Y值(这里设为0),保证两组数据的长度一致,才能对应到相同的X轴位置。

  3. 无需numpy的替代方案:
    如果不想引入numpy,也可以用列表推导式手动生成偏移后的X坐标:

    x_left = [i - bar_width/2 for i in x_labels]
    x_right = [i + bar_width/2 for i in x_labels]
    
    plt.bar(x_left, y_list1, bar_width, label='List1数据')
    plt.bar(x_right, y_list2, bar_width, label='List2数据')
    plt.xticks(x_labels)
    

这样就能得到你想要的并列柱状图效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:26:26