Add an example of using text strings as a custom smbol in ScatterPlotItem
This commit is contained in:
parent
b6838eb8c4
commit
551ccd105c
@ -11,6 +11,7 @@ import initExample
|
|||||||
from pyqtgraph.Qt import QtGui, QtCore
|
from pyqtgraph.Qt import QtGui, QtCore
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
app = QtGui.QApplication([])
|
app = QtGui.QApplication([])
|
||||||
mw = QtGui.QMainWindow()
|
mw = QtGui.QMainWindow()
|
||||||
@ -62,10 +63,30 @@ s1.sigClicked.connect(clicked)
|
|||||||
## overhead and memory usage since each spot generates its own pre-rendered
|
## overhead and memory usage since each spot generates its own pre-rendered
|
||||||
## image.
|
## image.
|
||||||
|
|
||||||
|
TextSymbol = namedtuple("TextSymbol", "label symbol scale")
|
||||||
|
|
||||||
|
def createLabel(label, angle):
|
||||||
|
symbol = QtGui.QPainterPath()
|
||||||
|
#symbol.addText(0, 0, QFont("San Serif", 10), label)
|
||||||
|
f = QtGui.QFont()
|
||||||
|
f.setPointSize(10)
|
||||||
|
symbol.addText(0, 0, f, label)
|
||||||
|
br = symbol.boundingRect()
|
||||||
|
scale = min(1. / br.width(), 1. / br.height())
|
||||||
|
tr = QtGui.QTransform()
|
||||||
|
tr.scale(scale, scale)
|
||||||
|
tr.rotate(angle)
|
||||||
|
tr.translate(-br.x() - br.width()/2., -br.y() - br.height()/2.)
|
||||||
|
return TextSymbol(label, tr.map(symbol), 0.1 / scale)
|
||||||
|
|
||||||
|
random_str = lambda : (''.join([chr(np.random.randint(ord('A'),ord('z'))) for i in range(np.random.randint(1,5))]), np.random.randint(0, 360))
|
||||||
|
|
||||||
s2 = pg.ScatterPlotItem(size=10, pen=pg.mkPen('w'), pxMode=True)
|
s2 = pg.ScatterPlotItem(size=10, pen=pg.mkPen('w'), pxMode=True)
|
||||||
pos = np.random.normal(size=(2,n), scale=1e-5)
|
pos = np.random.normal(size=(2,n), scale=1e-5)
|
||||||
spots = [{'pos': pos[:,i], 'data': 1, 'brush':pg.intColor(i, n), 'symbol': i%5, 'size': 5+i/10.} for i in range(n)]
|
spots = [{'pos': pos[:,i], 'data': 1, 'brush':pg.intColor(i, n), 'symbol': i%5, 'size': 5+i/10.} for i in range(n)]
|
||||||
s2.addPoints(spots)
|
s2.addPoints(spots)
|
||||||
|
spots = [{'pos': pos[:,i], 'data': 1, 'brush':pg.intColor(i, n), 'symbol': label[1], 'size': label[2]*(5+i/10.)} for (i, label) in [(i, createLabel(*random_str())) for i in range(n)]]
|
||||||
|
s2.addPoints(spots)
|
||||||
w2.addItem(s2)
|
w2.addItem(s2)
|
||||||
s2.sigClicked.connect(clicked)
|
s2.sigClicked.connect(clicked)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user