如何解决使用python将简单矩阵转换为关联矩阵 用法:
我想从关联矩阵建立图网络,但是我没有关联矩阵, 我只有一个简单的Matrix.so,我的问题是:如何将一个简单的Matrix转换为一个入射矩阵以使用python绘制图形网络?
解决方法
我希望这会有所帮助,输出显示在最后
import numpy as np
import networkx as nx #version 2.2
import matplotlib.pyplot as plt
import pandas as pd
# matrix goes here
Mat = [
[0,-1,0],[1,1,1]
]
A = pd.DataFrame(Mat)
#refine rowname and colnames
nodes = ["a","b","c","d","e"]
A.index = nodes
A.columns = nodes
#create graph
G0 = nx.from_pandas_adjacency(A)
#create weight labels
combs = {}
adjc = G0.adj
for i in adjc:
suba = adjc[i]
for j in suba:
combs[(i,j)] = suba[j]['weight']
#define network structure i.e shell
nx.draw_shell(G0,with_labels=True )
nx.draw_networkx_edge_labels(G0,pos=nx.shell_layout(G0),edge_labels=combs)
plt.draw()
,
这两个矩阵都是邻接矩阵。最重要的是要知道它们是不同的数据类型:
import pandas as pd
import numpy as np
adjacency = [[0,1]]
df = pd.DataFrame(adjacency,columns = ['A','B','C','D','E'],index = ['A','E'])
这导致处理偶发事件的方法不同以及图形的结构不同:
您可以轻松地注意到,第一种方法是将节点标签自动分配给索引0、1、2、3、4。
另一个令人惊讶的事实:您无需手动收集体重。它们存储在边的weight
属性中。
用法:
您可以使用nx.get_edge_attributes(G,'weight')
访问边缘属性。这是我的图表结构的简化版本:
G = nx.from_pandas_adjacency(df)
pos = nx.circular_layout(G)
nx.draw(G,pos,with_labels=True,bbox = dict(fc="lightgreen",ec="black",boxstyle="circle",lw=3),width=2,arrowsize=30)
nx.draw_networkx_edge_labels(G,edge_labels = nx.get_edge_attributes(G,'weight'))
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。