Question

Je suis en train d'afficher un graphique simple à l'aide pydot.

Ma question est que est-il possible d'afficher le graphique sans l'écrire dans un fichier comme actuellement j'utiliser la fonction d'écriture au premier tirage au sort et ensuite utiliser le module d'image pour afficher les fichiers.

est cependant il possible que le graphique s'imprimé directement sur l'écran sans être sauvé ??


De plus comme une mise à jour, je voudrais demander à cette même question que je remarque que si l'image est enregistré très rapidement lorsque j'utilise la commande show du module d'image il faut du temps notable pour l'image à voir ... . parfois aussi je reçois l'erreur que l'image could'nt être ouvert car il a été supprimé ou enregistré dans l'emplacement indisponible qui ne sont pas correctes, je gardais mon bureau ..... est-ce que quelqu'un sait ce qui se passe et est là un moyen plus rapide pour obtenir l'image chargée .....

Merci beaucoup ....

Était-ce utile?

La solution

Je suis utilisations pydot peur graphviz pour rendre les graphiques. À savoir, il exécute le fichier exécutable et charge l'image résultante.

En bout de ligne. - Non, vous ne pouvez pas éviter de créer le fichier

Autres conseils

Vous pouvez rendre l'image de pydot en appelant GraphViz de dot sans écrire des fichiers sur le disque. Ensuite, il suffit de tracer il. Cela peut se faire comme suit, en supposant g est un graphique de 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)

Ceci est particulièrement utile pour les graphes orientés, parce que les capacités de matplotlib de networkx sont sévèrement limité pour ces graphiques.

Voir aussi cette demande traction , qui introduit de telles capacités directement à networkx. Ce qui reste est pour quelqu'un d'écrire une interface à la charge et tracer la mise en page générée par GraphViz que ceux pour MATLAB sur Exchange fichier GraphViz Interface , importateur Matlab GraphViz mise en page , GraphViz4Matlab .

Voici une solution simple en utilisant IPython:

from IPython.display import Image, display

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

Exemple d'utilisation:

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

Basé sur cette réponse (comment afficher des images en python), voici quelques lignes:

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

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

Image est de la Python Imaging Library

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top