Source code for pyqtgraph.opengl.items.GLGraphItem

import numpy as np

from ... import functions as fn
from ...Qt import QtCore, QtGui
from ..GLGraphicsItem import GLGraphicsItem
from .GLScatterPlotItem import GLScatterPlotItem
from .GLLinePlotItem import GLLinePlotItem

__all__ = ['GLGraphItem']

[docs] class GLGraphItem(GLGraphicsItem): """A GLGraphItem displays graph information as a set of nodes connected by lines (as in 'graph theory', not 'graphics'). Useful for drawing networks, trees, etc. """
[docs] def __init__(self, parentItem=None, **kwds): super().__init__() glopts = kwds.pop('glOptions', 'translucent') self.edges = None self.edgeColor = QtGui.QColor(QtCore.Qt.GlobalColor.white) self.edgeWidth = 1.0 self.lineplot = GLLinePlotItem(parentItem=self, glOptions=glopts, mode='lines') self.scatter = GLScatterPlotItem(parentItem=self, glOptions=glopts) self.setParentItem(parentItem) self.setData(**kwds)
[docs] def setData(self, **kwds): """ Change the data displayed by the graph. Parameters ---------- edges : np.ndarray 2D array of shape (M, 2) of connection data, each row contains indexes of two nodes that are connected. Dtype must be integer or unsigned. edgeColor: color_like, optional The color to draw edges. Accepts the same arguments as :func:`~pyqtgraph.mkColor()`. If None, no edges will be drawn. Default is (1.0, 1.0, 1.0, 0.5). edgeWidth: float, optional Value specifying edge width. Default is 1.0 nodePositions : np.ndarray 2D array of shape (N, 3), where each row represents the x, y, z coordinates for each node nodeColor : np.ndarray or float or color_like, optional 2D array of shape (N, 4) of dtype float32, where each row represents the R, G, B, A values in range of 0-1, or for the same color for all nodes, provide either QColor type or input for :func:`~pyqtgraph.mkColor()` nodeSize : np.ndarray or float or int Either 2D numpy array of shape (N, 1) where each row represents the size of each node, or if a scalar, apply the same size to all nodes **kwds All other keyword arguments are given to :meth:`GLScatterPlotItem.setData() <pyqtgraph.opengl.GLScatterPlotItem.setData>` to affect the appearance of nodes (pos, color, size, pxMode, etc.) Raises ------ TypeError When dtype of edges dtype is not unisnged or integer dtype """ if 'edges' in kwds: self.edges = kwds.pop('edges') if self.edges.dtype.kind not in 'iu': raise TypeError("edges array must have int or unsigned dtype.") if 'edgeColor' in kwds: edgeColor = kwds.pop('edgeColor') self.edgeColor = fn.mkColor(edgeColor) if edgeColor is not None else None if 'edgeWidth' in kwds: self.edgeWidth = kwds.pop('edgeWidth') if 'nodePositions' in kwds: kwds['pos'] = kwds.pop('nodePositions') if 'nodeColor' in kwds: kwds['color'] = kwds.pop('nodeColor') if 'nodeSize' in kwds: kwds['size'] = kwds.pop('nodeSize') self.scatter.setData(**kwds) kwdLines = dict(width=self.edgeWidth) if self.scatter.pos is None or self.edges is None or self.edgeColor is None: kwdLines['pos'] = np.zeros((0, 3), dtype=np.float32) kwdLines['color'] = (0, 0, 0, 0) else: kwdLines['pos'] = self.scatter.pos[self.edges].reshape((-1, 3)) kwdLines['color'] = self.edgeColor self.lineplot.setData(**kwdLines) self.update()