【问题标题】:How to change attributes of a networkx / matplotlib graph drawing?如何更改 networkx / matplotlib 图形绘图的属性?
【发布时间】:2012-11-17 20:48:48
【问题描述】:

NetworkX 包含functions 用于使用matplotlib 绘制图形。这是一个使用出色的 IPython Notebook 的示例(以 ipython3 notebook --pylab inline 开头):

很好,首先。但是如何影响绘图的属性,例如颜色、线宽和标签?我以前没有使用过 matplotlib。

【问题讨论】:

标签: python matplotlib networkx ipython-notebook


【解决方案1】:

IPython 是找出函数(和对象)可以做什么的好工具。如果你输入

[1]: import networkx as nx
[2]: nx.draw?

你看

定义:nx.draw(G, pos=None, ax=None, hold=None, **kwds)

**kwds: optional keywords
   See networkx.draw_networkx() for a description of optional keywords.

如果你因此输入

[10]: nx.draw_networkx?

你会看到

node_color: color string, or array of floats
edge_color: color string, or array of floats
width: float
   Line width of edges (default =1.0)
labels: dictionary
   Node labels in a dictionary keyed by node of text labels (default=None)

因此,有了这些信息和一些实验,不难得出:

import matplotlib.pyplot as plt
import numpy as np
import networkx as nx
import string

G = nx.generators.erdos_renyi_graph(18, 0.2)
nx.draw(G,
        node_color = np.linspace(0,1,len(G.nodes())),
        edge_color = np.linspace(0,1,len(G.edges())),
        width = 3.0,
        labels = {n:l for n,l in zip(G.nodes(),string.ascii_uppercase)}
        )
plt.show()

产生

【讨论】:

  • 谢谢。我将不得不对此进行试验。我对将边缘权重映射到线宽特别感兴趣。
  • 要具有可变线宽,我认为您需要为每个宽度调用一次nx.draw_networkx_edges。有关示例,请参阅here。他们在那里更改了线条样式,但它显示了您还可以更改宽度的位置。
  • 太好了,您不仅回答了问题,还解释了如何获得答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2018-07-28
相关资源
最近更新 更多