【问题标题】:How to display ticks in plain number for seaborn heatmap with logarithmic scale?如何以对数刻度显示 seaborn 热图的纯数字刻度?
【发布时间】:2021-04-16 18:45:02
【问题描述】:

我正在使用具有对数刻度的 seaborn 生成热图。如何将颜色条标签从科学记数法更改为纯数字。

import math
from matplotlib.colors import LogNorm
vmax=2
vmin=0.5
center = (vmax+vmin)/2
log_norm = LogNorm(vmin=vmin, vmax=vmin)
cbar_ticks = [0.5, 0.66, 1, 1.5, 2]
ax = sns.heatmap(corr, square=True, mask=mask, cmap=cmap_type, linewidths=.5, vmax=vmax, vmin=vmin, norm=log_norm, cbar_kws={"ticks": cbar_ticks}, center=center)

编辑:

以下代码修复了科学记数法的问题:

    import matplotlib.ticker as tkr
    formatter = tkr.ScalarFormatter(useMathText=True)
    formatter.set_scientific(False)
    cbar_kws={"ticks": cbar_ticks, "format": formatter}

但norm=log_norm 正在添加额外的刻度(请参见下图)。如何删除这些?

【问题讨论】:

标签: python matplotlib seaborn


【解决方案1】:

seaborn 的情节是 matplotlib 的包装,所以我建议这样做

ax.ticklabel_format(style='plain')

【讨论】:

    【解决方案2】:

    以下代码有所帮助。

    对于问题的第一部分,在 cbar_kws 参数中添加“格式”会有所帮助。 (https://stackoverflow.com/a/35419495/8881141):

    import matplotlib.ticker as tkr
    formatter = tkr.ScalarFormatter(useMathText=True)
    formatter.set_scientific(False)
    
    ax = sns.heatmap(corr, square=True, mask=mask, cmap=cmap_type, linewidths=.5, vmax=vmax, vmin=vmin, norm=log_norm, cbar_kws={"ticks": cbar_ticks, "format": formatter}, center=center)
    

    对于由于 matplotlib 中的错误引起的第二部分,添加以下内容会删除次要刻度。 (https://stackoverflow.com/a/65676007/11897903):

    ax.collections[0].colorbar.ax.yaxis.set_ticks([], minor=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2018-05-26
      • 2017-04-05
      相关资源
      最近更新 更多