从单个 jupyter/ipython 单元格绘制多个 python-igraph 图
Draw multiple python-igraph graphs from single jupyter/ipython cell
Similarly to this question,我想使用以下代码从单个 ipython-notebook 单元格中绘制多个图形:
[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)
如何在笔记本上显示来自 [3]
个单元格的多个图表?
如果我想像这样绘制一些 matplotlib 图表,我似乎可以使用这个解决方案:
[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()
但这不适用于 igraph 图 AFAICS。有什么方法可以将 igraph.drawing.Plot
转换为更熟悉 matplotlib 的对象吗?
我最终得到了这样的解决方案:
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_()
的对象,所以这不是 python-igraph 到目前为止的限制。
我正在使用 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')
如果您在较新的 Python 上使用第一个答案,您会得到:
TypeError: a bytes-like object is required, not 'tuple'
但是你只需要将最后一行修改为:
Display(SVG(igraph.plot(g)._repr_svg_()[0]))
Similarly to this question,我想使用以下代码从单个 ipython-notebook 单元格中绘制多个图形:
[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)
如何在笔记本上显示来自 [3]
个单元格的多个图表?
如果我想像这样绘制一些 matplotlib 图表,我似乎可以使用这个解决方案:
[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()
但这不适用于 igraph 图 AFAICS。有什么方法可以将 igraph.drawing.Plot
转换为更熟悉 matplotlib 的对象吗?
我最终得到了这样的解决方案:
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_()
的对象,所以这不是 python-igraph 到目前为止的限制。
我正在使用 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')
如果您在较新的 Python 上使用第一个答案,您会得到:
TypeError: a bytes-like object is required, not 'tuple'
但是你只需要将最后一行修改为:
Display(SVG(igraph.plot(g)._repr_svg_()[0]))