[英]Change Color & Size of graph in networkx based on degree centrality measure
我要做的是使用 NetworkX 庫計算度中心性,然后根據此度量更改不同節點的顏色和大小。
預期的結果是讓節點顯示為不同的 colors 和大小取決於它們的度中心性,但目前,它們只顯示默認顏色,因為我不知道我應該做什么。
我在這個項目中使用的 csv 文件可在此處獲得。 https://www.mediafire.com/file/q0kziy9h251fcjf/nutrients.csv/file
該文件目前沒有錯誤消息,除了 colors 大小沒有變化。
我目前已經嘗試考慮做某種列表理解來解決問題,但我還不確定如何做,或者如何設置顏色圖(colors 不重要)
這是我目前使用的代碼。
import networkx as nx
import matplotlib.pyplot as plt
Data = open('nutrients.csv', "r")
next(Data, None)
Graph_type = nx.Graph()
G = nx.parse_edgelist(Data, delimiter=',', create_using=Graph_type,
nodetype=str, data=(('weight', float),))
deg_centrality = nx.degree_centrality(G)
print(deg_centrality)
pos = nx.spring_layout(G)
nx.draw(G, pos)
plt.show()
H
這是一個簡單的代碼,帶有 networkx 的繪圖networkx
:
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
# create graph from data
with open("nutrients.csv", "r") as f:
G = nx.parse_edgelist(f.readlines(), delimiter=",")
# centrality
deg_centrality = nx.degree_centrality(G)
centrality = np.fromiter(deg_centrality.values(), float)
# plot
pos = nx.kamada_kawai_layout(G)
nx.draw(G, pos, node_color=centrality, node_size=centrality*2e3)
nx.draw_networkx_labels(G, pos)
plt.show()
我強烈建議使用plotly
(參見示例)進行交互。 對於這種圖表,我發現它非常有用。
這樣的事情怎么樣?
import numpy as np
import matplotlib.colors as mcolors
import matplotlib.cm as cm
cent = np.fromiter(deg_centrality.values(), float)
sizes = cent / np.max(cent) * 200
normalize = mcolors.Normalize(vmin=cent.min(), vmax=cent.max())
colormap = cm.viridis
scalarmappaple = cm.ScalarMappable(norm=normalize, cmap=colormap)
scalarmappaple.set_array(cent)
plt.colorbar(scalarmappaple)
nx.draw(G, pos, node_size=sizes, node_color=sizes, cmap=colormap)
plt.show()
我引入了一個有點隨意的縮放因子,您可以調整它以創建其他尺寸。 Numpy 用於方便縮放,但您可以使用普通 Python 執行相同操作。
顏色 map 可以更改為您喜歡的任何顏色: https://matplotlib.org/stable/tutorials/colors/colormaps.html
編輯:我設法通過調整這個答案創建了一個顏色漸變圖例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.