1. ホーム
  2. python

[解決済み】pyplot for ndarrayを使用してダブルバー、バープロットをプロットすることができない。

2022-02-03 19:15:20

質問

以下の2つを入手しました。 {ndarray} で、Positive, Negative, Neutralの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: Shape mismatch: オブジェクトを単一のシェイプにブロードキャストすることはできません。

どのような形状が問題なのか診断できません。

同じようなO/Pを期待しています。

解決方法は?

np.arange(2) 与える array([0, 1]) ということで、2つの値しかありません。もし、3つの値をプロットしようとすると ( y1 または y2 に対して、ValueError を投げてしまいます。

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

を使ってみてください。 np.arange(3) .