没有可用于“vispy.visuals.GraphVisual”的示例。我的代码只显示空白屏幕
No example available for `vispy.visuals.GraphVisual`. My code just shows blank screen
我尝试使用谷歌搜索并将来自多个来源的示例拼凑在一起。这是我得到的:
import numpy as np
from vispy import app
from vispy import visuals
from vispy.visuals.transforms import STTransform
import networkx as nx
class Canvas(app.Canvas):
def __init__(self, **kwargs):
super().__init__(title="Simple NetworkX Graph", keys="interactive", size=(600, 600))
graph = nx.path_graph(8)
#graph = nx.adjacency_matrix(
#nx.fast_gnp_random_graph(500, 0.005, directed=True))
layout = nx.layout.circular_layout
self.matrix = nx.adjacency_matrix(graph)
self.visual = visuals.GraphVisual(
nx.adjacency_matrix(graph),
layout=layout,
line_color='white', arrow_type="angle_30",
arrow_size=30, node_symbol="disc", node_size=20,
face_color=(1, 0, 0, 0.5), border_width=0.0, animate=True,
directed=True)
self.visual.transform = STTransform((1, 1), (20, 20))
self.show()
#def on_resize(self, event):
#set_viewport(0, 0, *event.physical_size)
def on_draw(self, event):
clear(color=True, depth=True)
if __name__ == '__main__':
c = Canvas(title="Graph")
app.run()
输出是一个空白(黑色)屏幕,没有显示任何其他内容。
我的目标是使用 VisPy 显示一个简单的网络图。你让这个工作了吗?你能post你的代码/相关代码吗?
一个选项是不使用 VisPy,而是使用 matplotlib
:
import matplotlib.pyplot as plt
import networkx as nx
G = nx.path_graph(8)
nx.draw(G)
plt.show()
上面显示的图形非常快window。
另一个替代库是 grave
:
import networkx as nx
import matplotlib.pyplot as plt
from grave import plot_network
# Generate a networkx graph
graph = nx.powerlaw_cluster_graph(50, 1, .2)
# Plot it
plot_network(graph)
这似乎允许某些形式的图形交互(使用鼠标)。
您的 on_draw
方法似乎缺少最重要的部分,即调用视觉对象的绘制方法。请参阅 vispy 存储库中的图表示例:
https://github.com/vispy/vispy/blob/master/examples/basics/visuals/graph.py
以下是该示例中的方法:
@property
def visual_size(self):
return self.physical_size[0] - 40, self.physical_size[1] - 40
def on_resize(self, event):
self.visual.transform.scale = self.visual_size
vp = (0, 0, self.physical_size[0], self.physical_size[1])
self.context.set_viewport(*vp)
self.visual.transforms.configure(canvas=self, viewport=vp)
def on_draw(self, event):
self.context.clear('white')
self.visual.draw()
if not self.visual.animate_layout():
self.update()
我尝试使用谷歌搜索并将来自多个来源的示例拼凑在一起。这是我得到的:
import numpy as np
from vispy import app
from vispy import visuals
from vispy.visuals.transforms import STTransform
import networkx as nx
class Canvas(app.Canvas):
def __init__(self, **kwargs):
super().__init__(title="Simple NetworkX Graph", keys="interactive", size=(600, 600))
graph = nx.path_graph(8)
#graph = nx.adjacency_matrix(
#nx.fast_gnp_random_graph(500, 0.005, directed=True))
layout = nx.layout.circular_layout
self.matrix = nx.adjacency_matrix(graph)
self.visual = visuals.GraphVisual(
nx.adjacency_matrix(graph),
layout=layout,
line_color='white', arrow_type="angle_30",
arrow_size=30, node_symbol="disc", node_size=20,
face_color=(1, 0, 0, 0.5), border_width=0.0, animate=True,
directed=True)
self.visual.transform = STTransform((1, 1), (20, 20))
self.show()
#def on_resize(self, event):
#set_viewport(0, 0, *event.physical_size)
def on_draw(self, event):
clear(color=True, depth=True)
if __name__ == '__main__':
c = Canvas(title="Graph")
app.run()
输出是一个空白(黑色)屏幕,没有显示任何其他内容。
我的目标是使用 VisPy 显示一个简单的网络图。你让这个工作了吗?你能post你的代码/相关代码吗?
一个选项是不使用 VisPy,而是使用 matplotlib
:
import matplotlib.pyplot as plt
import networkx as nx
G = nx.path_graph(8)
nx.draw(G)
plt.show()
上面显示的图形非常快window。
另一个替代库是 grave
:
import networkx as nx
import matplotlib.pyplot as plt
from grave import plot_network
# Generate a networkx graph
graph = nx.powerlaw_cluster_graph(50, 1, .2)
# Plot it
plot_network(graph)
这似乎允许某些形式的图形交互(使用鼠标)。
您的 on_draw
方法似乎缺少最重要的部分,即调用视觉对象的绘制方法。请参阅 vispy 存储库中的图表示例:
https://github.com/vispy/vispy/blob/master/examples/basics/visuals/graph.py
以下是该示例中的方法:
@property
def visual_size(self):
return self.physical_size[0] - 40, self.physical_size[1] - 40
def on_resize(self, event):
self.visual.transform.scale = self.visual_size
vp = (0, 0, self.physical_size[0], self.physical_size[1])
self.context.set_viewport(*vp)
self.visual.transforms.configure(canvas=self, viewport=vp)
def on_draw(self, event):
self.context.clear('white')
self.visual.draw()
if not self.visual.animate_layout():
self.update()