首页 > 解决方案 > 如何在 matplotlib/networkx 中包装标记标签

问题描述

我正在尝试使用 networkx 和 matplotlib 创建网络图。我有这个代码:

nx.draw_networkx_nodes(G, graph_pos, node_size=node_size, 
                       alpha=node_alpha, node_color=node_color)
nx.draw_networkx_edges(G, graph_pos, width=edge_tickness,
                       alpha=edge_alpha, edge_color=edge_color)
nx.draw_networkx_labels(G, graph_pos, labels=labels, font_size=node_text_size,
                        font_family=text_font)
plt.show()

结果如下图: 网络图

正如您所看到的,一些标记标签很长,并且被切断了绘图的边缘。有什么方法可以包装这些标签的文本以适合绘图区域?

编辑:

数据是来自我使用以下方法导入的 .csv 文件的 45x45 矩阵:

network = pd.read_csv('Network.csv')
G = nx.from_numpy_matrix(network.values)
graph_pos = nx.nx_agraph.graphviz_layout(G, prog='neato')

标签: python-3.xmatplotlibnetworkx

解决方案


我想出了一个技巧来完成它,但不确定这是否是最好的方法:

for l in labels:
if len(labels[l]) > 55:
    indices = [i for i, x in enumerate(list(labels[l])) if x == ' ']
    indices = np.asarray(indices)
    try:
        idx = indices[indices > 55][0]
        newlabel = list(labels[l])
        newlabel.insert(idx, ' \n')
        newlabel = ''.join(newlabel)
        labels[l] = newlabel
    except:
        continue

推荐阅读