【问题标题】:Set backgroundcolor of a Polar Plot using Colormaps使用颜色图设置极坐标图的背景颜色
【发布时间】:2020-10-25 02:48:24
【问题描述】:

我用 matplotlib 创建了一个极坐标图。此外,我有一个介于 0 和 3 之间的值。该值应该确定我现在设置绘图颜色的背景颜色,例如:

    if 0.8 < x and x < 1.2:
            color = 'white'
    elif 1.2 < x and x < 1.4:
            color = 'white'

等等...
及以后:

ax.set_facecolor(color)

但是,这不是很方便。 我的目标是当它的值为1 时颜色为白色。对于低于 1 的值,蓝色和高于 1 的值,红色。而是不断变化。像这样的渐变:

【问题讨论】:

    标签: python matplotlib colors colormap


    【解决方案1】:

    您可以使用'bwr_r' colormap(它是'bwr' 的反转版本)。颜色图获取一个介于 0 和 1 之间的参数。0 映射到最低颜色(红色表示'bwr_r'),0.5 映射到中间颜色(白色),1 映射到最高颜色。

    如果您的值 0 需要映射到红色并将 1 映射到白色,则将该值除以 2 即可将其置于正确的范围内。对于 1 到 3 之间的值,可以减去 1,除以 4 并在结果中加上 0.5,以将这些值映射到从白色到蓝色的颜色。所以,代码可能看起来像ax.set_facecolor(plt.cm.bwr_r(val / 2 if val &lt;= 1 else 0.5 + (val - 1) / 4))

    或者,TwoSlopeNorm 通过TwoSlopeNorm(vcenter=1, vmin=0, vmax=3) 以更友好的方式进行这些计算。如果您希望红色和蓝色不那么饱和,请将其更改为 TwoSlopeNorm(vcenter=1, vmin=-1, vmax=5)

    import numpy as np
    from matplotlib import pyplot as plt
    from matplotlib.colors import TwoSlopeNorm
    
    norm = TwoSlopeNorm(vcenter=1, vmin=0, vmax=3)
    fig, axes = plt.subplots(ncols=6, nrows=2, figsize=(12, 5),
                             subplot_kw={'projection': 'polar'}, gridspec_kw={'hspace': 0.2, 'wspace': 0.25})
    for i, ax in enumerate(np.ravel(axes)):
        val = i / 4
        ax.set_title(f'val = {val}')
        ax.set_facecolor(plt.cm.bwr_r(norm(val)))
        ax.set_xticklabels([])
        ax.set_yticklabels([])
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2023-03-25
      • 2017-09-11
      • 2022-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多