2011-12-15 22 views
19

私はmatplotlibテーブルコマンドを動作させることに成功していません。ここに私が何をしたいのかの例があります:Matplotlibのプロットにテーブルを配置するにはどうしたらいいですか?

誰でもテーブル構築コードを手助けできますか?

import pylab as plt 

plt.figure() 
ax=plt.gca() 
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] 
plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') 
col_labels=['col1','col2','col3'] 
row_labels=['row1','row2','row3'] 
table_vals=[11,12,13,21,22,23,31,32,33] 
# the rectangle is where I want to place the table 
plt.text(11,4.1,'Table Title',size=8) 
plt.plot(y) 
plt.show() 
+2

[this](http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/table_demo.py)の例を見てみましたか?あるいは、あなたは[似たような]何かをすることさえできるかもしれません(http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo3。html)がありますが、注釈の代わりに表があります。 – cosmosis

+0

はい私はその例を見ました。私はコードを使用しようとしたとき、私は行の色と配置を割り当てることができませんでした。私はまた、呼び出しの構文や型に関するドキュメントヘルプを見つけることができませんでした。注釈については、テーブルをプロットするための第2の軸を指定するコントロールが多くあると考えています。 – user1032355

答えて

40

私の知る限り、あなただけのネイティブmatplotlibの機能を使用してmatplotlibプロット上ではない任意場所のテーブルをすることができます。あなたができることはlatex text renderingの可能性を利用することです。ただし、これを行うには、システム内の作業環境がlatexである必要があります。あなたは1を持っている場合、あなたは、以下のようにグラフを生成することができるようになります。

import pylab as plt 
import matplotlib as mpl 

mpl.rc('text', usetex=True) 
plt.figure() 
ax=plt.gca() 
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] 
#plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') 
col_labels=['col1','col2','col3'] 
row_labels=['row1','row2','row3'] 
table_vals=[11,12,13,21,22,23,31,32,33] 
table = r'''\begin{tabular}{ c | c | c | c } & col1 & col2 & col3 \\\hline row1 & 11 & 12 & 13 \\\hline row2 & 21 & 22 & 23 \\\hline row3 & 31 & 32 & 33 \end{tabular}''' 
plt.text(9,3.4,table,size=12) 
plt.plot(y) 
plt.show() 

結果は次のとおりです。

enter image description here

これはquick'n'dirty例であることに注意してみてください。テキスト座標で再生することでテーブルを正しく配置できるはずです。あなたがなど

UPDATEフォントを変更する必要がある場合もdocsを参照してください:もっとpyplot.table

documentationによると、plt.tableは、現在の軸にテーブルを追加します。ソースからは明らかですが、グラフ上のテーブルの位置は軸との関係で決まります。 Y座標は、キーワードtop(上のグラフ)、upper(上半分)、center(中央)、lower(下半分)およびbottom(下図)で制御できます。 Xの座標は、キーワードleftrightで制御されます。 2つの作品の任意の組み合わせ、例えば。 top left,center rightbottomのいずれでもOKです。

だから、あなたが望むものに近いグラフはで作ることができます

import matplotlib.pylab as plt 

plt.figure() 
ax=plt.gca() 
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] 
#plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') 
col_labels=['col1','col2','col3'] 
row_labels=['row1','row2','row3'] 
table_vals=[[11,12,13],[21,22,23],[31,32,33]] 
# the rectangle is where I want to place the table 
the_table = plt.table(cellText=table_vals, 
        colWidths = [0.1]*3, 
        rowLabels=row_labels, 
        colLabels=col_labels, 
        loc='center right') 
plt.text(12,3.4,'Table Title',size=8) 

plt.plot(y) 
plt.show() 

そして、これはあなたに

enter image description here

を与えるが、この情報がお役に立てば幸い!

+0

ありがとうございますAndrey、これはプローブに実用的なソリューションを提供します。しかし、私はmatplotlibのpyplot.tableやmatplotlib.Table.tableの機能に関するディスカッションやドキュメントを見つけることができません。誰かが明示的にテーブルの質問に対処するのを見たいと思います。 – user1032355

+0

pyplot.tableの詳細については、アップデートを確認してください。 –

+0

ありがとう、アンドレイ!質問にはっきりと完全に答えただけでなく、私はmatplotlib.pyplot.tableのドキュメントを完全に見逃していました。明白な答えと指針をありがとう。 – user1032355

5

前回の回答があなたの質問を満たしているかどうかわかりませんが、プロットにテーブルを追加する方法を探していて、 "loc"制限を克服できる可能性があることがわかりました。

 tbl = ax1.table(
      cellText=[["a"], ["b"]], 
      colWidths=[0.25, 0.25], 
      rowLabels=[u"DATA", u"WERSJA"], 
      loc="bottom", bbox=[0.25, -0.5, 0.5, 0.3]) 

     self.ui.main_plot.figure.subplots_adjust(bottom=0.4) 

、結果は(私はここに画像を投稿する評判を持っていないです:あなたは(これが唯一のテーブルの作成が含まれていますが、十分でなければなりません)テーブルの正確な位置を制御するためのバウンディングボックスを使用することができますリンクです): http://www.viresco.pl/media/test.png

bbox単位は正規化されています(プロットスケールではありません)。

関連する問題