2017-11-10 13 views
0

현재 X 축을 따라 곡선을 통과하는 대화 형 시간 추적 선을 만들기 위해 노력하고 있습니다.Pyqtgraph에서 대화 형 시간 추적기 플로팅

문제 :하기 matplotlib에서 애니메이션을 사용하여 해당 코드를 할 수 있었다,하지만 라인 이동을 할 수 있었다 (즉, 그것이 상호 작용하지 않습니다).

import numpy as np 
import csv 
import csv_splitter 
import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib import animation 
import matplotlib.colors as cm 
from scipy import interpolate 
from scipy import ndimage 
from PIL import Image 
import cv2 
import os 
plt.rcParams['animation.ffmpeg_path'] = unicode ('C:/FFMPEG/bin/ffmpeg.exe') 

with open('C:/Users/jkspu/Desktop/Force.csv','r') as input, open('C:/Users/jkspu/Desktop/Op.csv', 'w') as output: 
    try: 
     read = csv.reader(input) 
     for r in read: 
      non_blank = (line for line in input if line.strip())    
      for i in range(17): 
       next(read)     
      output.writelines(non_blank) 
    finally: 
     print("Done!") 

data_orig = np.genfromtxt('C:/Users/jkspu/Desktop/Op.csv', dtype =int, delimiter = ",") 
fig = plt.figure() 
X = data_orig[412:524,1] 
Y1 = data_orig[412:524,4] 
Y2 = data_orig[412:524,3] 
Y3 = data_orig[412:524,2] 

plt.plot(X, Y1, 'r--', X, Y2, 'b--', X, Y3, 'g--') 
plt.xlabel('Time -----> (ms)') 
plt.ylabel('Force Data -----> (N)') 

X_MIN = 2055 
X_MAX = 2615 
Y_MIN = -300 
Y_MAX = 1500 
X_VALS = range(X_MIN, X_MAX+1); 


def update_line(num, line): 
    i = X_VALS[num] 
    line.set_data([i, i], [Y_MIN, Y_MAX]) 
    return line, 

l , v = plt.plot(2055, -200, 2615, 1200, linewidth=2, color= 'gold') 
anim = animation.FuncAnimation(fig, update_line, len(X_VALS), fargs=(l,), interval=15, blit=True, repeat=False) 
print(update_line) 

FFwriter = animation.FFMpegWriter(fps=30, extra_args=['-vcodec', 'libx264']) 
anim.save('basic_animation.mp4', writer = FFwriter) 
plt.show() 

목표 : 나뿐만 아니라 그것을 이동으로 대화 시간 추적 선을 만들기 위해 관심을 가질만한 (애니메이션 남아있다). 이를 위해 필자는 Pyqtgraph (대화식 솔루션을 찾기를 희망 함)를 사용하려고합니다.

내가 사용한 코드는이 (하지만이 코드에서하기 matplotlib 애니메이션에 연결하는 방법을 모른다)입니다 :

import numpy as np 
import csv 
import csv_splitter 
import cv2 
import os 

from pyqtgraph.Qt import QtGui, QtCore 
import numpy as np 
import pyqtgraph as pg 

app = QtGui.QApplication([]) 

with open('C:/Users/jkspu/Desktop/Force.csv','r') as input, open('C:/Users/jkspu/Desktop/Op.csv', 'w') as output: 
    try: 
     read = csv.reader(input) 
     for r in read: 
      non_blank = (line for line in input if line.strip())    
      for i in range(17): 
       next(read)     
      output.writelines(non_blank) 
    finally: 
     print("Done!") 

data_orig = np.genfromtxt('C:/Users/jkspu/Desktop/Op.csv', dtype =int, delimiter = ",") 

win = pg.GraphicsWindow(title="Plot") 
win.resize(1000, 600) 
win.setWindowTitle('First_Plot') 
p1 = win.addPlot(title="Parametric, grid enabled") 
X = data_orig[412:524,1] 
Y1 = data_orig[412:524,4] 
Y2 = data_orig[412:524,3] 
Y3 = data_orig[412:524,2] 

p1.plot(X, Y1, pen = 'r') 
p1.plot(X, Y2, pen = 'b') 
fig = p1.plot(X, Y3, pen = 'g') 

p1.setLabel('left', "Y Axis", units = 'N') 
p1.setLabel('bottom', "X Axis", units = 'ms') 






if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 

어떻게 이상적으로 기대된다의 그림 :

Image

요청 : 내가 친절 Pyqtgraph에서 애니메이션 라인 (+ 상호 작용뿐만 아니라)을 가진 일부 전문 지식을 물어 봐도 될까요?

나는 분명히있을 수 있으면 좋겠다. 제발 친절하게 알려주세요, 고마워요!

+0

pyqtgraph 또는 matplotlib를 사용할지 여부를 결정해야합니다. 둘 다 불가능합니다. – ImportanceOfBeingErnest

+0

예, Pyqtgraph를 원합니다. 대화 형 시간 추적 라인을 사용하여 온라인에서 많은 도움을 얻을 수 없었습니다. 그러나 나의 호기심 때문에, Matplotlib에서 그것을 할 수 있습니까? (내가 의미하는 인터 액티비티). – Jeremy

+0

둘 다 가능합니다. 그렇습니다. 이 질문은 어떤 잠재 고객에게도 어필 할 수 없으므로 여기에서 필요하지 않은 태그를 제거하는 것이 좋습니다. matplotlib 전문가는 pyqtgraph에 대해 아무 것도 모를 수 있으며 pyqtgraph 전문가는 matplotlib 항목에 대해 혼란 스러울 수 있습니다. – ImportanceOfBeingErnest

답변

0

난 당신이 할 수 있도록하려는 것 같아요 :

1) 사용자가 드래그 할 수 있습니다 수직선을 추가합니다. 이를 위해서, 시도하십시오

vline = p1.addLine(x=0, movable=True) 

2) 수직선이 플롯 커브와 교차하는 곳에서는 마커를 그립니다. 행이 이동할 때마다 나오는 신호에 연결하여 수동으로 수행 할 수 있습니다.

def update(line): 
    x = line.value() 
    # find and plot intersection points 

vline.sigPositionChanged.connect(update)