2016-08-31 9 views
1

標準のボイラープレートコードを使用して、各バーの上に「カウント」ラベルが付いた単純な棒グラフを描画します。データが変わると、この棒グラフが更新されています。私は正常にライブグラフを更新することができます。コードは次のとおりです。グラフを更新するときにpylab/matplotlibを使用してラベルを更新する

fig, ax = plt.subplots() 
def my_graph(): 
    y_pos = np.arange(len(data_list)) 
    rects1 = ax.bar(y_pos, count_list, 0.28, color='r') 
    # plt.bar(y_pos, count_list, 0.28, color='b', align='center', alpha=0.5) 
    ax.set_xticks(y_pos, data_list) 
    ax.set_xticklabels(data_list, rotation='vertical') 
    ax.set_ylabel('Counts') 
    ax.set_title('Some stats ') 
    plt.plot() 
    plt.ylim([0, 50]) 
    autolabel(rects1) 

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') 

これは標準ボイラープレートコードです。私のメインでは、次のようにします。

if __name__ == "__main__": 
    my_graph() 
    plt.ion() 
    while True: 
     time.sleep(3) 
     get_updated_data() 
     my_graph() 
     plt.pause(0.01) 

get_updated_dataは、新しいデータを取得し、グラフを生成するコードを呼び出します。これはバーを正しく更新しています。ただし、各バーの上に追加されたラベルは上書きされません。グラフがリフレッシュされるたびに、それらは互いに積み重なります。これを修正する適切な方法は何ですか?私はfig.canvas.draw()を試しましたが、動作していません。たぶん私は間違った場所に追加しています。適切なアプローチは何ですか?

おかげ

+0

完全な作業コードを表示できますか? –

+0

そこにはすべてのプロットコードがあります。他のものは私がここに置くことができないデータのものです。データ部分は適切な値を持つcount_listとdata_listを生成するだけです –

答えて

0

1つのオプションは、cla()を軸に各反復をクリアすることです。代わりに、各テキストオブジェクトを保存し、必要に応じて削除することもできます。

t = ax.text(0.5,0.5,"label") 
plt.pause(3) 
t.remove() 
fig.canvas.draw() 
関連する問題