我想使用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','+']
有关如何执行此操作的任何意见或建议?
答案 0 :(得分:0)
PyQtGraph不支持这个,但它将是一个非常好的功能。如果查看graphicsItems/ScatterPlotItem.py
,则顶部附近是一个名为renderSymbol()
的函数,它根据用户指定的符号参数生成QImage。你可以通过添加:
if isinstance(symbol, QtGui.QImage):
return symbol
到函数的顶部,并期望一切按预期工作(您可能需要在其他地方更正某些类型检查)。