2014-09-14 17 views
6

Tôi có một âm mưu với 9 dòng, biểu diễn tập dữ liệu với hai tham số khác nhau, giả sử f_11, f_12, f_13, ..., f_33. Để làm cho cốt truyện (một chút) rõ ràng hơn, tôi mã hóa tham số đầu tiên là màu của đường kẻ và đường thứ hai là đường kẻ (vì vậy f_11 là màu đỏ & đứt nét, f12 là màu đỏ & chấm, f21 là màu xanh lá cây & đứt nét, f22 là màu xanh lá cây & chấm chấm, v.v ...). Vì vậy, đối với truyền thuyết, tôi muốn tạo một bảng 3x3, trông giống nhưBố cục chú giải dạng bảng cho matplotlib

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

Có cách nào tôi có thể làm điều này với matplotlib không? Một ý tưởng sẽ là để làm cho hộp này với LaTeX, nhưng tôi cần một cách để vẽ các nghệ sĩ huyền thoại ở đúng vị trí.

Cảm ơn!

(crosspossted từ matplotlib-users)

Trả lời

1

Nếu bạn cần để tạo ra một bảng có thể đọc được, bạn có thể sử dụng mô-đun PrettyTable

Ví dụ trong python2.7 mã này

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 

có thể sản xuất sản lượng này:

+-----------+------+------------+-----------------+ 
| 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

Không, tôi muốn bảng này được nhúng trong hình matplotlib. Tạo một bảng ASCII rất dễ dàng (ngay cả khi tẻ nhạt). – antony

12

Không phải là một câu hỏi rất dễ nhưng tôi có hình d nó ra. Bí quyết tôi sử dụng là để khởi tạo một hình chữ nhật trống hoạt động như một tay cầm. Các thanh điều khiển trống bổ sung này được sử dụng để xây dựng bảng. Tôi thoát khỏi bất kỳ không gian quá mức sử dụng handletextpad:

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

Tôi biết chúng tôi không phải là trò chuyện trên SO, nhưng điều này là thanh lịch và tuyệt vời. Rất rất tốt. – Ajean

+0

Đây là một giải pháp tuyệt vời và thực sự xứng đáng với tiền thưởng. – antony

Các vấn đề liên quan