使用颜色图设置极坐标图的背景颜色

Set backgroundcolor of a Polar Plot using Colormaps

我用 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 的值,红色。而是不断变化。像这样的渐变:

您可以使用 '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 <= 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()