我正在尝试使用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)

基于 这个答案 (如何在Python中显示图像),这里有几行:

gr = ... <pydot.Dot instance> ...

import tempfile, Image
fout = tempfile.NamedTemporaryFile(suffix=".png")
gr.write(fout.name,format="png")
Image.open(fout.name).show()

Image 来自 Python成像库

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top