Играя с цветными картами в этот вопрос Я был представлен brewer2mpl
в комментариях. Для расходящейся карты (с нулем посередине) я заметил, что гамма реализована так, чтобы работать наивно и поэтому дает неожиданные † результаты, когда она не равна 1. Нейтральный тон, предназначенный для представления нуля скользит вокруг так, чтобы значения около нуля были синего цвета с гаммой = 0,5 и оранжевым, когда гамма = 1,5
Можно ли в любом случае сделать гамма-подобный параметр, который работает симметрично вокруг нуля в matplotlib
или brewer2mpl
или сделать Мне просто нужно как-то сделать это вручную, подняв np.abs(u)
до некоторой степени, а затем повторно нормализовать и снова ввести знак?
† Ожидаемое поведение будет заключаться в симметричном применении гаммы относительно нуля. ; по крайней мере, это то, что ожидал .
![divergent colormap with brewer2mpl and gamma not equal to 1 gives bad results](https://i.stack.imgur.com/0N0oj.png)
import numpy as np
import matplotlib.pyplot as plt
import brewer2mpl
Re = 6378137. # meters
J2 = 1.7555E+25 # m^5/s^2
hw = 400
x = np.linspace(-2.5*Re, 2.5*Re, 2*hw+1)
x, z = np.meshgrid(x, x)
r = np.sqrt(x**2 + z**2)
u = J2 * r**-5 * 0.5 * (3*z**2 - r**2)
u[r<Re] = np.nan
if True:
umax = np.nanmax(np.abs(u))
bmap = brewer2mpl.get_map('RdBu', 'Diverging', 9)
gammas = 0.5, 1, 1.5
plt.figure()
for i, gamma in enumerate(gammas):
cmap = bmap.get_mpl_colormap(N=100, gamma=gamma)
plt.subplot(1, 3, i+1)
plt.imshow(u, cmap=cmap, vmin=-umax, vmax=umax)
plt.colorbar()
plt.title('gamma = ' + str(gamma))
plt.plot([hw, hw], [0.3*hw, 1.7*hw], '-k')
plt.xlim(0, 2*hw+1)
plt.ylim(0, 2*hw+1)
plt.suptitle("Earth's geopotential's J2 component", fontsize=16)
plt.show()