要获得所需的节点着色,涉及到参数node_color、cmap、vmin和vmax。 Colormap (cmap) 提供基于定义的 vmin 和 vmax 值范围的颜色映射。
下面是相关代码(import语句省略):
df1 = pd.DataFrame({'from': ['1', '2', '3', '4', '4', '4'], 'to': ['2', '3', '4', '5', '6', '7']})
carac = pd.DataFrame({'ID': ['1', '2', '3', '4', '5', '6', '7'], 'myvalue': ['0.1', '0.5', '0.1', '0.5', '0.1', '0.1', '0.2']})
G = nx.from_pandas_edgelist(df1, 'from', 'to', create_using=nx.Graph())
carac = carac.set_index('ID')
carac = carac.reindex(G.nodes())
nx.draw_networkx(G, with_labels=True, cmap=plt.cm.Blues, \
node_color=[np.float(t) for t in carac.myvalue.values], \
node_size=1500, edge_color='b', \
font_size=12, font_color='r', font_weight='bold', \
vmax=float(max(carac['myvalue'])), \
vmin=float(min(carac['myvalue'])))
plt.show()
输出图将与此类似:
编辑 1
这是上述代码的更新版本。它还绘制一个颜色条作为节点颜色的图例。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib as mpl
df1 = pd.DataFrame({'from': ['1', '2', '3', '4', '4', '4'], 'to': ['2', '3', '4', '5', '6', '7']})
carac = pd.DataFrame({'ID': ['1', '2', '3', '4', '5', '6', '7'], 'myvalue': ['0.1', '0.5', '0.1', '0.5', '0.1', '0.1', '0.2']})
G = nx.from_pandas_edgelist(df1, 'from', 'to', create_using=nx.Graph())
carac = carac.set_index('ID')
carac = carac.reindex(G.nodes())
# some parameters for colorbar
cmap = plt.cm.Blues
vmin = float(min(carac['myvalue']))
vmax = float(max(carac['myvalue']))
norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
# plot network
nx.draw_networkx(G, with_labels=True, cmap=plt.cm.Blues, \
node_color=[np.float(t) for t in carac.myvalue.values], \
node_size=1500, edge_color='b', \
font_size=12, font_color='r', font_weight='bold', \
vmax=vmax, \
vmin=vmin)
# create colorbar
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))
sm._A = []
cb1 = plt.colorbar(sm)
cb1.set_label('Some Units')
# hide x,y ticks
plt.xticks([])
plt.yticks([])
#set background color
plt.gca().set_facecolor('beige')
plt.show()
示例图: