【问题标题】:Plotting graph in ipython with igraph -- "TypeError: There is no line property "layout""使用 igraph 在 ipython 中绘制图形 - “TypeError: There is no line property “layout””
【发布时间】:2014-08-09 18:04:42
【问题描述】:

我最近通过 Anaconda 发行版在运行 iPython 的 Windows 机器上安装了 igraph。我一直在关注 igraph 网站上的教程来尝试熟悉 igraph,因为我通常使用 NetworkX。但是,我在实际绘制图表时遇到了麻烦。

起初,我意识到这可能是因为我没有启用pylab inline,我收到了错误:NameError: name 'plot' is not defined

但在我启用它并尝试再次绘制图表后,我得到了错误:TypeError: There is no line property "layout"

我只是想在 iPython 中绘制我的网络,但我不确定我做错了什么。

import igraph

import cairo

g = igraph.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])

cairo.__path__
Out[4]: ['C:\\Users\\Curtis\\Anaconda\\lib\\site-packages\\cairo']

layout = g.layout_kamada_kawai()

plot(g, layout = layout)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-df59bbbf0497> in <module>()
----> 1 plot(g, layout = layout)

NameError: name 'plot' is not defined

启用pylab内联后:

pylab inline
Populating the interactive namespace from numpy and matplotlib

plot(g, layout = layout)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-df59bbbf0497> in <module>()
----> 1 plot(g, layout = layout)

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\pyplot.pyc in plot(*args, **kwargs)
   2985         ax.hold(hold)
   2986     try:
-> 2987         ret = ax.plot(*args, **kwargs)
   2988         draw_if_interactive()
   2989     finally:

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\axes.pyc in plot(self, *args, **kwargs)
   4135         lines = []
   4136 
-> 4137         for line in self._get_lines(*args, **kwargs):
   4138             self.add_line(line)
   4139             lines.append(line)

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\axes.pyc in _grab_next_args(self, *args, **kwargs)
    315                 return
    316             if len(remaining) <= 3:
--> 317                 for seg in self._plot_args(remaining, kwargs):
    318                     yield seg
    319                 return

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\axes.pyc in _plot_args(self, tup, kwargs)
    303         ncx, ncy = x.shape[1], y.shape[1]
    304         for j in xrange(max(ncx, ncy)):
--> 305             seg = func(x[:, j % ncx], y[:, j % ncy], kw, kwargs)
    306             ret.append(seg)
    307         return ret

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\axes.pyc in _makeline(self, x, y, kw, kwargs)
    255                             **kw
    256                             )
--> 257         self.set_lineprops(seg, **kwargs)
    258         return seg
    259 

C:\Users\Curtis\Anaconda\lib\site-packages\matplotlib\axes.pyc in set_lineprops(self, line, **kwargs)
    196             funcName = "set_%s" % key
    197             if not hasattr(line, funcName):
--> 198                 raise TypeError('There is no line property "%s"' % key)
    199             func = getattr(line, funcName)
    200             func(val)

TypeError: There is no line property "layout"

【问题讨论】:

    标签: python plot ipython igraph anaconda


    【解决方案1】:

    你的命令

    plot(g, layout = layout)
    

    有问题。在第一种情况下,没有plot。在第二种情况下,您已将各种内容从 matplotlib 加载到公共命名空间,而 plot 指的是 matplotlib.pyplot.plot

    您真正想调用的是igraph.plot。因此,将上面的行替换为

    igraph.plot(g, layout=layout)
    

    使用正确的功能。


    只是一个小例子:

    import igraph
    
    g = igraph.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])
    igraph.plot(g, target="/tmp/igraph_demo.png")
    

    创建:

    请注意,这会创建一个文件。如果您的plot 没有target="..." 并且屏幕上没有任何内容,则这是配置问题。解决方案取决于您的操作系统。 (igraph 使用 cairo 进行 SVG 绘图。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 2021-08-28
      相关资源
      最近更新 更多