Seaborn Heatmap Colorbar标签为百分比

Dan*_*ty2 8 heatmap python-3.x 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)
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Ste*_*aan 22

迭代@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%'])
Run Code Online (Sandbox Code Playgroud)

自定义seaborn热图彩色条标签


Joe*_*fer 7

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

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))
Run Code Online (Sandbox Code Playgroud)


Ale*_*dre 6

好吧,我有一个类似的问题,并想出如何正确设置格式化程序.你的例子会变成:

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%%'})
Run Code Online (Sandbox Code Playgroud)

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

仅显示第一和最后一个,然后你添加vmax,vmin和一个额外的参数cbar_kws:

sns.heatmap(uniform_data,
            cbar_kws={'format': '%.0f%%', 'ticks': [0, 100]},
            vmax=100,
            vmin=0)
Run Code Online (Sandbox Code Playgroud)


mwa*_*kom 5

您需要能够访问颜色栏对象。它可能埋在图形对象的某个地方,但我找不到它,所以简单的事情就是自己制作:

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%"])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明