如何在 networkx 可视化中为不同的节点集设置不同的标签选项?
how to have different labelling option for different set of nodes in networkx visualisation?
我有一个由三组节点组成的图 1. 服务器 2. 站点 3. 用户
我想用网络内置的可视化来绘制它们。在图中,我想要用户和站的标签,但服务器没有。但是,这不起作用。当我尝试这个时:
nx.draw_networkx_nodes(network,
with_labels=False,
nodelist=self.servers_idx,
node_size=50, node_shape='s',
pos=servers_pos,
node_color='r')
nx.draw_networkx_nodes(network, with_labels=True,
nodelist=self.stations_idx,
node_size=50, node_shape='^',
pos=stations_pos,
node_color='g')
nx.draw_networkx_nodes(network, with_labels=True,
nodelist=self.users_idx,
node_size=10, node_shape='o',
pos=users_pos,
node_color='b')
得到下图:
如您所见,它显示了 none 个标签,但我已将站点和用户的 with_labels
变量值设置为 True
并且期望它会显示它们.奇怪的是,当我将所有 with_labels
设置为 True
时,它会显示所有标签。但是,如果我只将其中一个设置为 False
,则不会显示其他两个(就像我将它们全部设置为 False 一样)。有人知道这里发生了什么吗?
正如 Paul Brodersen 所说,它看起来像是一个 networkx 错误。但是你可以通过对用户和站点使用 nx.draw_networkx_labels
函数来绕过它,但对服务器则不行:
import networkx as nx
network = nx.Graph()
network.add_nodes_from([1, 2, 3, 4, 5])
# Manually create positions and indices
servers_pos = {1: (-1, 1), 2: (1, 1)}
stations_pos = {3: (0, -1), 4: (1, 0)}
users_pos = {5: (0, 0)}
servers_idx = [1, 2]
stations_idx = [3, 4]
users_idx = [5]
# Draw nodes (exactly your code, but without `with_labels` attribute)
nx.draw_networkx_nodes(network, nodelist=[1, 2], node_size=50, node_shape='s', pos=servers_pos, node_color='r')
nx.draw_networkx_nodes(network, nodelist=[3, 4], node_size=50, node_shape='^', pos=stations_pos, node_color='g')
nx.draw_networkx_nodes(network, nodelist=[5], node_size=10, node_shape='o', pos=users_pos, node_color='b')
# Manually create labels for users and stations
stations_labels = {3: 'WAKA-3', 4: 'WAKA-4'}
users_labels = {5: 'John Doe'}
nx.draw_networkx_labels(
network,
pos=stations_pos,
labels=stations_labels
)
nx.draw_networkx_labels(
network,
pos=users_pos,
labels=users_labels
)
结果如下:
我有一个由三组节点组成的图 1. 服务器 2. 站点 3. 用户 我想用网络内置的可视化来绘制它们。在图中,我想要用户和站的标签,但服务器没有。但是,这不起作用。当我尝试这个时:
nx.draw_networkx_nodes(network,
with_labels=False,
nodelist=self.servers_idx,
node_size=50, node_shape='s',
pos=servers_pos,
node_color='r')
nx.draw_networkx_nodes(network, with_labels=True,
nodelist=self.stations_idx,
node_size=50, node_shape='^',
pos=stations_pos,
node_color='g')
nx.draw_networkx_nodes(network, with_labels=True,
nodelist=self.users_idx,
node_size=10, node_shape='o',
pos=users_pos,
node_color='b')
得到下图:
如您所见,它显示了 none 个标签,但我已将站点和用户的 with_labels
变量值设置为 True
并且期望它会显示它们.奇怪的是,当我将所有 with_labels
设置为 True
时,它会显示所有标签。但是,如果我只将其中一个设置为 False
,则不会显示其他两个(就像我将它们全部设置为 False 一样)。有人知道这里发生了什么吗?
正如 Paul Brodersen 所说,它看起来像是一个 networkx 错误。但是你可以通过对用户和站点使用 nx.draw_networkx_labels
函数来绕过它,但对服务器则不行:
import networkx as nx
network = nx.Graph()
network.add_nodes_from([1, 2, 3, 4, 5])
# Manually create positions and indices
servers_pos = {1: (-1, 1), 2: (1, 1)}
stations_pos = {3: (0, -1), 4: (1, 0)}
users_pos = {5: (0, 0)}
servers_idx = [1, 2]
stations_idx = [3, 4]
users_idx = [5]
# Draw nodes (exactly your code, but without `with_labels` attribute)
nx.draw_networkx_nodes(network, nodelist=[1, 2], node_size=50, node_shape='s', pos=servers_pos, node_color='r')
nx.draw_networkx_nodes(network, nodelist=[3, 4], node_size=50, node_shape='^', pos=stations_pos, node_color='g')
nx.draw_networkx_nodes(network, nodelist=[5], node_size=10, node_shape='o', pos=users_pos, node_color='b')
# Manually create labels for users and stations
stations_labels = {3: 'WAKA-3', 4: 'WAKA-4'}
users_labels = {5: 'John Doe'}
nx.draw_networkx_labels(
network,
pos=stations_pos,
labels=stations_labels
)
nx.draw_networkx_labels(
network,
pos=users_pos,
labels=users_labels
)
结果如下: