【问题标题】:Seaborn Heatmap Colorbar Label as PercentageSeaborn 热图颜色条标签作为百分比
【发布时间】:2016-04-21 14:07:07
【问题描述】:

鉴于此热图:

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)

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

提前致谢!

【问题讨论】:

    标签: python-3.x heatmap seaborn


    【解决方案1】:

    你应该得到彩条对象,然后得到相关的轴对象:

    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))
    

    【讨论】:

    • 如果颜色条的第一个和最后一个值未知,此解决方案非常有效。谢谢!
    【解决方案2】:

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

    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:

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

    【讨论】:

      【解决方案3】:

      迭代@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%'])
      

      【讨论】:

      • 你知道我怎么能对刻度做同样的事情,即 0-7 和 0-11
      • 有谁知道为什么我不能将xticklabels 作为cbar_kws 的参数传递?或者我是否以某种方式错误地传递了论点?对于设置ticks,它工作正常。
      【解决方案4】:

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

      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%"])
      

      【讨论】:

      • 嘿,谢谢。你知道我在哪里可以找到可能的 annot_kws 和 cbar_kws 的列表吗?
      • 参考matplotlib文档...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2020-06-21
      相关资源
      最近更新 更多