【问题标题】:How to get proper tick labels for a colarbar with discrete logarithmic steps?如何为具有离散对数步长的颜色条获取正确的刻度标签?
【发布时间】:2021-07-13 11:04:53
【问题描述】:

我有一个散点图,我使用matplotlib.colors.LogNorm 对点进行了颜色映射。这为我提供了我想要的颜色图比例,但我无法使其成为离散的颜色图。 这是我所拥有的:

我的目标是这样的(忽略插图):

我可以在一定程度上成功使用matplotlib.colors.BoundaryNorm,但似乎失去了matplotlib.colors.LogNorm 中有用的颜色条格式:

谢谢

【问题讨论】:

    标签: python matplotlib colormap


    【解决方案1】:

    您可以显式设置颜色条刻度的文本。这是一个例子:

    import matplotlib.pyplot as plt
    from matplotlib.colors import BoundaryNorm, LogNorm
    import numpy as np
    
    x = np.linspace(0, 1, 60)
    y = np.linspace(0, 1, 60)
    c = np.logspace(-4, 1, 60)
    fig, ax = plt.subplots()
    sc1 = ax.scatter(x, y, c=c, cmap='viridis', norm=LogNorm())
    cbar1 = plt.colorbar(sc1, ax=ax)
    
    bounds = np.power(10.0, np.arange(-4, 2))
    ncolors = len(bounds) - 1
    cmap = plt.cm.get_cmap('turbo', ncolors)
    norm = BoundaryNorm(boundaries=bounds, ncolors=ncolors)
    
    sc2 = ax.scatter(x, y + 0 + 0.1, c=c, cmap=cmap, norm=norm)
    cbar = plt.colorbar(sc2, ax=ax)
    cbar.ax.set_yticklabels([f'$10^{{{np.log10(b):.0f}}}$' for b in bounds])
    
    plt.show()
    

    【讨论】:

    • 非常感谢。出于某种原因,颜色条的刻度标签与我的绘图其余部分的字体不同。这是什么原因?
    • 使用美元符号,matplotlib 使用乳胶格式而不是常规字体。这些字体有点不同。使用标准字体更难创建正确的上标。
    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多