У меня есть набор кластеров, и я извлек координаты центра тяжести каждого кластера и нанес их на график рассеяния. Вот координаты:
112 59
214 90
244 182
254 167
255 112
261 139
283 152
291 134
314 138
334 49
333 34
И следующий код для построения графика рассеяния:
import pylab as pl
import matplotlib.pyplot as plt
import numpy as np
data = np.loadtxt('centroid_coordinates.txt')
pl.scatter(data[:,0], data[:,1])
pl.xlabel('x-coordinate')
pl.ylabel('y-coordinate')
#print result
plt.title('Centroids')
pl.show()
... что приводит к следующему:

И теперь я хотел бы соединить узлы центроида вместе, чтобы сформировать график, чтобы показать его отношение пространственной связности. Любые предложения сделать это?
Спасибо, сейчас посмотрю.






networkx твой друг:
import matplotlib.pyplot as plt
import networkx as nx
import itertools
nodes = [[112, 59],
[214, 90],
[244, 182],
[254, 167],
[255, 112],
[261, 139],
[283, 152],
[291, 134],
[314, 138],
[334, 49],
[333, 34]]
# initialise empty graph
G = nx.Graph()
# create dictionary for node positions
positions = {}
for node, properties in enumerate(nodes):
positions[node] = properties
# add the nodes to the graph
G.add_nodes_from(positions.keys())
# list all possible combinations of nodes within the graph
edges = itertools.product(positions.keys(), positions.keys())
# and add them to the graph
G.add_edges_from(edges)
# draw nodes and edges, positioned at the centroids
nx.draw_networkx_nodes(G, pos=positions)
nx.draw_networkx_edges(G, pos=positions)
Просто быстрый вопрос. Есть ли способ не перечислять все комбинации? Достаточно простого связного графа, так как некоторые графы имеют слишком много узлов, и граф становится слишком переполненным. Ваше здоровье!
ознакомьтесь с документацией nx.draw_networkx_edges. вы можете передать дополнительный параметр edgelist, который позволяет вам указать, какие из них вы хотите показывать.
Вы можете использовать пакет Python сетьx для построения графиков и их отображения.