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

如何在Python中创建带输入输出依赖且支持Signalname交互的Chord图

Python实现带信号名展示的交互Chord图方案

完全可以实现你需要的交互效果,以下是两种可直接落地的实现方案:

方案1:基于Plotly实现(适配Notebook/网页嵌入场景)

该方案可以直接在Jupyter Notebook运行,也可以导出为独立网页,悬停弦线即可展示对应Signalname列表:

import pandas as pd
import plotly.graph_objects as go

# 导入示例数据
df = pd.DataFrame({
    'Message Out': ['A','A','B','C','C','C'],
    'Message In': ['B','B','C','D','D','D'],
    'Signalname': ['M1','M2','M3','M4','M5','M6']
})

# 聚合同流向的信号名与流量统计
agg_df = df.groupby(['Message Out','Message In']).agg(
    信号列表=('Signalname', lambda x: '<br>'.join(x)),
    流量=('Signalname', 'count')
).reset_index()

# 构建实体索引映射
all_nodes = pd.concat([df['Message Out'], df['Message In']]).unique()
node_map = {node:i for i, node in enumerate(all_nodes)}

# 构造弦图输入参数
source = agg_df['Message Out'].map(node_map).tolist()
target = agg_df['Message In'].map(node_map).tolist()
value = agg_df['流量'].tolist()
hover_text = agg_df['信号列表'].tolist()

# 绘制交互弦图
fig = go.Figure(data=[go.Sankey(
    node = dict(
        pad = 15,
        thickness = 20,
        line = dict(color = "black", width = 0.5),
        label = list(node_map.keys())
    ),
    link = dict(
        source = source,
        target = target,
        value = value,
        customdata = hover_text,
        hovertemplate = '流出实体: %{source.label}<br>流入实体: %{target.label}<br>关联信号:<br>%{customdata}<extra></extra>'
  ))])

fig.update_layout(title_text="消息流向弦图", font_size=12)
fig.show()

方案2:基于Pyvis实现(适配高自定义交互场景)

如果需要支持拖拽节点、点击弹出详情等更复杂的交互,可以用该方案生成独立交互网页:

from pyvis.network import Network

# 沿用方案1中预处理好的agg_df、node_map数据
net = Network(directed=True, height="800px", width="100%")

# 添加节点
for node in node_map.keys():
    net.add_node(node_map[node], label=node)

# 添加边并绑定信号名到悬停属性
for _, row in agg_df.iterrows():
    net.add_edge(
        node_map[row['Message Out']],
        node_map[row['Message In']],
        value=row['流量'],
        title=f"关联信号:\n{row['信号列表'].replace('<br>', '\n')}"
    )

# 生成布局并导出网页
net.barnes_hut()
net.show("message_chord.html", notebook=False)

运行后打开生成的message_chord.html文件即可使用,悬停弦线会展示所有关联的Signalname,也可以自行扩展点击事件实现更多交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03