我想用pydot显示一个简单的图形.
我的问题是,有没有办法显示图形而不将其写入文件,因为目前我使用写入功能首先绘制,然后必须使用图像模块来显示文件.
但有没有什么方法可以直接在屏幕上打印图形而不保存?
另外作为一个更新,我想在同一个问题中问我观察到,当我使用图像模块的show命令时图像得到很快保存时,需要花费大量时间才能看到图像....有时候我得到错误,图像无法打开,因为它被删除或保存在不可用的位置,这是不正确的,因为我将它保存在我的桌面.....有谁知道发生了什么,是否有更快的方式得到图像加载.....
非常感谢....
Ioa*_*dis 22
您可以从渲染图像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)
Run Code Online (Sandbox Code Playgroud)
这是为向图中特别有用,因为该matplotlib能力networkx被严重限制为这样的图.
另请参阅此pull请求,它直接引入此类功能networkx.剩下的就是有人编写一个接口来加载和绘制生成的布局,GraphViz就像MATLAB文件交换GraphViz接口,MATLAB GraphViz布局导入器,GraphViz4Matlab.
mic*_*pes 19
这是使用IPython的简单解决方案:
from IPython.display import Image, display
def view_pydot(pdot):
plt = Image(pdot.create_png())
display(plt)
Run Code Online (Sandbox Code Playgroud)
用法示例:
import networkx as nx
to_pdot = nx.drawing.nx_pydot.to_pydot
pdot = to_pdot(nx.complete_graph(5))
view_pydot(pdot)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18389 次 |
| 最近记录: |