You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用pyplot绘制ndarray双柱状图失败,报形状不匹配ValueError

解决双柱状图绘制时的Shape Mismatch问题

看起来你是想对比两组情感分类的分数(正/负/中性),但在绘制双柱状图时遇到了形状不匹配的错误。别担心,这个问题大多是因为数据维度没对齐,或者绘图时的参数设置不对,我来给你一步步解决。

错误原因分析

ValueError: shape mismatch通常发生在matplotlib尝试将不同形状的数据进行绘图时,常见诱因包括:

  • 你的y1y2不是一维的ndarray(比如是(1,3)的二维数组)
  • 用于定位柱子的x轴数据和y轴数据长度不匹配
  • 传入plt.bar的参数格式不符合要求

完整可运行代码示例

下面是符合你需求的完整代码,我用模拟数据演示,你直接替换成自己的y1y2就行:

import numpy as np
import matplotlib.pyplot as plt

# 模拟你的两个ndarray数据(替换成你自己的y1和y2)
y1 = np.array([0.65, 0.2, 0.15])  # Positive, Negative, Neutral
y2 = np.array([0.58, 0.27, 0.15])

# 先确认数据形状:应该都是(3,)的一维数组
print("y1形状:", y1.shape)
print("y2形状:", y2.shape)

# 如果数据是二维的(比如(1,3)),先转成一维
# y1 = y1.flatten()
# y2 = y2.flatten()

# 设置x轴的位置,一共3组分类
x = np.arange(3)
# 柱子宽度,用来错开两组柱子避免重叠
width = 0.35

# 绘制双柱状图:通过x轴偏移实现并排显示
plt.bar(x - width/2, y1, width, label='Group 1')
plt.bar(x + width/2, y2, width, label='Group 2')

# 设置x轴刻度标签,对应三类情感
plt.xticks(x, ['Positive', 'Negative', 'Neutral'])

# 添加图表装饰元素
plt.title('Comparison of Sentiment Scores')
plt.ylabel('Scores')
plt.legend()

# 显示图形
plt.show()

关键细节说明

  1. 数据维度检查:运行代码前先打印y1.shapey2.shape,确保都是(3,)。如果是(1,3)或者(3,1),用flatten()或者reshape(-1)转成一维即可。
  2. 柱子错位技巧:用x - width/2x + width/2让两组柱子在同一分类下并排显示,避免重叠遮挡。
  3. 刻度对齐plt.xticks(x, ...)确保标签正好对应两组柱子的中间位置,视觉上更整齐。

快速排查小技巧

如果还是报错,你可以先打印各数据的长度,确保它们都是3个元素:

print(len(x), len(y1), len(y2))  # 正常应该输出3 3 3

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

火山引擎 最新活动