Pregunta

Estoy tratando de mostrar un gráfico simple usando pydot.

Mi pregunta es que ¿hay alguna manera para mostrar el gráfico sin necesidad de escribir en un archivo en la actualidad que utilizar la función de escritura en primer sorteo y luego tener que utilizar el módulo de imagen para mostrar los archivos.

Sin embargo ¿hay alguna manera de que el gráfico se imprime directamente en la pantalla sin ser salvado ??


También como una actualización me gustaría preguntar en esta misma pregunta que observo que mientras la imagen se guarda muy rápidamente cuando se utiliza el comando show del módulo La imagen se necesita tiempo apreciable para la imagen que se ve ... . también a veces me sale el error de que la imagen could'nt puede abrir porque se elimina o se guarda en la ubicación no disponible, que no es correcto ya que estoy guardando en mi escritorio alguien sabe ..... hace lo que está sucediendo y es allí una manera más rápida para obtener la imagen cargada .....

Muchas gracias ....

¿Fue útil?

Solución

Estoy usos pydot miedo graphviz para hacer los gráficos. Es decir, se ejecuta el ejecutable la imagen resultante y cargas.

En pocas palabras -. No, no se puede evitar crear el archivo

Otros consejos

Se puede representar la imagen de pydot llamando GraphViz de dot sin necesidad de escribir archivos en el disco. A continuación, sólo trazar la misma. Esto puede hacerse como sigue, suponiendo g es un gráfico 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)

Esto es particularmente útil para gráficos dirigidos, porque las capacidades matplotlib de networkx son severamente limitados para este tipo de gráficos.

tirón solicitud , que introduzca dichas capacidades directamente a networkx. Lo que queda es para alguien para escribir una interfaz para la carga y trazar el diseño generado por GraphViz como los MATLAB para el archivo de intercambio GraphViz interfaz , MATLAB GraphViz Disposición importador , GraphViz4Matlab .

Aquí hay una solución sencilla utilizando IPython:

from IPython.display import Image, display

def view_pydot(pdot):
    plt = Image(pdot.create_png())
    display(plt)

Ejemplo de uso:

import networkx as nx
to_pdot = nx.drawing.nx_pydot.to_pydot
pdot = to_pdot(nx.complete_graph(5))
view_pydot(pdot)

(cómo mostrar imágenes en Python), aquí hay unas pocas líneas:

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

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

Image es del Python Imaging Library

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top