python-3.x - 如何在 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')
解决方案
我想出了一个技巧来完成它,但不确定这是否是最好的方法:
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
推荐阅读
- excel - 使用 10^ 创建函数的 UDF 问题
- docker - 在 docker + docker spawner 上运行的 Jupyterhub - 如何添加音量
- javascript - 我们如何显示 Git 存储库中所有未被忽略的文件?
- python - 使用 yfinance 在 Tkinter 中显示大量输出
- bash - 有谁知道仅使用 BaSH 在没有 vim、emacs 或 nano 的情况下编辑文本文件的绝妙技巧?
- ruby - Ruby:在返回的对象上调用方法以检测是否使用了包装器
- db2 - 如何在if条件下通过db2中的存储过程显示2个select语句输出
- javascript - 反应渲染和状态
- python - 覆盖笔记本的继承问题 - python,tkinter
- reactjs - 如何判断用户在 React 单页应用程序中访问网站的时间?