【问题标题】:How can I create a graph in python (pyqtgraph) where verticies display images?如何在 python (pyqtgraph) 中创建一个顶点显示图像的图形?
【发布时间】:2015-05-01 21:05:04
【问题描述】:

我想使用 python 构建一个交互式图形(如 G = (V, E) 中的顶点和边),并且我想在每个顶点的顶部显示图像。

我正在使用它来可视化中型到大型集群问题,所以我希望我使用的任何后端都非常快(因此 networkx 似乎无法解决它)。

我基本上是在寻找创建一组顶点并为每个顶点分配一个图像(或图像的路径,或创建图像的函数)。然后我想指定顶点及其权重之间的连接。

如果我必须指定每个顶点的位置,这不是世界末日,但理想情况下,我希望使用图表上的权重自动生成布局。

如果我可以用鼠标移动节点也会很酷,但同样,如果我必须自己构建它,那也不是世界末日。我只需要到达一个起点。

我正在使用此演示代码来构建图表。

import pyqtgraph as pg
import numpy as np

# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)

w = pg.GraphicsWindow()
w.setWindowTitle('pyqtgraph example: GraphItem')
v = w.addViewBox()
v.setAspectLocked()

g = pg.GraphItem()
v.addItem(g)

## Define positions of nodes
pos = np.array([
    [0,0],
    [10,0],
    [0,10],
    [10,10],
    [5,5],
    [15,5]
    ])

## Define the set of connections in the graph
adj = np.array([
    [0,1],
    [1,3],
    [3,2],
    [2,0],
    [1,5],
    [3,5],
    ])

## 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,4),
    ], dtype=[('red',np.ubyte),('green',np.ubyte),('blue',np.ubyte),('alpha',np.ubyte),('width',float)])

## Update the graph
g.setData(pos=pos, adj=adj, pen=lines, size=1, symbol=symbols, pxMode=False)

我尝试更改符号以使用 pyqtgraph 图像项,但这似乎不起作用。

# My Code to make an image
img = ibs.get_annot_chips(cm.qaid)
img_item = pg.ImageItem(img)
# ....
# breaks...
symbols = [img_item,'o','o','o','t','+']

关于如何做到这一点的任何意见或建议?

【问题讨论】:

  • 您遇到错误了吗?如果有,是什么?

标签: python pyqtgraph


【解决方案1】:

PyQtGraph 不支持这个,但它会是一个非常好的特性。如果您查看graphicsItems/ScatterPlotItem.py,靠近顶部的是一个名为renderSymbol() 的函数,它根据用户指定的符号参数生成一个QImage。您可以通过添加以下内容来修改它:

if isinstance(symbol, QtGui.QImage):
    return symbol

到函数的顶部,并期望一切都按预期工作(您可能还需要在其他地方更正一些类型检查)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2020-08-05
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多