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