2017-07-17 23 views
1

私はPython 3.xでmatplotlibを使用するコードを持っています。Pythonでテーブルを編集するには?

colLabels = ["Name", "Number"] 
data = [["Peter", 17], ["Sara", 21], ["John", 33]] 
the_table = ax.table(cellText=data, 
        colLabels=colLabels, 
        loc='center') 
plt.pause(0.1) 

上記のコードは、今、私はすべての2番目の列の変更のエントリを反復におけるように、最初の列の「ピーター」(それはユニークだ)で行を検索し、それを編集したい場合は、ループです。私はax全体をクリアして新しいテーブルを追加することはできますが、非効率です(0.1秒ごとに複数行のテーブルを再描画します)

matplotlibでこれを編集する方法はありますか?それ?)

+0

テーブルのDataframeタイプに付属しているPandasを見てみることをお勧めします。豊富な編集機能(ベクトル化されている)もあり、matplotlibとのインターフェースも良好です。しかし、私は本当にあなたの質問を持っているかどうかはわかりません。表示中のプロットを部分的に更新しようとしていますか? – ypnos

+1

代わりに[Matplotlib Animation API](http://matplotlib.org/api/animation_api.html)を使ってみましたか? – krassowski

+0

@ypnos私は 'data'の中のwhatsを編集し、' the_table'(これは表示されています)の変更を見たいです ** edit **:私が今やっていることは 'the_table'と更新された 'data'で新しいテーブルを作成する – Pitirus

答えて

4

matplotlibテーブルのテキストは、セルを選択してセルの_text属性のテキストを設定することで更新できます。例えば。

the_table._cells[(2, 1)]._text.set_text("new text") 

は、3行目と2列目のセルを更新します。

アニメーションの例:

import matplotlib.pyplot as plt 
from matplotlib.animation import FuncAnimation 

fig, ax = plt.subplots(figsize=(4,2)) 
colLabels = ["Name", "Number"] 
data = [["Peter", 1], ["Sara", 1], ["John", 1]] 
the_table = ax.table(cellText=data, 
        colLabels=colLabels, 
        loc='center') 

def update(i): 
    the_table._cells[(1, 1)]._text.set_text(str(i)) 
    the_table._cells[(2, 1)]._text.set_text(str(i*2)) 
    the_table._cells[(3, 1)]._text.set_text(str(i*3)) 

ani = FuncAnimation(fig, update, frames=20, interval=400) 
plt.show() 

enter image description here

更新する必要があるセル、おそらくデータを使用しての代わりに、テーブルからそれを読んで最善を尽くしことになる見つけます。

inx = list(zip(*data))[0].index("Peter") 

はあなたのセルが the_table._cells[(inx+1, 1)]を介してアクセスすることができるように、インデックス0を、(理由は表の見出しであり+1を、注意してください)を与えます。

+0

このテーブルに行を追加する方法は分かりますか? – Pitirus

+1

あなたは 'the_table.add_cell()'を使うことができますが、それはちょっとしたかもしれませんし、うまく表示するためにはうまくいくかもしれません。 – ImportanceOfBeingErnest

関連する問題