CoolFace
Apppublic

Aluode/PerceptionLabPortable

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
MultiDataPlot.py84 linesDownload Raw Back to examples
1import traceback2import numpy as np3 4import pyqtgraph as pg5from pyqtgraph.graphicsItems.ScatterPlotItem import name_list6from pyqtgraph.Qt import QtWidgets, QtCore7from pyqtgraph.parametertree import interact, ParameterTree, Parameter8import random9 10pg.mkQApp()11 12rng = np.random.default_rng(10)13random.seed(10)14 15 16def sortedRandint(low, high, size):17    return np.sort(rng.integers(low, high, size))18 19 20def isNoneOrScalar(value):21    return value is None or np.isscalar(value[0])22 23 24values = {25    # Convention 126    "None (replaced by integer indices)": None,27    # Convention 228    "Single curve values": sortedRandint(0, 20, 15),29    # Convention 3 list form30    "container of (optionally) mixed-size curve values": [31        sortedRandint(0, 20, 15),32        *[sortedRandint(0, 20, 15) for _ in range(4)],33    ],34    # Convention 3 array form35    "2D matrix": np.row_stack([sortedRandint(20, 40, 15) for _ in range(6)]),36}37 38 39def next_plot(xtype="random", ytype="random", symbol="o", symbolBrush="#f00"):40    constKwargs = locals()41    x = y = None42    if xtype == "random":43        xtype = random.choice(list(values))44    if ytype == "random":45        ytype = random.choice(list(values))46    x = values[xtype]47    y = values[ytype]48    textbox.setValue(f"x={xtype}\ny={ytype}")49    pltItem.clear()50    try:51        pltItem.multiDataPlot(52            x=x, y=y, pen=cmap.getLookupTable(nPts=6), constKwargs=constKwargs53        )54    except Exception as e:55        QtWidgets.QMessageBox.critical(widget, "Error", traceback.format_exc())56 57 58cmap = pg.colormap.get("viridis")59widget = pg.PlotWidget()60pltItem: pg.PlotItem = widget.plotItem61 62xytype = dict(type="list", values=list(values))63topParam = interact(64    next_plot,65    symbolBrush=dict(type="color"),66    symbol=dict(type="list", values=name_list),67    xtype=xytype,68    ytype=xytype,69)70tree = ParameterTree()71tree.setMinimumWidth(150)72tree.addParameters(topParam, showTop=True)73 74textbox = Parameter.create(name="text", type="text", readonly=True)75tree.addParameters(textbox)76 77win = QtWidgets.QWidget()78win.setLayout(lay := QtWidgets.QHBoxLayout())79lay.addWidget(widget)80lay.addWidget(tree)81if __name__ == "__main__":82    win.show()83    pg.exec()84 
Aluode/PerceptionLabPortable · CoolFace