作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试扩展我的 networkx
相对于我计算的质心,节点半径之外的标签。例如,如果我们围绕集群 {34, 5, 33}
画一个圆圈我们基本上会在每个节点和质心之间画一条线,然后沿着该向量添加 radial_pad
到它所以它有点宽。我这样做的原因是因为我在我的实际节点中添加了饼图,我一生都无法弄清楚如何让 zorder 工作以显示标签(我已将 zorder 设置为高数字,计算最大 zorder,手动添加文本对象等)。下一个最好的事情是将节点标签移到节点之外。
在与极坐标之间转换和从极坐标转换并偏移质心而不是它在原点的那一刻,几何图形有点超出我的头脑。
import matplotliob.pyplot as plt
import pandas as pd
import networkx as nx
import numpy as np
edge_data = [(9, 24, {'weight': 262.65595290640806}), (34, 5, {'weight': 143.01364809653174}), (34, 33, {'weight': 51.394542826823496}), (7, 14, {'weight': 389.22142801036125}), (0, 25, {'weight': 486.6995764468493}), (0, 30, {'weight': 233.1311348728954}), (0, 13, {'weight': 730.2831849050106}), (25, 30, {'weight': 87.14652833884263}), (25, 13, {'weight': 195.41994950707715}), (13, 30, {'weight': 131.22242872081216}), (33, 5, {'weight': 113.96755067449318}), (21, 35, {'weight': 100.30461510188701}), (21, 12, {'weight': 185.51533865658521}), (12, 35, {'weight': 106.65748950363549})]
graph = nx.Graph(edge_data)
pos = nx.nx_agraph.graphviz_layout(graph,prog="neato")
radial_pad = 1
with plt.style.context("seaborn-white"):
fig, ax = plt.subplots(figsize=(5,5))
nx.draw_networkx_nodes(graph, pos, ax=ax, node_size=500, node_color="white", edgecolors="black")
nx.draw_networkx_edges(graph, pos, ax=ax)
nx.draw_networkx_labels(graph, pos, ax=ax)
for community in nx.connected_components(graph):
centroid = np.stack(pd.Series(pos)[list(community)].map(list)).mean(axis=0)
ax.scatter(*centroid, c="black")
for node in community:
x, y = pos[node]
# How do I pad them with respect to the centroid?
radius_pad
我们添加的值以增加标签结束位置的半径 最佳答案
首先计算从质心到节点的向量:
delta = pos[node] - centroid
然后转换为单位向量:
unit_vector = delta / np.linalg.norm(delta)
最后,计算单位向量方向的偏移量,保存结果,并在新位置绘制标签:
label_pos = dict()
label_pos[node] = pos[node] + 0.05 * unit_vector
...
nx.draw_networkx_labels(graph, label_pos, ax=ax)
关于python - 如何相对于质心径向填充 matplotlib 文本对象? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67378132/
我是一名优秀的程序员,十分优秀!