2014-11-12 5 views
1

Я пытаюсь сделать основной igraph замышляет в записной книжке IPython:igraph функция график не показывает изображения в записной книжке IPython

fn = 'misrables.gml' 
gr = igraph.Graph.Read_GML(fn) 
igraph.plot(gr) 

вместо того чтобы увидеть график, я вижу это:

Out[7]: <igraph.drawing.Plot at 0x1120d6978> 

Как убедить IPython отображать графику?

Некоторые пояснения

Инлайн matplotlib работает отлично, так что это не проблема.

Я cairo установил:

import cairo 
cairo.version 

выход: 1.10.0

Вызов _repr_svg() по результатам объекта участок в случае ошибки:

TypeError         Traceback (most recent call last) 
/Users/boris/Documents/workspace/communityAnalysis/src/utils.py in <module>() 
----> 1 z = ig.plot(gr)._repr_svg_() 

/usr/local/lib/python3.4/site-packages/igraph/drawing/__init__.py in _repr_svg_(self) 
    362   # No idea why this is needed but python crashes without 
    363   context.show_page() 
--> 364   surface.finish() 
    365   # Return the raw SVG representation 
    366   return io.getvalue() 

TypeError: string argument expected, got 'bytes' 

ответ

2

У вас есть библиотека Cairo и его Python привязки, установленные на вашей машине? Объект igraph имеет метод _repr_svg_, который должен быть достаточным для того, чтобы IPython отображал график, но _repr_svg_ использует Cairo за кулисами для рисования графика в SVG-файле, поэтому, если у вас нет Cairo, _repr_svg_, вероятно, генерирует исключение что IPython проглатывает, а затем вы получаете обычное представление repr() для сюжета.

Update: на основе обновленной почты, оказалось, что проблема заключалась в том, что _repr_svg_ не был подготовлен для Python 3.x, как он использовал StringIO объект, где BytesIO объект был бы уместным. Замена io = StringIO() на io = BytesIO() в начале функции и замена return io.getvalue() на return io.getvalue().decode() в конце решает проблему. (from io import BytesIO также необходимо в верхней части igraph/drawing/__init__.py). A bug report был подан на GitHub; проблема будет исправлена ​​в следующем выпуске.

Обновление: проблема теперь исправлена ​​в версии разработки; см. this commit для патча.

+0

Спасибо. Я думаю, что у меня есть 'cairo'. См. Мои изменения на вопрос –

+0

Можете ли вы называть '_repr_svg _()' на возвращаемом объекте «Plot» вручную и посмотреть, получаете ли вы SVG-файл в качестве строки в ответе? –

+0

Я получаю сообщение об ошибке (опять же, см. Мой отредактированный пост) –

Смежные вопросы