pyqtgraph将ScatterplotItems旋转为斑点

时间:2018-03-20 09:51:57

标签: python pyqtgraph

在pyqtgraph中,您可以为每个项目或其中一大堆散点图(使用斑点)。使用大型数据集我更喜欢最后一种方法,因为图形保持清晰,并且可以移动而不会在整个屏幕上滞后。

我的问题

我的一些符号需要一个角度...这不是一个问题,但是如果我将它们分别添加到绘图中会导致一个滞后的数字。所以我的问题是我目前无法找到一种合适的方法来对整个事物进行子类化并为关键字参数“rotation”/“angle”实现一个小方法。有人已经完成了这项任务或有人有想法吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

今天再看一遍,我终于发现它太简单了:只需旋转我的符号,然后再将其添加到ScatterPlotItem即可。出于文档目的,也许还有其他苦苦挣扎的程序员的需要,摘录如下:

import numpy as np
import pyqtgraph as pg

# define a symbol bowtie style
_mos = np.asarray([
    [0.5, 0.25],
    [0.5, -0.25],
    [-0.5, 0.25],
    [-0.5, -0.25],
    [0.5, 0.25]
])
my_symbol = pg.arrayToQPath(_mos[:, 0], _mos[:, 1], connect='all')

# define color and stuff for your items
exit_item = pg.ScatterPlotItem(
    size=20,
    pen=pg.mkPen(128, 128, 128, 255),
    brush=pg.mkBrush(255, 255, 255, 255),
)

# calculate angle between two sets of points
angle = np.arctan2(np.asarray(y1-y0), np.asarray(x1-x0)) * 180/np.pi

# rotate symbol with that angle
tr = QTransform()
angle_rot = tr.rotate(angle)
my_rotated_symbol = angle_rot.map(my_symbol)

# may be a whole list of spots with different angles and positions
exit_spots = []
exit_spots.append({
                    'pos': (0, 0),
                    'symbol': my_rotated_symbol
                })

# add the spots to the item
exit_item.addPoints(exit_spots)

# create a plot and add the content
win = pg.GraphicsWindow()
plot = win.addPlot()
plot.addItem(exit_item)