28

pydot を使用して簡単なグラフを表示しようとしています。

私の質問は、現在、書き込み関数を使用して最初に描画し、次に Image モジュールを使用してファイルを表示する必要があるため、ファイルに書き込まずにグラフを表示する方法があるということです。

ただし、グラフを保存せずに画面に直接印刷する方法はありますか??


また、更新として、この同じ質問で、Imageモジュールのshowコマンドを使用すると画像が非常に迅速に保存される一方で、画像が表示されるまでにかなりの時間がかかることを確認したいと思います....また、時々画像が削除されたか、使用できない場所に保存されたため、画像を開くことができないというエラーが表示されますが、デスクトップに保存しているため正しくありません.....何が起こっているのか知っている人はいますか?もっと速い方法はありますか?画像をロードするには.....

どうもありがとう....

4

7 に答える 7

30

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)
于 2016-04-06T22:03:36.350 に答える
27

ディスクにファイルを書き込まずに をpydot呼び出すことGraphVizで、 からイメージをレンダリングできます。dotあとはプロットするだけです。これは次のように行うことができます。

import io

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` to a `pydot` graph
pydot_graph = nx.drawing.nx_pydot.to_pydot(g)

# render the `pydot` by calling `dot`, no file saved to disk
png_str = pydot_graph.create_png(prog='dot')

# treat the DOT output as an image file
sio = io.BytesIO()
sio.write(png_str)
sio.seek(0)
img = mpimg.imread(sio)

# plot the image
imgplot = plt.imshow(img, aspect='equal')
plt.show()

これは有向グラフの場合に特に便利です。

このような機能を に直接導入するこのプル リクエストも参照してくださいnetworkx

于 2013-08-30T00:13:23.117 に答える
3

この回答(pythonで画像を表示する方法)に基づいて、ここにいくつかの行があります:

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

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

ImagePython Imaging Libraryからのものです

于 2012-11-28T21:50:32.777 に答える
0

残念ながら、グラフをレンダリングするためにpydot使用しています。graphvizつまり、実行可能ファイルを実行し、結果のイメージをロードします。

結論 - いいえ、ファイルの作成を避けることはできません。

于 2011-01-04T20:00:31.023 に答える