2011-12-15 79 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 2011-12-15 20:36:14

+0

是的,我看到了這個例子。當我嘗試使用代碼時,我無法分配行顏色和位置。我也無法找到關於調用的語法或類型的任何文檔幫助。至於註釋,我相信有更多的控制指定第二個軸來繪製表格。 – user1032355 2011-12-16 07:01:18

回答

40

據我所知,你不能隨意地方使用唯一的本地matplotlib功能matplotlib情節的表。你可以做的是利用latex text rendering的可能性。但是,爲了做到這一點,您應該在系統中使用latex環境。如果你有一個,你應該能夠生成圖表,如下面:

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例子;你應該能夠通過玩文本座標來正確放置桌子。也請參閱docs,如果你需要改變字體等

UPDATE:更多pyplot.table

按照documentationplt.table增加了一個表,當前軸。從源頭上可以明顯看出,圖表上的表格位置與軸相關。可以使用關鍵字top(圖上方),upper(上半部分),center(中間部分),lower(下半部分)和bottom(下方圖表)來控制座標(Y)。使用關鍵字leftright來控制X座標。這兩部作品的任何組合,例如可以使用top left,center rightbottom中的任何一個。

所以最接近的圖形給你想要的東西可以用進行:

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

希望這有助於!

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單位已規範化(不是繪圖比例)。