Graphistry中多列重复节点的合并方法求助
解决Graphistry超图中同一节点跨列被重复创建的问题
你的问题出在hypergraph方法的参数设置上:当你把Previous、Current、Next分别指定为独立的entity_types时,Graphistry会将同一名称在不同列的实例识别为不同类型的节点,导致重复创建。
方案1:将所有列映射为同一实体类型(生成超边)
通过type_mapping参数把三列都归类到同一个实体类型(比如"Person"),这样同一名称无论在哪个列都会被识别为同一个节点,每行数据会生成一个连接三个节点的超边:
import pandas as pd import graphistry data = [ ["Jack", "Lauren", "Brian"], ["Lauren", "Brian", "Jaden"], ["Brian", "Jaden", "Tessa"], ] names_df = pd.DataFrame(data, columns=["Previous", "Current", "Next"]) # 统一实体类型映射 hg1 = graphistry.hypergraph( names_df, entity_types=["Person"], type_mapping={ "Previous": "Person", "Current": "Person", "Next": "Person" } ) hg1_g = hg1["graph"] hg1_g.plot()
方案2:构建显式边列表(生成两两连接的普通边)
如果需要每行生成3条两两相连的普通边(而非超边),可以先将每行数据转换成三组节点对,再直接构建图:
import pandas as pd import graphistry data = [ ["Jack", "Lauren", "Brian"], ["Lauren", "Brian", "Jaden"], ["Brian", "Jaden", "Tessa"], ] names_df = pd.DataFrame(data, columns=["Previous", "Current", "Next"]) # 生成每行对应的3条边 edges = [] for _, row in names_df.iterrows(): edges.append({"source": row["Previous"], "target": row["Current"]}) edges.append({"source": row["Current"], "target": row["Next"]}) edges.append({"source": row["Previous"], "target": row["Next"]}) edges_df = pd.DataFrame(edges) # 绑定边数据并绘图 g = graphistry.bind(source="source", target="target").edges(edges_df) g.plot()
两种方案都会生成5个唯一节点,方案1对应3条超边(每行一条),方案2对应9条普通边(每行三条),可根据你的可视化需求选择。
内容的提问来源于stack exchange,提问作者aculf
相关产品推荐
相关产品推荐

