簡體   English   中英

基於度中心性度量更改networkx中圖形的顏色和大小

[英]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()

Output: 在此處輸入圖像描述

我強烈建議使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM