Отображать график без сохранения с помощью Pydot
Вопрос
Я пытаюсь отобразить простой график, используя Pydot.
Мой вопрос заключается в том, что есть какой -нибудь способ отобразить график, не записывая его в файл, поскольку в настоящее время я использую функцию записи для сначала, а затем должен использовать модуль изображения для отображения файлов.
Однако есть ли способ, которым график напрямую печатается на экране без сохранения?
Кроме того, в качестве обновления я хотел бы задать в том же вопросе, что я заметил, что, хотя изображение сохраняется очень быстро, когда я использую команду Show of модуля изображения, требуется заметное время, чтобы изображение было видно .... также иногда Я получаю ошибку, что изображение не может быть открыто, потому что оно было удалено или сохранено в недоступном месте, которое не правильно, поскольку я сохраняю его на своем рабочем столе ..... кто -нибудь знает, что происходит, и есть более быстрее. Чтобы загрузить изображение .....
Большое спасибо....
Решение
Боюсь pydot
Использование graphviz
Чтобы отобразить графики. Т.е. он запускает исполняемый файл и загружает полученное изображение.
Итог - нет, вы не можете избежать создания файла.
Другие советы
Вы можете отобразить изображение из pydot
позвонив GraphViz
S. 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
из Библиотека Imaging Python