Я пытаюсь построить диаграммы networkx из кадра данных pandas с массивом позиций для узлов при рисовании.Проблема, с которой я сталкиваюсь, заключается в том, чтобы включить столбцы панд в качестве атрибутов ребер.Если столбец атрибута имеет тип float, он преобразует значение идентификаторов узлов (int) в типы с плавающей точкой, что затем вызывает проблемы при индексации в массиве позиций для функций рисования networkx.
Возможно, это можно исправить путем явного добавления атрибутов после создания узлов и ребер, но я чувствую, что для этого должен быть способ, поэтому я упускаю что-то очевидное.
Спасибо за вашу помощь.
import networkx as nx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#set up datae frame
UpNodes =np.array([0,0,1,1,2,2,6,6,8,8,10], dtype=np.int)
DownNodes=np.array([1,2,3,4,4,5,7,8,9,10,11], dtype=np.int)
ORDER =np.array([2,1,1,1,3,2,1,1,1,2,3],dtype=np.float) #toggle this from int to float
df=pd.DataFrame(
{'UpNodes': UpNodes,
'DownNodes':DownNodes,
'ORDER': ORDER},
columns=['UpNodes','DownNodes','ORDER'])
#create array of spatial positions for nodes
pos=np.array(
[[ 0., 0. ],
[ 1., 0.5 ],
[ 1., -0.5 ],
[ 2., 1. ],
[ 2., 0.25],
[ 2., -1. ],
[ 3., 2. ],
[ 4., 3. ],
[ 4., 1. ],
[ 5., 2. ],
[ 5., 0. ],
[ 6., 0. ]]
)
plt.figure('Im a plot')
print df
print df.dtypes
G=nx.from_pandas_edgelist(df,'UpNodes','DownNodes','ORDER')
print G.edges
nx.draw(G, pos, node_size=90, with_labels=False)
print 'Done'
plt.show()