python - 试图在networkx中绘制不可见节点,但得到黑色节点
问题描述
我想在 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查看源代码时,相关行似乎是
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
行为matplotlib
:
pl.scatter(range(5), range(5), c = ["None", "black", 'red', "None", 'blue'], alpha=1.0)
Networkx
默认参数alpha=1.0
(与alpha=None
of不同matplotlib
)。以下对我有用:
nx.draw_networkx(G, nodelist=nodelist, node_color=colorlist, alpha=None, with_labels=False)
推荐阅读
- java - 如何在集成中使用执行器进行并行处理
- ssl - 如何在标准应用引擎中限制 1.2 版本的 SSL/TLS 协议以用于谷歌管理的 ssl
- java - 如何使用并行性来加速 URL GET 请求?
- javascript - 指向新屏幕的单元格中的 Ag-grid 按钮
- javascript - javascript中的独立离线反向地理编码库
- python - 根据索引动态获取嵌套列表
- arduino - ESP32 上的 Waveshare 电子墨水显示屏
- node.js - 在 2 个 ejs 文件之间传递选择值
- ios - Xcode 12 'carthage update' 总线错误 10 - 运行大量框架时
- variables - HUE,HIVE如何在可变环境中存储Table.Column?