2011-12-15 21 views
19

Matplotlib tablo komutlarının işe alınmasında herhangi bir başarı elde edemiyorum. Burada yapmak istediklerimden bir örnek:Matplotlib'de bir tabloyu nasıl yerleştirebilirim?

Tablo yapım kodunda yardımcı olan var mı?

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) örneğine bakmayı denediniz mi? Ya da benzer bir şey yapabileceksiniz (http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo3.html), ancak ek açıklamaların yerine bir tablonuz var. – cosmosis

+0

Evet Bu örneği gördüm. Kodu kullanmaya çalıştığımda satır renkleri ve yerleşimi atayamadım. Ayrıca sözdizimi veya çağrı için herhangi bir doc yardım bulamadım. Ek açıklamalarda olduğu gibi, tabloyu çizmek için ikinci eksenleri belirten daha fazla kontrol olduğuna inanıyorum. – user1032355

cevap

40

AFAIK, sadece yerli matplotlib özelliklerini kullanarak matplotlib arsa üzerinde değil keyfi yer bir tablo olabilir. Ne yapabilirsiniz latex text rendering olasılığını yararlanmaktır. Bununla birlikte, bunu yapmak için sisteminizde latex ortamını çalıştırmanız gerekir. Eğer bir tane varsa, böyle aşağıdaki gibi grafikleri üretmek mümkün olmalıdır:

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

sonucudur:

enter image description here

bu quick'n'dirty örnek olduğunu akılda atın; Metni koordinatlarla oynayarak masayı doğru yerleştirebilmelisiniz. vb

UPDATE fontları değiştirmek gerektiğinde de docs bakınız: daha pyplot.table

üzerinde documentation göre, plt.table akım eksenlere bir tablo ekler. Kaynaklardan belli ki, grafikteki tablo konumu eksenlere göre belirlenir. Y koordinatı top (yukarıdaki grafik), upper (üst yarıda), center (ortada), lower (alt yarıda) ve bottom (aşağıdaki grafik) ile kontrol edilebilir. X koordinatı left ve right anahtar sözcükleriyle kontrol edilir. İki eserin herhangi bir kombinasyonu, örn. Kullanmak için top left, center right ve bottom herhangi bir sorun yoktur.

Yani ne istediğinizi en yakın grafik ile yapılmış olabilir:

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

Ve bu size

enter image description here

bu yardımcı olur Umut veriyor!

+0

Teşekkürler Andrey, Bu, probelem için uygulanabilir bir çözüm sunuyor. Ancak matplotlib'deki pyplot.table veya matplotlib.Table.table yeteneklerinin herhangi bir tartışmasını/belgelerini bulamıyorum. Birinin Masa sorusunu açıkça ele aldığını görmek isterim. – user1032355

+0

Eğer pyplot.table hakkında daha fazlasını görmek istiyorsanız, lütfen güncellemeyi kontrol edin. –

+0

Teşekkür ederim Andrey! Sadece soruya net ve eksiksiz cevap vermediniz, matplotlib.pyplot.table belgelerini tamamen özledim. Açık cevap ve rehberlik için teşekkürler. – user1032355

5

Önceki cevapların sizin sorunuza cevap verip vermediğinden emin değilim, ayrıca arsaya bir tablo eklemenin bir yolunu arıyordum ve "loc" sınırlamasını aşma olasılığını buldum. Ben işte görüntüleri yayınlamak için itibar yok (

 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) 

Ve sonuç şudur: (bu yalnızca tablo oluşturma içerir ancak yeterli olmalı) tablonun tam konumunu kontrol etmek sınırlama kutusunu kullanabilirsiniz bir bağlantıdır): http://www.viresco.pl/media/test.png.

Bbox birimlerinin normalleştirildiğini (çizim ölçeğinde değil) unutmayın.

İlgili konular