首页 > 解决方案 > 如何在 Python 中标准化颜色条?

问题描述

我想将 colobar 比例从我当前的图1调整到所需的图2

我的颜色条比例范围是 -1 到 1,但我希望它以指数形式出现,为此我也尝试了 levels = np.linspace(-100e-2,100e-2) ,但它也没有给出所需的比例2

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
ds = xr.open_dataset('PL_Era_Tkt.nc')

wp = ds.w.mean(dim=['longitude','latitude']).plot.contourf(x='time',cmap='RdBu',add_colorbar=False,extend='both')
wpcb = plt.colorbar(wp)
wpcb.set_label(label='Pa.s${^{-1}}$',size=13)
plt.gca().invert_yaxis()
plt.title('Vertical Velocity',size=15)

我目前的规模

我的身影

我想要的规模

在此处输入图像描述

标签: pythonmatplotlib

解决方案


由于未显示数据,因此我在此处添加了带有来自图表示例的数据的标准化彩条。我认为使用此设置,彩条刻度也将采用日志格式。请注意,使用的数据并不大,因此我无法确认这一点。

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.ticker as ticker
import numpy as np
plt.style.use('seaborn-white')

def f(x, y):
    return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig, ax = plt.subplots()
ax.contourf(X, Y, Z, 20, cmap='RdGy')

cmap = mpl.cm.RdGy
norm = mpl.colors.Normalize(vmin=-1, vmax=1.0)

fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
             ax=ax, orientation='vertical', label='Some Units', extend='both', ticks=ticker.LogLocator())

plt.show()

在此处输入图像描述


推荐阅读