Seaborn Heatmap Colorbar标签为百分比

时间:2016-01-15 21:35:21

标签: python-3.x heatmap seaborn

鉴于这张热图:

import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)

我如何才能以百分比格式显示颜色条值? 另外,如果我只是想在彩条上显示第一个和最后一个值呢?

提前致谢!

4 个答案:

答案 0 :(得分:17)

迭代@mwaskom的解决方案,而不是自己创建颜色条:

import numpy as np
import seaborn as sns
data = np.random.rand(8, 12)
ax = sns.heatmap(data, vmin=0, vmax=1)
cbar = ax.collections[0].colorbar
cbar.set_ticks([0, .2, .75, 1])
cbar.set_ticklabels(['low', '20%', '75%', '100%'])

custom seaborn heatmap color bar labels

答案 1 :(得分:5)

好吧,我遇到了类似的问题并想出了如何properly set a formatter。你的例子会变成:

<action method="setEmptyTemplate"><value>itemdeletion/cart/noItems.phtml</value></action>
<action method="chooseTemplate"/>

因此,您需要做的是传递旧式字符串格式化程序以向百分比标签添加百分比。不完全是我所说的不言自明,但有效......

要仅显示第一个和最后一个,请将import numpy as np; np.random.seed(0) import seaborn as sns; sns.set() uniform_data = np.random.rand(10, 12) uniform_data = 100 * uniform_data sns.heatmap(uniform_data, cbar_kws={'format': '%.0f%%'}) vmax和一个额外参数添加到vmin

cbar_kws

答案 2 :(得分:4)

您需要能够访问colorbar对象。它可能埋藏在图形对象的某个地方,但我无法找到它,所以最简单的方法就是自己制作它:

import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, cbar=False, vmin=0, vmax=1)
cbar = ax.figure.colorbar(ax.collections[0])
cbar.set_ticks([0, 1])
cbar.set_ticklabels(["0%", "100%"])

enter image description here

答案 3 :(得分:0)

您应该获取颜色条对象,然后获取相关的轴对象:

import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter

fig, ax = plt.subplots()
sns.heatmap(df, ax=ax, cbar_kws={'label': 'My Label'})
cbar = ax.collections[0].colorbar
cbar.ax.yaxis.set_major_formatter(PercentFormatter(1, 0))