我得到了这两个{ndarray}
,其中有3个正面,负面和中性评分值。
>>>y1
array([82, 80, 63])
>>>y2
array([122, 73, 30])
同样我需要将y1[0]
和y2[0]
绘制在一起,因为它们对应为正值,与每个数组中的其他2个值相同。
我试过了:
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:形状不匹配:无法将对象广播为单个形状
我无法诊断可能的形状有问题
答案 0 :(得分:3)
np.arange(2)
提供array([0, 1])
,因此只有两个值。如果您尝试对此绘制三个值(在y1
或y2
中),那将无法正常工作,它会抛出ValueError(告诉您完全相同):
ValueError: shape mismatch: objects cannot be broadcast to a single shape
尝试使用np.arange(3)
。
答案 1 :(得分:1)
异常来自于您尝试针对2个x值绘制3个y
值(请参阅documentation on 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()