为了能够可视化标签,您需要将节点属性添加到您的 networkx 图中并设置适当的样式。对于样式,您可以为所有节点定义一个以显示标签。要根据度数控制节点的大小,您需要向节点数据框添加度数列。您可以使用 networkx degree API 来做到这一点。您首先需要创建图形,然后基于 networkx degree API 重新创建节点数据框,并添加包含 degree 属性的节点属性,以便能够在考虑度数信息的情况下呈现图形。
这是完整的解决方案:
import ipycytoscape as cy
import networkx as nx
import pandas as pd
edge_data = {
'source': ['A', 'B', 'B', 'C'],
'target': ['B', 'C', 'D', 'B'],
}
link_df = pd.DataFrame.from_dict(edge_data)
node_data = {
'id': ['A', 'B', 'C', 'D', 'E']
}
node_df = pd.DataFrame.from_dict(node_data)
G = nx.from_pandas_edgelist(link_df)
node_df = pd.DataFrame(G.degree(), columns=['id', 'degree'])
nx.set_node_attributes(G, node_df.set_index('id').to_dict('index'))
cytoscapeobj = cy.CytoscapeWidget()
cytoscapeobj.graph.add_graph_from_networkx(G)
cytoscapeobj.set_style(
[
{
'selector': 'node',
'style': {
'font-family': 'helvetica',
'font-size': '20px',
'label': 'data(id)'
}
},
{
'selector': 'edge',
'style': {
'font-family': 'helvetica',
'font-size': '20px'
}
},
{
'selector': 'node[degree>0]',
'style': {
'width': '100px',
'height': '100px'
}
},
{
'selector': 'node[degree>1]',
'style': {
'width': '150px',
'height': '150px'
}
},
{
'selector': 'node[degree>2]',
'style': {
'width': '200px',
'height': '200px'
}
}
]
)
cytoscapeobj
如果您想要相对值而不是绝对值,则可以在宽度和高度中使用 % 而不是 px。