【问题标题】:Seaborn heatmap is generating additional ticks on colorbar when using log scale使用对数刻度时,Seaborn 热图会在颜色条上生成额外的刻度
【发布时间】:2021-01-12 07:56:05
【问题描述】:

我正在尝试使用对数颜色条制作热图。但它会不断生成自己的刻度和刻度标签以及我输入的刻度。

我最初发布 this 是为了将刻度标签从科学记数法重新格式化为普通格式,但后来遇到了这个问题。

import numpy as np
import seaborn as sns
from matplotlib.colors import LogNorm
import matplotlib.ticker as tkr

matrix = np.random.rand(10, 10)/0.4
vmax=2
vmin=0.5

cbar_ticks = [0.5, 0.75, 1, 1.33, 2]
formatter = tkr.ScalarFormatter(useMathText=True)
formatter.set_scientific(False)

log_norm = LogNorm(vmin=vmin, vmax=vmax)
ax = sns.heatmap(matrix, square=True, vmax=vmax, vmin=vmin, norm=log_norm, cbar_kws={"ticks": cbar_ticks, "format": formatter})

【问题讨论】:

标签: python matplotlib seaborn


【解决方案1】:

对于对数轴,通常还会设置小刻度(它们有助于了解不同值的位置并强制执行对数外观)。在这种情况下,默认刻度仅包含一个刻度(1.0),这不足以查看哪个值对应于哪种颜色。

使用cbar_kws 只能更改主要刻度。您可以显式抑制次要刻度:

import numpy as np
import seaborn as sns
from matplotlib.colors import LogNorm
import matplotlib.ticker as tkr
from matplotlib import pyplot as plt

matrix = np.random.rand(10, 10) / 0.4
vmax = 2
vmin = 0.5

cbar_ticks = [0.5, 0.75, 1, 1.33, 2]
formatter = tkr.ScalarFormatter(useMathText=True)
formatter.set_scientific(False)

log_norm = LogNorm(vmin=vmin, vmax=vmax)
ax = sns.heatmap(matrix, square=True, vmax=vmax, vmin=vmin, norm=log_norm,
                 cbar_kws={"ticks": cbar_ticks, "format": formatter})
ax.collections[0].colorbar.ax.yaxis.set_ticks([], minor=True)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2021-04-16
    • 2019-12-23
    • 1970-01-01
    • 2013-02-21
    • 2019-11-12
    相关资源
    最近更新 更多