从单个jupyter / ipython单元格中绘制多个python-igraph图形

时间:2017-07-10 15:15:11

标签: python matplotlib jupyter-notebook ipython-notebook igraph

Similarly to this question,我想用一个ipython-notebook单元格绘制多个图形,代码如下:

win32_group

如何在笔记本上显示[1]: %matplotlib inline import igraph # it is `pip install python-igraph` on py2 import matplotlib.pyplot as plt import numpy as np [2]: # draws a graph successfully igraph.plot(igraph.Graph.Erdos_Renyi(10, .5)) [3]: for p in np.arange(.3, .8, .1): g = igraph.Graph.Erdos_Renyi(10, p) igraph.plot(g) 单元格中的多个图表?

如果我想绘制一些像这样的matplotlib图表,我似乎可以使用这个解决方案:

[3]

但这不适用于igraph图AFAICS。有没有办法将[4]: for p in np.arange(.3, .8, .1): g = igraph.Graph.Erdos_Renyi(10, p) plt.loglog(sorted(g.degree(), reverse=True), marker='o') plt.show() 转换为更熟悉的matplotlib对象?

3 个答案:

答案 0 :(得分:1)

我最终找到了这样的解决方案:

from IPython.core.display import display, SVG

for p in np.arange(.3, .8, .1):
    g = igraph.Graph.Erdos_Renyi(10, p)
    print(p)
    display(SVG(igraph.plot(g)._repr_svg_()))

同样可以用于支持_repr_svg_()_repr_png_()的任何对象,所以到目前为止这不是igraph-python限制。

答案 1 :(得分:1)

我正在使用igraph 0.8.2和Python 3.7。上面的答案对我不起作用:

TypeError: a bytes-like object is required, not 'tuple'

我找到了另一种使用临时文件并从中读取图像的方法:

import os
from IPython.display import display, Image

for p in np.arange(.3, .8, .1):
    g = ig.Graph.Erdos_Renyi(10, p)
    ig.plot(g).save('temporary.png') 
    display(Image(filename='temporary.png'))
    os.remove('temporary.png')

答案 2 :(得分:0)

如果您在较新的 Python 上使用第一个答案,您会得到:

TypeError: a bytes-like object is required, not 'tuple'

但是你只需要修改最后一行即可:

Display(SVG(igraph.plot(g)._repr_svg_()[0]))