题
我正在尝试使用PYDOT显示一个简单的图。
我的问题是,有任何方法可以显示图形而无需将其写入文件,因为我当前使用写入功能首先绘制,然后必须使用图像模块显示文件。
但是,有什么方法可以直接在屏幕上直接打印而不会保存?
另外,作为更新,我想在同样的问题中提出,我观察到,当我使用图像模块的show命令时,图像很快就保存了,但要看到图像的时间需要明显的时间。...有时也有时我遇到了一个错误,因为它是在不正确的位置删除或保存的,因为它是不正确的,因为我在台式机上保存它,这是不正确的.......是否有人知道发生了什么,并且有更快的方法要加载图像.....
非常感谢....
解决方案
我耽心 pydot
用途 graphviz
渲染图形。即,它运行可执行文件并加载结果图像。
底线 - 不,您无法避免创建文件。
其他提示
您可以从中渲染图像 pydot
通过打电话 GraphViz
' dot
没有将任何文件写入磁盘。然后绘制它。假设这可以如下完成 g
是一个 pydot
图形:
from cStringIO import StringIO
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import networkx as nx
# create a networkx graph
G = nx.MultiDiGraph()
G.add_nodes_from([1,2] )
G.add_edge(1, 2)
# convert from networkx -> pydot
pydot_graph = G.to_pydot()
# render pydot by calling dot, no file saved to disk
png_str = pydot_graph.create_png(prog='dot')
# treat the dot output string as an image file
sio = StringIO()
sio.write(png_str)
sio.seek(0)
img = mpimg.imread(sio)
# plot the image
imgplot = plt.imshow(img, aspect='equal')
plt.show(block=False)
这对于有向图特别有用,因为 matplotlib
功能 networkx
是 受到严格限制 对于此类图。
另请参阅此 拉请求, ,将这种功能直接引入 networkx
. 。剩下的是某人编写一个接口来加载和绘制由 GraphViz
作为 MATLAB
在文件交换中 GraphViz接口, matlab graphviz布局进口商, GraphViz4Matlab
.
这是使用ipython的简单解决方案:
from IPython.display import Image, display
def view_pydot(pdot):
plt = Image(pdot.create_png())
display(plt)
示例用法:
import networkx as nx
to_pdot = nx.drawing.nx_pydot.to_pydot
pdot = to_pdot(nx.complete_graph(5))
view_pydot(pdot)
不隶属于 StackOverflow