You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NetworkX环形布局节点外侧显示特征向量值尺寸的圆形

解决方案:根据环形节点位置调整外侧圆形的位置

我帮你调整了代码,现在能根据每个节点在环形布局中的位置,把橙色圆形放在对应的外侧方向(左/右/上/下),同时调整节点编号文本的位置避免重叠:

import networkx as nx
import matplotlib.pyplot as plt

# 创建随机图
G = nx.gnp_random_graph(20, 0.2)
# 计算特征向量中心性
centrality = nx.eigenvector_centrality_numpy(G)
# 创建保留三位小数的标签字典
labels = { node: '{:.3f}'.format(centrality[node]) for node in centrality }

plt.figure(figsize=(20, 20))
ax = plt.gca()
ax.set_aspect('equal')
pos = nx.circular_layout(G)

# 绘制基础图和节点标签
nx.draw(G, pos=pos, node_color='lightblue', labels=labels, with_labels=True)

for node, (x, y) in pos.items():
    rad = centrality[node] * 0.25
    # 判断节点在环形的方向,确定圆形位置
    if abs(y) > abs(x):
        # 顶部或底部节点
        if y > 0:
            # 顶部:圆在节点上方
            circle_pos = (x, y + rad)
            # 调整文本位置,放在圆的上方
            text_pos = (x - 0.012, y + rad + rad*0.5)
        else:
            # 底部:圆在节点下方
            circle_pos = (x, y - rad)
            text_pos = (x - 0.012, y - rad - rad*0.5)
    else:
        # 左侧或右侧节点
        if x > 0:
            # 右侧:圆在节点右侧
            circle_pos = (x + rad, y)
            text_pos = (x + rad + rad*0.5, y)
        else:
            # 左侧:圆在节点左侧
            circle_pos = (x - rad, y)
            text_pos = (x - rad - rad*0.5, y)
    
    # 添加圆形和节点编号文本
    circle = plt.Circle(circle_pos, radius=rad, color='orange')
    plt.text(*text_pos, node, fontsize=16, weight="bold")
    ax.add_artist(circle)

plt.show()

关键逻辑说明:

  • 方向判断:通过比较节点坐标x和y的绝对值大小,区分节点是在垂直方向(上下)还是水平方向(左右);再通过坐标的正负确定具体是上/下/左/右。
  • 位置计算:根据方向调整圆形的中心坐标——比如右侧节点的圆形中心在(x+rad, y),这样圆形会刚好贴在节点的右侧外侧;顶部节点则是(x, y+rad)。
  • 文本位置适配:把节点编号文本放在圆形的外侧(比如顶部节点的文本在圆的上方,左侧节点的文本在圆的左边),避免和圆形或节点标签重叠。

这样修改后,每个节点的橙色圆形都会出现在对应的外侧方向,而且大小由特征向量中心性值决定,完全符合你的需求~

内容的提问来源于stack exchange,提问作者nandz123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:07:33