Я пишу программу, которая подгоняет кривые к большим наборам координатных данных xy.Часто полезно наблюдать за ходом алгоритма, составляя график и отображая каждую итерацию в процессе подгонки.Я использую matplotlib для построения графиков.
Я хотел бы создать фигуру в главном потоке, а затем передать ее в дочерний поток, который ее отображает.Таким образом, у меня есть доступ ко всем методам и атрибутам фигуры в основном потоке.Я могу построить график, вызвав fig.gca (). Plot (), и нарисовать, вызвав fig.canvas.draw ().
Я не могу понять, как создать интерактивное графическое окно, которое показывает только рисунок, который я передаю ему.Прямо сейчас я использую matplotlib.pyplot.show (), которая отображает мою фигуру, но также отображает любые другие фигуры, которые могли быть определены в программе.Есть ли объектно-ориентированный способ создания интерактивного окна для конкретной фигуры?Я ищу решение, которое не опирается на неподдерживаемые интерфейсы в Matplotlib.
Вот пост, который похож, но он все еще не отвечает на мой вопрос: Интерактивная фигура с OO Matplotlib
Я никогда не понимал, почему matplotlib всегда кажетсяиспользовать текущие объекты (текущий рисунок, текущие оси и т. д.), а не конкретные объекты (например, почему бы не использовать matplotlib.pyplot.show (рис.), а не просто show ()?). Я думаю, что я что-то упустил.Если бы кто-то мог пролить свет на то, почему Matplotlib разработан таким образом, или как я неправильно понимаю и / или неправильно его использую, это также будет оценено.
Вот мой код:
import matplotlib.pyplot
import threading
import time
class Plotter():
def __init__(self,fig):
t = threading.Thread(target=self.PlottingThread,args=(fig,))
t.start()
def PlottingThread(self,fig):
#This line shows fig1 AND fig2 from below. I want it to show fig ONLY.
matplotlib.pyplot.show()
if __name__ == "__main__":
fig1 = matplotlib.pyplot.figure()
fig2 = matplotlib.pyplot.figure()
Plotter(fig1)
fig1.gca().clear()
fig1.gca().plot([1,2,3])
fig1.canvas.draw()