【问题标题】:Attempting to plot invisible node in networkx, but getting black node试图在networkx中绘制不可见节点,但得到黑色节点
【发布时间】:2019-08-09 04:34:53
【问题描述】:

我想在 networkx 中绘制一个完全不可见的节点。基本上它应该就好像它没有被绘制一样。但是,由于我的代码结构,我不能轻易不绘制它。如果我可以将node_color 设置为类似于"Invisible" 会更简单。

由于 networkx 使用 matplotlib.pyplot.scatter 绘制节点,我想我会像 matplotlib 一样处理它。为此,只需将特定标记的c 参数设置为字符串"None"(参见Plotting with a transparent marker but non-transparent edge)。

这是一个示例,其中 5 个标记中有 2 个不可见:

plt.scatter(range(5), range(5), c = ["None", "black", 'red', "None", 'blue'])

让我们用 networkx 试试吧:

G = nx.erdos_renyi_graph(100,0.03) 
nodelist = list(G.nodes())   
colorlist = ["None" if node%2==0 else "red" for node in nodelist] #even nodes should be invisible
nx.draw_networkx(G, nodelist=nodelist, node_color=colorlist) 

注意偶数节点不是不可见的,它们是黑色的。

我不明白,因为当我从networkx查看source code时,相关行似乎是

node_collection = ax.scatter(xy[:, 0], xy[:, 1],
                             s=node_size,
                             c=node_color,
                             marker=node_shape,
                             cmap=cmap,
                             vmin=vmin,
                             vmax=vmax,
                             alpha=alpha,
                             linewidths=linewidths,
                             edgecolors=edgecolors,
                             label=label)

所以colorlist 应该直接发送到scatter 而不做任何更改。

谁能解释为什么会这样?为什么这些节点变黑了?

【问题讨论】:

  • 只是为了让潜在的回答者清楚 - 我的问题是“为什么节点变成黑色?”我知道仅绘制节点子集的标准 networkx 方法。

标签: python matplotlib networkx


【解决方案1】:

找到问题需要一些时间,但我能够使用 matplotlib 重现 networkx 行为:

pl.scatter(range(5), range(5), c = ["None", "black", 'red', "None", 'blue'], alpha=1.0)

Networkx 默认参数alpha=1.0(与matplotlibalpha=None 不同)。 以下对我有用:

nx.draw_networkx(G, nodelist=nodelist, node_color=colorlist, alpha=None, with_labels=False) 

感谢@Paul Brodersen 的评论:看起来不同的默认值已解决:比较2.3latest (2.4.xy) 的代码。

【讨论】:

  • 截至 5 月 19 日,networkx 中 alpha 参数的默认值为 None,但随后 @Joel 可能没有运行最新版本的 networkx。无论如何都赞成。
  • 我的测试环境版本是2.2。刚刚检查了 2.3 中的代码,它仍然是 1.0,而在最新版本中,它现在是 None。添加了这个。
  • 太好了——谢谢大家。我正在运行2.1。那我可以升级了。
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多