3

チャートに実際の値を表示することについて質問があります。印刷されたグラフがあり、積み上げられた各バーの値を表示する必要があります。これらの値を表示するにはどうすればよいですか?

関数を試しax.textましたが、望ましい結果が得られません (写真を参照)。グラフは 1 に正規化されているため、積み上げられた各バーの実際の値を表示する必要があります (上部は合計数であり、各バーに分割する必要があります。最初のバーには 1 つの数字 7、2 番目のバーには 3 つの数字が必要です。 41 は、各カラー バーのサイズで分割されます)。これを行うことは可能ですか?

私のコードでは、複数の積み重ねられたバーをどのように思いつくか:

def autolabel(rects):
    # attach some text labels
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%d'%int(height),
                ha='center', va='bottom')

p = [] # list of bar properties
def create_subplot(matrix, colors, axis):
    bar_renderers = []
    ind = np.arange(matrix.shape[1])
    bottoms = np.cumsum(np.vstack((np.zeros(matrix.shape[1]), matrix)), axis=0)[:-1]
    for i, row in enumerate(matrix):
        print bottoms[i]
        r = axis.bar(ind, row, width=0.5, color=colors[i], bottom=bottoms[i])
        bar_renderers.append(r)
        autolabel(r)
    #axis.set_title(title,fontsize=28)
    return bar_renderers

p.extend(create_subplot(nauja_matrica,spalvos, ax))

ここに画像の説明を入力

4

1 に答える 1

6

関数を使用して、積み上げられた各バーの値を表示できax.textます。目的の結果をほぼ得るためにコードを修正する必要はほとんどありません。autolabel実際には、関数を次のコードに置き換えるだけです。

def autolabel(rects):
    # Attach some text labels.
    for rect in rects:
        ax.text(rect.get_x() + rect.get_width() / 2.,
                rect.get_y() + rect.get_height() / 2.,
                '%f'%rect.get_height(),
                ha = 'center',
                va = 'center')

ラベルの垂直位置を修正し、次のようにします。 棒グラフとその値

ラベルを変更して正規化されていない値を取得する場合は、もう少し作業が必要です。最も簡単な解決策は、追加のパラメーターvalues(正規化されていない値を含む) をautolabel関数に渡すことです。コードは次のようになります。

def autolabel(rects, values):
    # Attach some text labels.
    for (rect, value) in zip(rects, values):
        ax.text(rect.get_x() + rect.get_width() / 2.,
                rect.get_y() + rect.get_height() / 2.,
                '%d'%value,
                ha = 'center',
                va = 'center')

これがお役に立てば幸いです。

于 2015-10-05T15:32:47.913 に答える