2016-07-27 5 views
1

Matplotlib을 사용하여 연속 함수를 그리는 방법을 알 수 없습니다. 산점도를 그릴 방법이 있지만 연속적인 음모가 필요합니다.실시간으로 연속 함수 업데이트

여기 내 코드입니다 :

import matplotlib.pyplot as plt 
from matplotlib.pyplot import autoscale 
import matplotlib.animation as animation 

import numpy 


class MyPlot(): 
    def __init__(self): 
     self.index = 0 
     self.setup() 

    def setup(self): 
     plt.ion() 
     self.fig, self.ax = plt.subplots() 
     self.line = self.ax.plot([],[]) 
     autoscale() 
     plt.show() 
    def anim(self, i): 
     self.line.set_ydata(i) # update the data 
     return self.line, 
    def add(self, val): 
     print self.index, val 
     self.ax.plot(self.index, val) 
     animation.FuncAnimation(self.fig, self.anim, repeat=False) 
     plt.pause(0.05) 
     #if(self.index >= ntests): 
     self.index+=1 

if __name__== "__main__": 
    import time 
    from random import random 
    p = MyPlot() 

    for i in range(100): 
     p.add(random()) 
     time.sleep(0.5) 

이 작동하지만, 아무것도 그리지 않습니다. 그러나 플롯 자체가 크기가 조정됩니다.

+0

가능한 복제 (http://stackoverflow.com/questions/10944621/dynamically-updating-plot-in-matplotlib) –

+1

에서 찾을 수 있습니다 업데이트 가능하지만 프리젠 테이션 품질의 그래프를위한 것이지 실시간 업데이트 된 디스플레이를위한 것이 아닙니다. vispy http://vispy.org/ –

+0

@ JasonS를 살펴볼 수 있습니다. 보통 문제를 해결할 수있는 코멘트 작성자의 무능력을 다루려고 시도하기 때문에 의견을 좀 엿보세요. 그렇지 않아요. 링크 주셔서 감사합니다 :) –

답변

2

한 번에 한 점씩 만 줄을 그리기 때문에 (존재하지 않음) 아무 것도 나타나지 않습니다. self.ax.plotself.ax.scatter으로 바꾸면 제대로 표시됩니다.

라인을 실제로 원한다면 마지막 인덱스와 값을 추적하고 매번 마지막 인덱스와 값을 현재 인덱스와 값으로 연결하는 선을 그릴 수 있습니다.

는 설정에서 numpy.nanself.lastval를 초기화 라인()뿐만 아니라) (추가

self.ax.plot([self.index-1, self.index], [self.lastval, val]) 
    self.lastval = val 

을이 두 줄을 추가

+0

대답을위한 Thansk! 예, 제가 질문에서 말했듯이, 나는 산점도를 그리는 법을 알고 있습니다. 어쨌든 줄거리의 크기가 조정되기 때문에 나는 이미 단일 지점에 대해서 생각해 봤습니다. 내가이 질문에서 말했듯이, 나는 지속적인 음모가 필요하다. 실제로 두 점을 어떻게 연결할 수 있습니까? Thanks –

+0

님이 답변을 수정했습니다 – honi

+0

그게 좋습니다! 고마워요! –

2

당신은 실제로하기 matplotlib에서 선 그림에 값을 추가 할 수 있습니다 :

self.line.set_xdata(numpy.append(self.line.get_xdata(), self.index)) 
self.line.set_ydata(numpy.append(self.line.get_ydata(), val)) 

이렇게하면 사용자가 직접 부기 작업을 수행 할 필요가 없습니다.

자세한 내용은 참고하시기 바랍니다하기 matplotlib https://stackoverflow.com/a/10944967/2988730

[동적하기 matplotlib에서 플롯을 업데이트]의
관련 문제