Получение графиков matplotlib для обновления на фокусе мыши - PullRequest
6 голосов
/ 22 ноября 2011

Я использую matplotlib с включенным интерактивным режимом и выполняю вычисления, скажем, оптимизацию, состоящую из множества этапов, где я выстраиваю промежуточные результаты на каждом этапе для целей отладки.Эти графики часто заполняют экран и в значительной степени перекрывают друг друга.

Моя проблема в том, что во время вычислений частично или полностью закрытые фигуры не обновляются при нажатии на них.Они просто пустые серые.

Я бы хотел перерисовать при необходимости, когда я нажимаю на фигуру, в противном случае его не нужно отображать.В настоящее время я вставляю pdb.set_trace () в код, чтобы я мог остановиться и щелкнуть все цифры, чтобы увидеть, что происходит

Есть ли способ заставить matplotlib перерисовывать фигуру всякий раз, когда она получаетфокус мыши или изменен, даже когда он занят чем-то другим?

Ответы [ 2 ]

1 голос
/ 08 октября 2012

Что-то вроде этого может работать для вас:

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

Это будет перерисовывать фигуру всякий раз, когда вы нажимаете на график.

Вы также можете поэкспериментировать с другими событиями, такими как

  • ResizeEvent - изменен размер холста фигуры
  • LocationEvent - мышь вводит новую фигуру

проверить больше здесь :

0 голосов
/ 22 ноября 2011

Вы пытались позвонить plt.figure(fig.number) перед нанесением на фигуру fig и plt.show() после нанесения фигуры? Следует обновить все цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...