Python Matploblib colorbar未在networkX中使用正确的颜色映射

Python Matploblib colorbar未在networkX中使用正确的颜色映射,python,matplotlib,networkx,Python,Matplotlib,Networkx,尝试在NetworkX图形绘制中使用给定的颜色映射时,Matplotlibcolorbar()似乎完全忽略了我定义的颜色映射,而使用了viridis import numpy as np import matplotlib.pyplot as plt import networkx as nx import itertools # Graph size m = 5 # Create a random weights weights = [ ((i, j), 2*np.random.rando

尝试在NetworkX图形绘制中使用给定的颜色映射时,Matplotlib
colorbar()
似乎完全忽略了我定义的颜色映射,而使用了
viridis

import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
import itertools

# Graph size
m = 5

# Create a random weights
weights = [ ((i, j), 2*np.random.random()-1) for i, j in itertools.product(np.arange(m), np.arange(m))]

# Create graph and set weights
G = nx.complete_graph(m)
nx.set_edge_attributes(G, dict(weights), 'weight')
edgelist, edge_color = zip(*nx.get_edge_attributes(G,'weight').items())

# Draw graph
fig, ax = plt.subplots(figsize=(5,5))
pos = nx.circular_layout(G)
nodes = nx.draw_networkx_nodes(G, pos, node_color='#aaaaaa', axes=ax)
edges = nx.draw_networkx_edges(G, pos, edgelist=edgelist, edge_color=edge_color, edge_cmap=plt.cm.coolwarm, axes=ax)
cb = plt.colorbar(edges, ax=ax)
plt.axis('off')
print(cb.cmap.name)
print
输出显示
viridis
,但我希望
coolwarm
符合定义

由于某种原因(可能是bug),
nx.draw\u networkx\u edges
返回的
cmap
被设置为
viridis
,而不是在函数调用中设置的。因此,在调用
draw\u networkx\u edges
后,我设置了:

edges.cmap = plt.cmap.coolwarm
edges.set_clim(np.min(edge_color),np.max(edge_color))
这就行了


为了便于文档编制,NetworkX版本为
2.4
。2019年10月稳定。

谢谢!这对我有用。在我的例子中,当我设置为“edge_cmap=plt.cm.jet”时,颜色映射返回为“灰色”。边缘本身的颜色很好,但颜色条不正确。我注意到上面的更正是设置

edges.cmap=plt.cm.coolwarm

在我的例子中,“set_clim”不是必需的,因为我在定义draw_networkx_边时使用了edge_vmin和edge_vmax属性