2014-09-14 47 views
6
için tabular lejandı düzeni

F_11, f_12, f_13, ..., f_33 gibi iki değişken parametreli veri kümelerini temsil eden 9 satırlık bir çizimim var. Arsa (biraz) daha net yapmak için, ilk parametreyi satırın rengini ve ikincisi linestyle olarak kodlayın (böylece f_11 kırmızı & kesik, f12 kırmızı & noktalı, f21 yeşil & kesik, f22 yeşil & noktalı, vb.). Yani, efsane için, ben matplotlib ile bu getirmenin herhangi bir yolu var mımatplotlib

 | value1 | value2 | value3 
--------------------------------- 
value1 | 
value2 | <artists go there> 
value3 | 

benzeyen, bir 3x3 tablo yapmak istersiniz? Bu kutuyu LaTeX ile yapmak bir fikir olurdu, ama efsane sanatçılarını doğru pozisyonda çizmenin bir yoluna ihtiyacım var.

Teşekkürler!

Eğer okunabilir bir tablo oluşturmak için gerekiyorsa, python2.7 Örneğin bu kodu PrettyTable modülünü

kullanabilirsiniz

cevap

1

(matplotlib-kullanıcılardan crosspossted)

from prettytable import PrettyTable 

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"]) 
x.align["City name"] = "l" # Left align city names 
x.padding_width = 1 # One space between column edges and contents (default) 
x.add_row(["Adelaide",1295, 1158259, 600.5]) 
x.add_row(["Brisbane",5905, 1857594, 1146.4]) 
x.add_row(["Darwin", 112, 120900, 1714.7]) 
x.add_row(["Hobart", 1357, 205556, 619.5]) 
x.add_row(["Sydney", 2058, 4336374, 1214.8]) 
x.add_row(["Melbourne", 1566, 3806092, 646.9]) 
x.add_row(["Perth", 5386, 1554769, 869.4]) 
print x 

üretebilir Bu çıktı:

+-----------+------+------------+-----------------+ 
| City name | Area | Population | Annual Rainfall | 
+-----------+------+------------+-----------------+ 
| Adelaide | 1295 | 1158259 |  600.5  | 
| Brisbane | 5905 | 1857594 |  1146.4  | 
| Darwin | 112 | 120900 |  1714.7  | 
| Hobart | 1357 | 205556 |  619.5  | 
| Sydney | 2058 | 4336374 |  1214.8  | 
| Melbourne | 1566 | 3806092 |  646.9  | 
| Perth  | 5386 | 1554769 |  869.4  | 
+-----------+------+------------+-----------------+ 
+0

Hayır, bu tablo matplotlib şekilde gömülmesini istiyorum. Bir ASCII tablosu oluşturmak (yorucu olsa bile) kolaydır. – antony

12

Çok kolay bir soru değil ama d dışarı. Kullandığım numara, tutamaç olarak hareket eden boş bir dikdörtgeni başlatmaktır. Bu ek boş tutamaklar masayı oluşturmak için kullanılır. Ben handletextpad kullanarak herhangi aşırı boşluk kurtulmak:

import numpy 
import pylab 
import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 

fig = plt.figure() 
ax = fig.add_subplot(111) 

im1 ,= ax.plot(range(10), pylab.randn(10), "r--") 
im2 ,= ax.plot(range(10), pylab.randn(10), "g--") 
im3 ,= ax.plot(range(10), pylab.randn(10), "b--") 
im4 ,= ax.plot(range(10), pylab.randn(10), "r.") 
im5 ,= ax.plot(range(10), pylab.randn(10), "g.") 
im6 ,= ax.plot(range(10), pylab.randn(10), "b.") 
im7 ,= ax.plot(range(10), pylab.randn(10), "r^") 
im8 ,= ax.plot(range(10), pylab.randn(10), "g^") 
im9 ,= ax.plot(range(10), pylab.randn(10), "b^") 

# create blank rectangle 
extra = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0) 

#Create organized list containing all handles for table. Extra represent empty space 
legend_handle = [extra, extra, extra, extra, extra, im1, im2, im3, extra, im4, im5, im6, extra, im7, im8, im9] 

#Define the labels 
label_row_1 = [r"$f_{i,j}$", r"$i = 1$", r"$i = 2$", r"$i = 3$"] 
label_j_1 = [r"$j = 1$"] 
label_j_2 = [r"$j = 2$"] 
label_j_3 = [r"$j = 3$"] 
label_empty = [""] 

#organize labels for table construction 
legend_labels = numpy.concatenate([label_row_1, label_j_1, label_empty * 3, label_j_2, label_empty * 3, label_j_3, label_empty * 3]) 

#Create legend 
ax.legend(legend_handle, legend_labels, 
      loc = 9, ncol = 4, shadow = True, handletextpad = -2) 

plt.show() 

enter image description here

+1

Biliyorum, SO üzerinde konuşkan olmamalıyız, ama bu zarif ve harika. Çok çok güzel. – Ajean

+0

Bu müthiş bir çözüm ve ödülü hak ediyor. – antony