0
おはよう!私はpyqtgraph
を使って時間描画の木プロットを作成しようとしていて、pyqtgraphの例ではCustomGraphItem
とQTimer
のチュートリアルしか見つかりませんでした。私は頂点と辺のレイアウトを時間からどのようにするかを見つける方法がありません。私はいくつかの秒間隔でそれらを寝かせる必要があります。コードを教えてもらえますか、これをどうやって作るのかアドバイスできますか?私のコードは、例と非常によく似ていますpyqtgraphのグラフの時間依存レイアウト
# -*- coding: utf-8 -*-
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import time
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
w = pg.GraphicsWindow()
w.setWindowTitle('pyqtgraph example: CustomGraphItem')
v = w.addViewBox()
v.setAspectLocked()
class Graph(pg.GraphItem):
def __init__(self):
self.dragPoint = None
self.dragOffset = None
self.textItems = []
pg.GraphItem.__init__(self)
self.scatter.sigClicked.connect(self.clicked)
def setData(self, **kwds):
self.text = kwds.pop('text', [])
self.data = kwds
if 'pos' in self.data:
npts = self.data['pos'].shape[0]
self.data['data'] = np.empty(npts, dtype=[('index', int)])
self.data['data']['index'] = np.arange(npts)
self.setTexts(self.text)
self.updateGraph()
def setTexts(self, text):
for i in self.textItems:
i.scene().removeItem(i)
self.textItems = []
for t in text:
item = pg.TextItem(t)
self.textItems.append(item)
item.setParentItem(self)
def updateGraph(self):
pg.GraphItem.setData(self, **self.data)
for i, item in enumerate(self.textItems):
item.setPos(*self.data['pos'][i])
def mouseDragEvent(self, ev):
if ev.button() != QtCore.Qt.LeftButton:
ev.ignore()
return
if ev.isStart():
# We are already one step into the drag.
# Find the point(s) at the mouse cursor when the button was first
# pressed:
pos = ev.buttonDownPos()
pts = self.scatter.pointsAt(pos)
if len(pts) == 0:
ev.ignore()
return
self.dragPoint = pts[0]
ind = pts[0].data()[0]
self.dragOffset = self.data['pos'][ind] - pos
elif ev.isFinish():
self.dragPoint = None
return
else:
if self.dragPoint is None:
ev.ignore()
return
ind = self.dragPoint.data()[0]
self.data['pos'][ind] = ev.pos() + self.dragOffset
self.updateGraph()
ev.accept()
def clicked(self, pts):
print("clicked: %s" % pts)
g = Graph()
v.addItem(g)
## Define positions of nodes
pos = np.array([
[5, 10],
[3, 8],
[8, 8],
[10, 10],
[-5, 0],
[6, 5],
], dtype=float)
## Define the set of connections in the graph
adj = np.array([
[0, 1],
[1, 3],
[3, 0],
[2, 0],
[1, 5],
[1, 5],
[5, 4],
])
## Define the symbol to use for each node (this is optional)
symbols = ['o', 'o', 'o', 'o', 't', '+']
## Define the line style for each connection (this is optional)
lines = np.array([
(255, 0, 0, 255, 1),
(255, 0, 255, 255, 2),
(255, 0, 255, 255, 3),
(255, 255, 0, 255, 2),
(255, 0, 0, 255, 1),
(255, 255, 255, 255, 8),
(200, 235, 150, 255, 4),
], dtype=[('red', np.ubyte), ('green', np.ubyte), ('blue', np.ubyte), ('alpha', np.ubyte), ('width', float)])
## Define text to show next to each symbol
texts = ["Point %d" % i for i in range(6)]
## Update the graph
g.setData(pos=pos, adj=adj, pen=lines, size=1, symbol=symbols, pxMode=False, text=texts)
timer = pg.QtCore.QTimer()
def update():
g.plot(x, y, clear=True)
timer.timeout.connect(update)
timer.start(16)
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()