最近使用matplotlib画图,想要使用一个三段的红-绿-蓝映射,并且带有一定梯度,就像这样:
不过,发现matplotlib中虽然带有很多映射方式,但是只有brg方式,没有rgb方式
就像这样:
nx.draw_networkx(G,pos, edge_color = edge_length, edge_cmap = plt.get_cmap('brg'))
那么怎么办呢?如果直接将[0,1]等分三段,分别是纯红、纯绿、纯蓝,是非常难看的。
于是将官网例子http://scipy.github.io/old-wiki/pages/Cookbook/Matplotlib/Show_colormaps
(这是非常好的例子,各种color map 方式都有)
修改了一下:
import matplotlib
import matplotlib.colors as col
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import numpy as np
# example 2: use the "fromList() method
startcolor = '#ff0000' #红色,读者可以自行修改
midcolor = '#00ff00' #绿色,读者可以自行修改
endcolor = '#0000ff' #蓝色,读者可以自行修改
cmap2 = col.LinearSegmentedColormap.from_list('own2',[startcolor,midcolor,endcolor])
# extra arguments are N=256, gamma=1.0
cm.register_cmap(cmap=cmap2)
# we can skip name here as it was already defined
当register_cmap执行完毕后,调用该color map 的名称 'own2',即可。
cm.get_cmap('own2')
就获得了文章开头的红-绿-蓝有过渡的颜色映射。函数自动使用插值计算0-1之间的颜色。