2010-04-28 3 views
0

matplotlib에 문제가 있습니다. 처음으로 내가 draw() 함수를 실행했을 때 줄을 그립니다. 내 코드는 다음과 같다 :matplotlib은 한 번만 플롯합니다

내가 가진 graphPanel.py : (필수 요소를 제거)

class GraphPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 

     self.figure = Figure() 
     self.canvas = FigureCanvasWxAgg(self, -1, self.figure) 

     self.draw() 

    def draw(self, curves={}):  #This creates the axis and 
     if not hasattr(self, "ax"): #plots all the lines in the curve dictionary 
      self.ax = self.figure.add_subplot(111) 

     self.ax.lines = [] 

     for name, props in zip(curves.keys(), curves.values()): 
      x, y, col = props 
      line = self.ax.plot(x, y, color=col, lw=3) 

그리고 기능과 함께, graphpanel가 내장되어 전체 인터페이스를 포함하는 Main.py 파일 패널의 draw() 함수를 호출하여 커브 집합을 포함하는 사전을 제공해야합니다. 문제는이 작업을 수행하면 목록 self.ax.lines이 완전히 비워지고 plot() 전화가 걸려온 채 그대로 남아있게된다는 것입니다. 내가 초기화에 배치 draw() 호출에 포인트 사전을 넣을 경우 완벽을 그릴 것이기 때문에 그것은 단지, 클래스의 초기화에서, 내가 그것을 전화를 처음 작동하는 몇 가지 이유를 들어

.

다른 번호로 draw() 번으로 전화하면 왜 작동하지 않습니까?

내가 조금 그것을 해결이

은 내가 graphpanel을 파괴 메인 창에서 함수를했다 "해킹"내 같은 문제를 가진 사람들을 위해

답변

2

당신이 그렇지 않으면 할 것입니다. 그것은 지금 화면을 업데이트 할 수있는 캔버스를 알려

self.canvas.draw() 

를 호출해야합니다 그래서 다음 드로우 이벤트에서 (당신이 언급 한 그 끔찍한 해킹으로 인해)

-1

가 만들어 그 값 (델 graphpanel)을 삭제하고 새로운 것은 커브 데이터와 함께 사전을 보냅니다.

그런 다음 나는 창을 "흔들"(evt_size 이벤트를 강요하기 위해 크기를 1px 씩 증가시킨 다음 다시 정상으로 되돌려 놓은 다른 함수를 만들었습니다) graphpanel의 크기를 조정합니다. 그렇지 않으면 창 상단의 작은 광장입니다. 당신 자신의 무승부() 메소드의 끝에서