2011-11-22 28 views
6

Tôi đang sử dụng matplotlib với chế độ tương tác bật và đang thực hiện tính toán, nói tối ưu hóa với nhiều bước mà tôi vẽ các kết quả trung gian ở mỗi bước để gỡ lỗi. Những ô này thường lấp đầy màn hình và chồng chéo lên một mức độ lớn.Nhận các ô matplotlib để làm mới trên tiêu điểm chuột

Vấn đề của tôi là trong quá trình tính toán, các số liệu bị che khuất một phần hoặc hoàn toàn không làm mới khi tôi nhấp vào chúng. Chúng chỉ là một màu xám trắng.

Tôi muốn buộc vẽ lại nếu cần thiết khi tôi nhấp vào một hình, nếu không sẽ không hữu ích khi hiển thị nó. Hiện tại, tôi chèn mã pdb.set_trace() vào trong mã để tôi có thể dừng và nhấp vào tất cả các số liệu để xem điều gì đang xảy ra

Có cách nào để ép matplotlib vẽ lại một hình bất cứ khi nào nó tập trung chuột hoặc được thay đổi kích cỡ, ngay cả khi nó đang bận làm cái gì khác?

Trả lời

0

Bạn đã thử gọi plt.figure(fig.number) trước khi vẽ trên hình figplt.show() sau khi vẽ đồ thị? Nó sẽ cập nhật tất cả các số liệu.

+0

Không , Tôi chưa thử dùng plt.show(). Nhìn vào tài liệu về việc sử dụng nó (http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show), nó không giống như nó sẽ có hiệu quả mong muốn. – Paul

+0

@Paul Nếu bạn có plt.ion(), show() nên gọi draw() ngầm. Hãy chắc chắn để chạy plt.figure (fig.number) đầu tiên, bạn tìm sjould được tự động cập nhật. –

1

Something như thế này có thể làm việc cho bạn:

import matplotlib.pyplot as plt 
import numpy as np 

plt.ion() # or leave this out and run with ipython --pylab 

# draw sample data 
fig = plt.figure() 
ax = fig.add_subplot(111) 
line, = ax.plot(np.random.rand(10)) 

class Refresher: 
    # look for mouse clicks 
    def __init__(self, fig): 
     self.canvas = fig.canvas 
     self.cid = fig.canvas.mpl_connect('button_press_event', self.onclick) 

    # when there is a mouse click, redraw the graph 
    def onclick(self, event): 
     self.canvas.draw() 

# remove sample data from graph and plot new data. Graph will still display original trace 
line.remove() 
ax.plot([1,10],[1,10]) 

# connect the figure of interest to the event handler 
refresher = Refresher(fig) 
plt.show() 

này sẽ vẽ lại hình bất cứ khi nào bạn bấm vào biểu đồ.

Bạn cũng có thể thử nghiệm với sự kiện khác xử lý như

  • ResizeEvent - con số vải được thay đổi kích cỡ
  • LocationEvent - chuột vào một nhân vật mới

séc ra here hơn:

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