Я использую NetworkX для анализа и визуализации социальных сетей. Часто узлы в сети имеют связанную с ними информацию об атрибутах, такую как деление. Тем не менее, я не всегда знаю, сколько вариантов может быть для разделения атрибутов. Например, иногда в сети могут быть только 3 деления, представленные в качестве атрибутов node, в других случаях может быть 30 делений.
Я выяснил, как установить цвета node на основе атрибутов node (см. код ниже). Однако в этом примере я знал, как существуют различные варианты для группы атрибутов node (5 параметров) и автоматически устанавливать каждый цвет.
Если для атрибутов node существует только 3 или 5 параметров, нетрудно выбрать цвета атрибутов node, но это становится нереалистичным, когда есть много других опций.
Я хотел бы выяснить, как я могу автоматически выбрать оптимальные цвета атрибутов node на основе количества предоставленных опций node.
Когда-то у меня есть 5 параметров для атрибута для цвета, иначе у меня может быть 30 параметров для атрибута node для цвета, и я не хочу устанавливать каждый цвет node индивидуально.
Я не уверен, что это то, что я должен сделать с помощью функции colormap
, или если это только для узлов цвета с помощью числовых мер, таких как центральная степень.
КОД NETWORKX
import networkx as nx
pylab inline
# create an empty graph
g = nx.Graph()
# open csv edgelist and read edges into graph
for line in open('phils_network_edgelist.csv', 'rb'):
edge = line.rstrip().split(',')
g.add_edge(edge[0], edge[1])
# draw network without node color
nx.draw(g, with_labels=False, node_size=25)
# read in node attributes as list of tuples
group_attr = []
for line in open('phils_network_attribute_group.csv', 'rb'):
group_attr.append(tuple(line.rstrip().split(',')))
# convert list of tuples into a dict
group_attr_dict = dict(set(sorted(group_attr)))
# set nodes attributes
nx.set_node_attributes(g, "group", group_attr_dict)
# create empty list for node colors
node_color = []
# for each node in the graph
for node in g.nodes(data=True):
# if the node has the attribute group1
if 'group1' in node[1]['group']:
node_color.append('blue')
# if the node has the attribute group1
elif 'group2' in node[1]['group']:
node_color.append('red')
# if the node has the attribute group1
elif 'group3' in node[1]['group']:
node_color.append('green')
# if the node has the attribute group1
elif 'group4' in node[1]['group']:
node_color.append('yellow')
# if the node has the attribute group1
elif 'group5' in node[1]['group']:
node_color.append('orange')
# draw graph with node attribute color
nx.draw(g, with_labels=False, node_size=25, node_color=node_color)
СЕТЕВЫЕ ДАННЫЕ
In[58]:
g.nodes(data=True)
Out[58]:
[('BD', {'group': 'group5'}),
('WC', {'group': 'group3'}),
('BA', {'group': 'group4'}),
('WM', {'group': 'group3'}),
('JR', {'group': 'group1'}),
('JS', {'group': 'group3'}),
('JL', {'group': 'group4'}),
('JM', {'group': 'group2'}),
('JK', {'group': 'group2'}),
('JF', {'group': 'group2'}),
('JG', {'group': 'group2'}),
('JA', {'group': 'group2'}),
('JB', {'group': 'group4'}),
('JC', {'group': 'group4'}),
('RR', {'group': 'group3'}),
('RS', {'group': 'group3'}),
('TTI', {'group': 'group3'}),
('RB', {'group': 'group1'}),
('RL', {'group': 'group3'}),
('RO', {'group': 'group4'}),
('LHA', {'group': 'group2'}),
('LHI', {'group': 'group1'}),
('GF', {'group': 'group2'}),
('GB', {'group': 'group4'}),
('EM', {'group': 'group2'}),
('HR', {'group': 'group5'}),
('BS', {'group': 'group3'}),
('HH', {'group': 'group4'}),
('HA', {'group': 'group1'}),
('PS', {'group': 'group1'}),
('PW', {'group': 'group1'}),
('PB', {'group': 'group1'}),
('PC', {'group': 'group5'}),
('MFR', {'group': 'group4'}),
('JMA', {'group': 'group5'}),
('PN', {'group': 'group4'}),
('PL', {'group': 'group3'}),
('ZL', {'group': 'group4'}),
('EB', {'group': 'group2'}),
('ET', {'group': 'group3'}),
('EW', {'group': 'group1'}),
('ER', {'group': 'group3'}),
('MF', {'group': 'group3'}),
('MA', {'group': 'group4'}),
('MM', {'group': 'group2'}),
('MN', {'group': 'group4'}),
('MH', {'group': 'group3'}),
('MK', {'group': 'group2'}),
('JLA', {'group': 'group2'}),
('MP', {'group': 'group1'}),
('MS', {'group': 'group4'}),
('MR', {'group': 'group4'}),
('FI', {'group': 'group5'}),
('CJ', {'group': 'group4'}),
('CO', {'group': 'group5'}),
('CM', {'group': 'group4'}),
('CB', {'group': 'group2'}),
('CG', {'group': 'group2'}),
('CF', {'group': 'group5'}),
('CD', {'group': 'group3'}),
('CS', {'group': 'group2'}),
('CP', {'group': 'group2'}),
('CV', {'group': 'group2'}),
('KC', {'group': 'group1'}),
('KB', {'group': 'group3'}),
('SY', {'group': 'group2'}),
('KF', {'group': 'group2'}),
('KD', {'group': 'group3'}),
('KH', {'group': 'group1'}),
('SW', {'group': 'group1'}),
('KL', {'group': 'group2'}),
('KP', {'group': 'group3'}),
('KW', {'group': 'group1'}),
('SM', {'group': 'group2'}),
('SB', {'group': 'group4'}),
('DJ', {'group': 'group2'}),
('DD', {'group': 'group2'}),
('DV', {'group': 'group5'}),
('BJ', {'group': 'group3'}),
('DR', {'group': 'group2'}),
('KWI', {'group': 'group4'}),
('TW', {'group': 'group2'}),
('TT', {'group': 'group2'}),
('LH', {'group': 'group3'}),
('LW', {'group': 'group3'}),
('TM', {'group': 'group3'}),
('LS', {'group': 'group3'}),
('LP', {'group': 'group2'}),
('TG', {'group': 'group3'}),
('JCU', {'group': 'group2'}),
('AL', {'group': 'group1'}),
('AP', {'group': 'group3'}),
('AS', {'group': 'group3'}),
('IM', {'group': 'group4'}),
('AW', {'group': 'group3'}),
('HHI', {'group': 'group1'})]
In [59]:
g.edges(data=True)
Out[59]:
[('BD', 'ZL', {}),
('BD', 'JCU', {}),
('BD', 'DJ', {}),
('BD', 'BA', {}),
('BD', 'CB', {}),
('BD', 'CG', {}),
('BD', 'AS', {}),
('BD', 'MH', {}),
('BD', 'AP', {}),
('BD', 'HH', {}),
('BD', 'TM', {}),
('BD', 'CF', {}),
('BD', 'CP', {}),
('BD', 'DR', {}),
('BD', 'CV', {}),
('BD', 'EB', {}),
('WC', 'JCU', {}),
('WC', 'JS', {}),
('BA', 'JR', {}),
('BA', 'JB', {}),
('BA', 'RR', {}),
('BA', 'RS', {}),
('BA', 'LH', {}),
('BA', 'PC', {}),
('BA', 'TTI', {}),
('BA', 'PL', {}),
('BA', 'JCU', {}),
('BA', 'CF', {}),
('BA', 'EB', {}),
('BA', 'GF', {}),
('BA', 'AS', {}),
('BA', 'IM', {}),
('BA', 'BJ', {}),
('BA', 'CS', {}),
('BA', 'KH', {}),
('BA', 'SW', {}),
('BA', 'MH', {}),
('BA', 'MR', {}),
('BA', 'HHI', {}),
('WM', 'EM', {}),
('WM', 'JCU', {}),
('WM', 'CO', {}),
('WM', 'LP', {}),
('WM', 'AW', {}),
('WM', 'KD', {}),
('WM', 'TT', {}),
('WM', 'JS', {}),
('WM', 'PB', {}),
('WM', 'JM', {}),
('WM', 'MFR', {}),
('WM', 'RB', {}),
('WM', 'MR', {}),
('WM', 'DV', {}),
('WM', 'TG', {}),
('WM', 'JF', {}),
('WM', 'JMA', {}),
('WM', 'FI', {}),
('WM', 'JB', {}),
('JR', 'GF', {}),
('JR', 'MFR', {}),
('JR', 'KH', {}),
('JR', 'JB', {}),
('JS', 'EM', {}),
('JS', 'PS', {}),
('JS', 'MF', {}),
('JS', 'JCU', {}),
('JS', 'KD', {}),
('JS', 'MH', {}),
('JS', 'TTI', {}),
('JS', 'RB', {}),
('JS', 'TG', {}),
('JL', 'KB', {}),
('JL', 'MN', {}),
('JL', 'LW', {}),
('JL', 'CS', {}),
('JL', 'ET', {}),
('JL', 'ER', {}),
('JM', 'EM', {}),
('JM', 'PS', {}),
('JM', 'KD', {}),
('JM', 'CD', {}),
('JM', 'JK', {}),
('JM', 'TG', {}),
('JM', 'RO', {}),
('JM', 'CV', {}),
('JK', 'HR', {}),
('JK', 'PS', {}),
('JF', 'EM', {}),
('JF', 'PS', {}),
('JF', 'LP', {}),
('JF', 'LHA', {}),
('JF', 'CD', {}),
('JF', 'RB', {}),
('JF', 'JG', {}),
('JF', 'KF', {}),
('JG', 'CJ', {}),
('JG', 'SY', {}),
('JG', 'KF', {}),
('JG', 'LHA', {}),
('JG', 'CD', {}),
('JG', 'RB', {}),
('JG', 'BS', {}),
('JA', 'CS', {}),
('JB', 'KC', {}),
('JB', 'JCU', {}),
('JB', 'MA', {}),
('JB', 'AW', {}),
('JB', 'KWI', {}),
('JB', 'KH', {}),
('JB', 'CF', {}),
('JB', 'EB', {}),
('JB', 'PB', {}),
('JB', 'MFR', {}),
('JB', 'KW', {}),
('JB', 'RB', {}),
('JB', 'MR', {}),
('JB', 'RL', {}),
('JB', 'FI', {}),
('JB', 'JMA', {}),
('JC', 'SM', {}),
('RR', 'MS', {}),
('RR', 'SW', {}),
('RR', 'LH', {}),
('RS', 'LH', {}),
('TTI', 'JCU', {}),
('TTI', 'SW', {}),
('TTI', 'CF', {}),
('RB', 'EM', {}),
('RB', 'PS', {}),
('RB', 'SY', {}),
('RB', 'JCU', {}),
('RB', 'KD', {}),
('RB', 'CF', {}),
('RB', 'LHI', {}),
('RB', 'CD', {}),
('RB', 'MH', {}),
('RB', 'CJ', {}),
('RB', 'TG', {}),
('RB', 'EB', {}),
('RO', 'PS', {}),
('LHA', 'CJ', {}),
('LHA', 'SY', {}),
('LHA', 'KF', {}),
('LHA', 'CD', {}),
('LHI', 'PS', {}),
('LHI', 'CJ', {}),
('GF', 'KC', {}),
('GF', 'MA', {}),
('GB', 'HR', {}),
('GB', 'MM', {}),
('GB', 'LS', {}),
('EM', 'LP', {}),
('EM', 'DV', {}),
('EM', 'TG', {}),
('HR', 'MM', {}),
('HR', 'MH', {}),
('HR', 'EB', {}),
('HR', 'LS', {}),
('BS', 'CD', {}),
('HH', 'ZL', {}),
('HH', 'CB', {}),
('HH', 'CP', {}),
('HH', 'DR', {}),
('HH', 'CV', {}),
('HA', 'SM', {}),
('PS', 'KD', {}),
('PS', 'CF', {}),
('PS', 'TG', {}),
('PW', 'CM', {}),
('PW', 'TW', {}),
('PW', 'TT', {}),
('PW', 'MH', {}),
('PW', 'AL', {}),
('PW', 'MP', {}),
('PW', 'CS', {}),
('PW', 'HHI', {}),
('PW', 'EW', {}),
('PB', 'CO', {}),
('PB', 'KH', {}),
('PB', 'CF', {}),
('PB', 'MFR', {}),
('PB', 'AW', {}),
('PB', 'MA', {}),
('PC', 'CS', {}),
('PC', 'JCU', {}),
('PC', 'SW', {}),
('MFR', 'KC', {}),
('MFR', 'JCU', {}),
('MFR', 'KH', {}),
('MFR', 'MH', {}),
('MFR', 'MR', {}),
('JMA', 'KWI', {}),
('JMA', 'AW', {}),
('PN', 'SB', {}),
('PL', 'HHI', {}),
('PL', 'MK', {}),
('PL', 'LH', {}),
('ZL', 'CB', {}),
('ZL', 'AP', {}),
('ZL', 'CP', {}),
('ZL', 'DR', {}),
('ZL', 'CV', {}),
('EB', 'JCU', {}),
('EB', 'DJ', {}),
('EB', 'CM', {}),
('EB', 'SW', {}),
('EB', 'MM', {}),
('EB', 'LS', {}),
('EB', 'CS', {}),
('EB', 'CP', {}),
('EB', 'CV', {}),
('ET', 'LW', {}),
('ET', 'ER', {}),
('ET', 'KB', {}),
('EW', 'TW', {}),
('EW', 'TT', {}),
('EW', 'HHI', {}),
('EW', 'AL', {}),
('ER', 'LW', {}),
('ER', 'KB', {}),
('MA', 'KW', {}),
('MA', 'AW', {}),
('MA', 'MR', {}),
('MM', 'LS', {}),
('MH', 'JCU', {}),
('MH', 'SY', {}),
('MH', 'DJ', {}),
('MH', 'CM', {}),
('MH', 'AL', {}),
('MH', 'SW', {}),
('MH', 'CF', {}),
('MH', 'LS', {}),
('MH', 'CS', {}),
('MH', 'TG', {}),
('MH', 'CP', {}),
('MH', 'CV', {}),
('MK', 'LH', {}),
('MK', 'KL', {}),
('MK', 'JLA', {}),
('MK', 'MS', {}),
('MK', 'CS', {}),
('JLA', 'CM', {}),
('JLA', 'KL', {}),
('JLA', 'MS', {}),
('JLA', 'CS', {}),
('JLA', 'SB', {}),
('JLA', 'HHI', {}),
('MP', 'TW', {}),
('MP', 'TT', {}),
('MP', 'HHI', {}),
('MS', 'CS', {}),
('MS', 'HHI', {}),
('FI', 'KW', {}),
('FI', 'AW', {}),
('FI', 'CF', {}),
('CJ', 'SY', {}),
('CJ', 'DD', {}),
('CJ', 'CD', {}),
('CO', 'AW', {}),
('CM', 'TW', {}),
('CM', 'TT', {}),
('CM', 'AL', {}),
('CM', 'CS', {}),
('CB', 'DJ', {}),
('CB', 'CP', {}),
('CB', 'CV', {}),
('CG', 'CF', {}),
('CF', 'JCU', {}),
('CF', 'AW', {}),
('CF', 'KH', {}),
('CF', 'LH', {}),
('CF', 'AP', {}),
('CF', 'AS', {}),
('CF', 'KW', {}),
('CF', 'CS', {}),
('CF', 'CV', {}),
('CD', 'SY', {}),
('CD', 'LP', {}),
('CD', 'KF', {}),
('CS', 'JCU', {}),
('CS', 'TW', {}),
('CS', 'TT', {}),
('CS', 'AS', {}),
('CS', 'LH', {}),
('CS', 'SB', {}),
('CS', 'HHI', {}),
('CP', 'DJ', {}),
('CP', 'AP', {}),
('CP', 'DR', {}),
('CP', 'CV', {}),
('CV', 'DJ', {}),
('CV', 'AP', {}),
('CV', 'DR', {}),
('KB', 'LW', {}),
('SY', 'KF', {}),
('KF', 'AP', {}),
('KD', 'TG', {}),
('SW', 'BJ', {}),
('SW', 'IM', {}),
('SW', 'LH', {}),
('KL', 'TT', {}),
('KP', 'TM', {}),
('KW', 'JCU', {}),
('SB', 'AL', {}),
('DJ', 'TG', {}),
('BJ', 'IM', {}),
('KWI', 'AW', {}),
('TW', 'TT', {}),
('TW', 'AL', {}),
('TW', 'HHI', {}),
('TT', 'AL', {}),
('TT', 'HHI', {}),
('LH', 'JCU', {}),
('JCU', 'AP', {}),
('JCU', 'AS', {}),
('AL', 'HHI', {})]