使用Cytoscape圆形布局时如何获取各节点相对于圆周中心的夹角
Cytoscape圆形布局节点相对圆心夹角获取方法
首先确认你已对目标网络应用Circle Layout,此时节点坐标已按圆形规则排布,可通过以下两种方式获取夹角:
方法1:界面导出数据手动计算
- 导出节点坐标表:点击顶部菜单栏 文件(File)→ 导出(Export)→ 表格至文件(Table to File),选择导出
节点表(Node Table),导出时勾选X Layout Position、Y Layout Position两个属性,保存为CSV格式文件。 - 计算圆心坐标:导出的CSV中,所有节点X坐标的平均值为圆心横坐标
cx,所有节点Y坐标的平均值为圆心纵坐标cy。 - 计算单个节点夹角:对每个节点的坐标(x,y),使用反正切函数计算夹角:
弧度值公式:
angle_rad = atan2(y - cy, x - cx)
转角度值公式:angle_deg = angle_rad * 180 / π
计算得到的角度默认范围为-180°180°,如果需要统一为0°360°的范围,给负的计算结果加360即可。
方法2:通过CyREST接口自动化计算(适合批量处理场景)
确保Cytoscape已启动并开启CyREST功能(默认端口1234),可直接通过接口拉取节点坐标自动计算,Python示例代码如下:
import requests import math CYREST_BASE = "http://localhost:1234/v1" # 获取当前激活网络的ID current_network = requests.get(f"{CYREST_BASE}/networks/currentNetwork").json() network_suid = current_network["data"]["networkSUID"] # 拉取所有节点的坐标信息 node_list = requests.get(f"{CYREST_BASE}/networks/{network_suid}/nodes?column=position").json() # 计算圆心坐标 x_list = [node["position"]["x"] for node in node_list] y_list = [node["position"]["y"] for node in node_list] cx, cy = sum(x_list)/len(x_list), sum(y_list)/len(y_list) # 遍历计算每个节点的夹角 node_angle_map = {} for node in node_list: x, y = node["position"]["x"], node["position"]["y"] rad = math.atan2(y - cy, x - cx) deg = math.degrees(rad) # 转换为0-360度范围 if deg < 0: deg += 360 node_angle_map[node["data"]["name"]] = deg
注意:如果你手动拖动过圆形布局中的节点,最终计算得到的是节点当前实际位置对应的夹角,而非初始圆形布局的理论夹角,如需原始布局夹角请先重新应用一次
Circle Layout再计算。
内容的提问来源于stack exchange,提问作者SolarOsQuiere
相关产品推荐
相关产品推荐

