使用pyplot绘制ndarray的双柱形图、柱形图无法绘制

6

我有这两个{ndarray},其中包含正面、负面和中性得分三个值。

>>>y1
array([82, 80, 63])
>>>y2
array([122,  73,  30])

我需要将y1[0]y2[0]一起绘制,因为它们对应的是正值,其他两个数组也是如此。

我尝试了以下方法:

import matplotlib.pyplot as plt
import numpy as np

def biplt(groundTruth, predictedValues, plt_name='<name>'):
        gt = groundTruth
        pr = predictedValues
        x = np.arange(2)

        y1, y2 = gt.values, pr.values
        fig, axes = plt.subplots(ncols=1, nrows=1)

        width = 0.20
        plt.title('%s\n Accuracy Score' % plt_name)
        plt.xlabel('Parameters')
        plt.ylabel('Score')
        axes.bar(x, y1, width, label="Algorithm 1")
        axes.bar(x + width, y2, width, color=list(plt.rcParams['axes.prop_cycle'])[2]['color'], label="Algorithm 2")
        axes.set_xticks(x + width)
        axes.set_xticklabels(['Positive', 'Negative'])
        plt.legend()
        plt.show()

这导致了ValueError错误,请查看以下内容:

ValueError: 形状不匹配:无法将对象广播到单个形状

我无法诊断可能的形状问题

我期望类似于下面的输出:
每个条件的2个条形图


你能提供一个模型/图纸来展示最终的绘图效果吗?从你的问题中我并不清楚。 - Diziet Asahi
@DizietAsahi 是的,请检查问题中的更改。 - T3J45
2个回答

10

np.arange(2)返回array([0, 1]),只有两个值。如果您尝试绘制三个值(在y1y2中),那么它将无法工作并抛出ValueError(确切地告诉您这一点):

ValueError: shape mismatch: objects cannot be broadcast to a single shape

尝试使用 np.arange(3)


7

异常的原因是您正在尝试针对两个 x 值绘制 3 个 y 值(请参阅 np.arange() 文档)。

下面是一个修改后的代码,可以生成所需的输出:

y1 = np.array([82, 80, 63])
y2 = np.array([122,  73,  30])

x = np.arange(len(y1))
width = 0.20

fig, axes = plt.subplots(ncols=1, nrows=1)
plt.title('Accuracy Score')
plt.xlabel('Parameters')
plt.ylabel('Score')
axes.bar(x, y1, width=-1.*width, align='edge', label="Algorithm 1")
axes.bar(x, y2, width=width, align='edge', color=list(plt.rcParams['axes.prop_cycle'])[2]['color'], label="Algorithm 2")
axes.set_xticks(x)
axes.set_xticklabels(['Positive', 'Negative', 'Neutral'])
plt.legend()
plt.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接