python力导向图论文_将距离矩阵可视化为图形

可能性1

我假设您需要二维图,其中节点位置之间的距离与表中提供的相同。

在python中,您可以对此类应用程序使用networkx。一般来说,有很多方法可以这样做,记住,所有的方法都是近似的(一般来说,由于给定点的成对距离,不可能创建点的二维表示),它们是某种应力最小化(或能量最小化)近似,试图找到“合理的”表示与提供的距离类似。

作为示例,您可以考虑四点示例(应用正确的离散度量):p1 p2 p3 p4

---------------

p1 0 1 1 1

p2 1 0 1 1

p3 1 1 0 1

p4 1 1 1 0

通常,绘制实际的“图”是多余的,因为您已经完全连接了一个(每对节点都已连接),所以只绘制点就足够了。import networkx as nx

import numpy as np

import string

dt = [('len', float)]

A = np.array([(0, 0.3, 0.4, 0.7),

(0.3, 0, 0.9, 0.2),

(0.4, 0.9, 0, 0.1),

(0.7, 0.2, 0.1, 0)

])*10

A = A.view(dt)

G = nx.from_numpy_matrix(A)

G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())),string.ascii_uppercase)))

G = nx.to_agraph(G)

G.node_attr.update(color="red", style="filled")

G.edge_attr.update(color="blue", width="2.0")

G.draw('distances.png', format='png', prog='neato')# Classical MDS

# N rows (objects) x p columns (variables)

# each row identified by a unique row name

d <- dist(mydata) # euclidean distances between the rows

fit <- cmdscale(d,eig=TRUE, k=2) # k is the number of dim

fit # view results

# plot solution

x <- fit$points[,1]

y <- fit$points[,2]

plot(x, y, xlab="Coordinate 1", ylab="Coordinate 2",

main="Metric MDS", type="n")

text(x, y, labels = row.names(mydata), cex=.7)

可能性2

您只想绘制一个带标记边的图形

同样,networkx可以帮助:import networkx as nx

# Create a graph

G = nx.Graph()

# distances

D = [ [0, 1], [1, 0] ]

labels = {}

for n in range(len(D)):

for m in range(len(D)-(n+1)):

G.add_edge(n,n+m+1)

labels[ (n,n+m+1) ] = str(D[n][n+m+1])

pos=nx.spring_layout(G)

nx.draw(G, pos)

nx.draw_networkx_edge_labels(G,pos,edge_labels=labels,font_size=30)

import pylab as plt

plt.show()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值