如何在python(pyqtgraph)中创建一个图形,其中verticies显示图像?

时间:2015-04-16 18:01:25

标签: python pyqtgraph

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

我正在使用它来可视化中型到大型的聚类问题,所以我希望我使用的任何后端最好非常快(所以networkx似乎不会削减它)。

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

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

如果我可以用鼠标移动节点也会很酷,但如果我必须在自己身上构建它,那么再次,不是世界末日。我只需要一个起点。

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

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','+']

有关如何执行此操作的任何意见或建议?

1 个答案:

答案 0 :(得分:0)

PyQtGraph不支持这个,但它将是一个非常好的功能。如果查看graphicsItems/ScatterPlotItem.py,则顶部附近是一个名为renderSymbol()的函数,它根据用户指定的符号参数生成QImage。你可以通过添加:

来修改它
if isinstance(symbol, QtGui.QImage):
    return symbol

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