Отображение цвета узла и края networkx в python - PullRequest
0 голосов
/ 03 августа 2020

Я работаю с некоторыми данными с помощью Networkx и создал график, показанный здесь . Мой код ниже. Есть три вещи, по которым я хотел бы получить несколько советов:

  1. В настоящее время у меня есть узлы, раскрашенные по градусам, но я бы хотел, чтобы они раскрашивались по кластерам или аналогично «сообществу» в iGraph. Как я могу это сделать?

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

  3. Если вы присмотритесь, между некоторыми ребрами и узлами есть пробелы, как я могу это изменить? Увеличение размера узла решает эту проблему, но я думаю, что это уводит от сюжета, когда есть просто куча больших узлов, покрывающих все.

Небольшое примечание о 3): я не хотел стрелки, но их отключение также отключило возможность иметь изогнутые края (что я хотел иметь), поэтому я сделал стрелки достаточно маленькими, чтобы их нельзя было различить. Я могу подтвердить, что установка стрелок разумного размера не заполняет зазор между узлом и краем, так что проблема не в этом.

import matplotlib.pyplot as plt
import pandas as pd
import networkx as nx



df = pd.read_csv('my_path_to_data')
G = nx.from_pandas_edgelist(df, source='source', target='target', edge_attr='value', 
create_using=nx.DiGraph())

pos = nx.layout.spring_layout(G, k=0.5, iterations=200)

fig, ax = plt.subplots()
node_color = [G.degree(v) for v in G]

nodes = nx.draw_networkx_nodes(G, pos, node_size = 100, node_color= node_color, cmap='plasma', 
                               alpha = 0.99)
edges = nx.drawing.nx_pylab.draw_networkx_edges(G, pos, connectionstyle = 'arc3,rad=0.2', 
                                                alpha = 0.4, edge_color='teal', width=1, 
                                                arrows = True, arrowsize = 0.01)

ax.axis('off')
fig.set_facecolor('black')
fig.set_size_inches(9, 9) 
plt.show()

fig.savefig('data_cluster.jpg', bbox_inches='tight', facecolor=fig.get_facecolor(), dpi = 80)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...