Почему разница в цветовой шкале отображается между pcolormesh и контурным графиком с цветовой шкалой, выполненной на заказ - PullRequest
0 голосов
/ 09 января 2019

Я адаптировал цветовую шкалу на заказ NCL по цветовой шкале с дискретными интервалами пример . Мой массив данных находится в файле NetCDF, и когда я пытаюсь построить его, график и цветовая полоса выглядят так, как ожидалось для графика pcolormesh, но он сходит с ума, когда я строю график contourf. Я что-то не так делаю в определении цветовой шкалы?

import matplotlib.colors
import xarray as xr

# loading data

ds = xr.open_dataset(path/tofile/data.nc)


## custom color bar
## converting RGB values to 0,1
cmap3 =  matplotlib.colors.ListedColormap([(127/255, 150/255, 255/255), (142/255, 178/255, 255/255), (181/255, 201/255, 255/255), (214/255, 226/255, 237/255),\
(242/255, 221/255, 160/255), (242/255, 132/255, 68/255), (229/255, 0/255, 0/255), (1, 163/255, 10/255), (1, 249/255, 20/255), (172/255, 206/255, 100/255), (125/255, 190/255, 84/255)])

# I want to discretize the colorbar according to values
vals = [-1.0, 0.0, 0.2 ,0.5, 0.8, 1.0, 1.5, 2.0, 4.0 , 6.0 , 8.0,  10]
norm = matplotlib.colors.BoundaryNorm(vals, cmap3.N)

# variable to be plotted
ds.PV.squeeze().plot.pcolormesh(cmap=cmap3, norm=norm, vmin=0, vmax=10)
# contourf plot which is giving unexpected result
ds.PV.squeeze().plot.contourf(cmap=cmap3, norm=norm, vmin=0, vmax=10)

Ожидаемая цветовая шкала с графиком Pcolormesh:

Pcolormesh plot with the right colorscale

Неправильная цветовая шкала при построении контурного графика: Wrong color scale

Ниже представлен контурный график с цветовой шкалой по умолчанию. Contourf with default colorscale

Вот так выглядит моя правильная цветная полоса:

fig, ax =plt.subplots(figsize=(6,1))

cb3 = matplotlib.colorbar.ColorbarBase(ax, cmap=cmap3,
                            norm=norm,
                            extend='neither',
                            ticks=vals,
                            spacing='uniform',
                            orientation='horizontal')    

correct colorbar

1 Ответ

0 голосов
/ 10 января 2019

@ ImportanceofBeingErnest этот подробный ответ помог. В contourf нужно специально указать уровни, на которых нужно рисовать контуры, тогда как pcolormesh, кажется, выбирает его автоматически на основе цветовой шкалы

ds.PV.squeeze().plot.contourf(cmap=cmap3, norm=norm,levels=vals)

Correct plot

...