如何使用 `seaborn` 调色板将 `colorbar` 添加到 `networkx`? (Python 3)
How to add `colorbar` to `networkx` using a `seaborn` color palette? (Python 3)
我正在尝试将 colorbar
添加到 networkx
绘制的 matplotlib ax
中,范围是 1
(最轻)和 3
(最暗)[查看下面带有 cmap
的行]。我正在尝试结合很多 PyData
功能。
如何使用 seaborn 调色板在 networkx 图上添加颜色条类型特征?
# Set up Graph
DF_adj = pd.DataFrame(np.array(
[[1, 0, 1, 1],
[0, 1, 1, 0],
[1, 1, 1, 1],
[1, 0, 1, 1] ]), columns=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'], index=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'])
G = nx.Graph(DF_adj.as_matrix())
G = nx.relabel_nodes(G, dict(zip(range(4), ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'])))
# Color mapping
color_palette = sns.cubehelix_palette(3)
cmap = {k:color_palette[v-1] for k,v in zip(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],[2, 1, 3, 2])}
# Draw
nx.draw(G, node_color=[cmap[node] for node in G.nodes()], with_labels=True)
在这方面,他们都在使用 matplotlib
调色板:http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut3.html 我什至尝试将它们转换为 ListedColormap
对象,但没有成功。
这也不适用于我的情况 b/c matplotlib colormap:
http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html
也一样
这是我得到的最接近的但它没有用我有一个自动缩放 Nonetype:
我认为最好的办法是在 this answer 之后伪造它,因为你没有 "ScalarMappable" 可以使用。
对于离散颜色图
from matplotlib.colors import ListedColormap
sm = plt.cm.ScalarMappable(cmap=ListedColormap(color_palette),
norm=plt.Normalize(vmin=0, vmax=3))
sm._A = []
plt.colorbar(sm)
如果您想要线性(连续)颜色图并且只显示整数刻度
sm = plt.cm.ScalarMappable(cmap=sns.cubehelix_palette(3, as_cmap=True),
norm=plt.Normalize(vmin=0, vmax=3))
sm._A = []
plt.colorbar(sm, ticks=range(4))
我正在尝试将 colorbar
添加到 networkx
绘制的 matplotlib ax
中,范围是 1
(最轻)和 3
(最暗)[查看下面带有 cmap
的行]。我正在尝试结合很多 PyData
功能。
如何使用 seaborn 调色板在 networkx 图上添加颜色条类型特征?
# Set up Graph
DF_adj = pd.DataFrame(np.array(
[[1, 0, 1, 1],
[0, 1, 1, 0],
[1, 1, 1, 1],
[1, 0, 1, 1] ]), columns=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'], index=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'])
G = nx.Graph(DF_adj.as_matrix())
G = nx.relabel_nodes(G, dict(zip(range(4), ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'])))
# Color mapping
color_palette = sns.cubehelix_palette(3)
cmap = {k:color_palette[v-1] for k,v in zip(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],[2, 1, 3, 2])}
# Draw
nx.draw(G, node_color=[cmap[node] for node in G.nodes()], with_labels=True)
在这方面,他们都在使用 matplotlib
调色板:http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut3.html 我什至尝试将它们转换为 ListedColormap
对象,但没有成功。
这也不适用于我的情况 b/c matplotlib colormap:
http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html
也一样这是我得到的最接近的但它没有用我有一个自动缩放 Nonetype:
我认为最好的办法是在 this answer 之后伪造它,因为你没有 "ScalarMappable" 可以使用。
对于离散颜色图
from matplotlib.colors import ListedColormap
sm = plt.cm.ScalarMappable(cmap=ListedColormap(color_palette),
norm=plt.Normalize(vmin=0, vmax=3))
sm._A = []
plt.colorbar(sm)
如果您想要线性(连续)颜色图并且只显示整数刻度
sm = plt.cm.ScalarMappable(cmap=sns.cubehelix_palette(3, as_cmap=True),
norm=plt.Normalize(vmin=0, vmax=3))
sm._A = []
plt.colorbar(sm, ticks=range(4))