2011-12-15 38 views
19

Tôi không có bất kỳ thành công nào trong việc nhận các lệnh bảng matplotlib hoạt động. Dưới đây là ví dụ về những gì tôi muốn làm:Làm thế nào tôi có thể đặt một bảng trên một âm mưu trong Matplotlib?

Có ai có thể trợ giúp mã xây dựng bảng không?

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

Bạn đã thử xem qua [this] (http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/table_demo.py) ví dụ? Hoặc bạn thậm chí có thể làm điều gì đó [tương tự] (http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo3.html), nhưng thay vì chú thích, bạn có một bảng. – cosmosis

+0

Có tôi đã xem ví dụ đó. Khi tôi cố gắng sử dụng mã, tôi không thể chỉ định màu và vị trí của hàng. Tôi cũng không thể tìm thấy bất kỳ trợ giúp nào về cú pháp hoặc loại cho cuộc gọi. Đối với chú thích, tôi tin rằng có nhiều kiểm soát xác định một trục thứ hai để vẽ bảng trong. – user1032355

Trả lời

40

AFAIK, bạn không thể tùy tiện nơi một bảng trên matplotlib cốt truyện chỉ sử dụng có nguồn gốc matplotlib tính năng. Những gì bạn có thể làm là tận dụng khả năng của latex text rendering. Tuy nhiên, để làm được điều này bạn nên làm việc với môi trường latex trong hệ thống của bạn. Nếu bạn có, bạn sẽ có thể tạo ra các đồ thị như dưới đây:

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

Kết quả là:

enter image description here

Xin hãy nhớ rằng đây là một ví dụ quick'n'dirty; bạn sẽ có thể đặt bảng một cách chính xác bằng cách chơi với các tọa độ văn bản. Xin vui lòng tham khảo các docs nếu bạn cần thay đổi phông chữ vv

UPDATE: thêm về pyplot.table

Theo documentation, plt.table thêm một bảng để trục hiện hành. Từ các nguồn hiển nhiên, vị trí bảng trên biểu đồ được xác định liên quan đến các trục. Có thể kiểm soát tọa độ Y với từ khóa top (biểu đồ trên), upper (ở nửa trên), center (ở giữa), lower (ở nửa dưới) và bottom (bên dưới biểu đồ). Tọa độ X được kiểm soát với từ khóa leftright. Bất kỳ kết hợp nào của hai tác phẩm, ví dụ: bất kỳ của top left, center rightbottom là OK để sử dụng.

Vì vậy, đồ thị gần nhất với những gì bạn muốn có thể được thực hiện với:

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

Và điều này mang đến cho bạn

enter image description here

Hope this helps!

+0

Cảm ơn Andrey, Điều này cung cấp một giải pháp khả thi cho probelem. Tuy nhiên tôi không thể tìm thấy bất kỳ cuộc thảo luận/tài liệu nào về khả năng pyplot.table hoặc matplotlib.Table.table trong matplotlib. Tôi muốn xem ai đó giải quyết một cách rõ ràng câu hỏi Bảng. – user1032355

+0

Nếu bạn muốn xem thêm về pyplot.table, vui lòng kiểm tra cập nhật. –

+0

Cảm ơn bạn Andrey! Bạn không chỉ trả lời câu hỏi một cách rõ ràng và hoàn toàn mà tôi hoàn toàn bỏ qua tài liệu matplotlib.pyplot.table. Cảm ơn câu trả lời và hướng dẫn rõ ràng. – user1032355

5

Tôi không chắc liệu các câu trả lời trước đó có đáp ứng được câu hỏi của bạn hay không, tôi cũng đang tìm cách thêm bảng vào cốt truyện và thấy khả năng khắc phục giới hạn "loc". Bạn có thể sử dụng hộp bounding để kiểm soát vị trí chính xác của bảng (điều này chỉ chứa các tạo bảng nhưng nên là đủ):

 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) 

Và kết quả là (tôi không có uy tín để đăng hình ảnh vì vậy đây là một liên kết): http://www.viresco.pl/media/test.png.

Lưu ý rằng các đơn vị bbox được chuẩn hóa (không theo thang đo).

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