2016-07-11 4 views
4

私はsvgとしてプロットしたい非常に簡単なグラフを持っています。たとえば:中間ファイルなしでpydotグラフの出力を得ることは可能ですか?

# graph.dot 
graph { 
     a -- b; 
     b -- c; 
    } 

私は現在のファイルを読み、次のようにSVGファイルを生成するPYDOTを使用しています:

import pydot 
graphs = pydot.graph_from_dot_file('graph.dot') 
graphs[0].write_svg('graph.svg') # there is only 1 graph so the 0 index. 

はしかし、私は中間ファイルgraph.dotを必要とせずに、これを行う必要があり、 graph.svg。私はgraph.dotというコードの内容を文字列に持っています。これに対応する文字列にはsvgの出力が必要です。私の質問だけPYDOTに限定されるものではない

graph_dot = "... ..." # string, I have this 
graph_svg = convert_dot_to_svg(graph_dot) 
# i need something like convert_dot_to_svg() 

は、私のようなものが必要。もし誰かが私がこれを行うことができるウェブAPIを知っているなら、それもやります。

ありがとうございました。

+1

私はPYDOTを使用したことがありません(ただし、私はGraphvizを知っていますが)、pydotの文書を見てみると、ファイルの代わりにファイルのようなオブジェクトを使うことができます。したがって、標準の[io](https://docs.python.org/3/library/io.html)モジュールからStringIOまたはBytesIOを試す必要があります。 –

+0

@ PM2あなたは入力を取るのに 'io'を使うことができます。しかし、 'write_svg'関数をどのように置き換えるのですか? –

+0

@ PM2Ring前述のように、質問はピット自体に限定されません。 Graphvizでドット文字列に対応するsvg文字列を取得する方法を教えてください。どんな方法でも問題ありません。 –

答えて

3

pydot対象とオブジェクト上で利用可能な方法を見ていくつかのより多くの時間を過ごした後、それを考え出したことができます:

次のコードは動作します:

import pydot  
dot_string = """graph { 
        a -- b; 
        b -- c; 
       } """ 

graphs = pydot.graph_from_dot_data(dot_string) 
svg_string = graphs[0].create_svg() 
関連する問題