Неправильная цветовая схема Matplotlib при построении цветовой шкалы - PullRequest
0 голосов
/ 26 марта 2020

Я получаю неправильную цветовую схему и диапазон, когда пытаюсь построить цветную полосу с контуром. Хорошо работает с pcolorme sh. Я намерен использовать только 1 цветную полосу для всех субплотов

fig = plt.figure(figsize=(9,8))
gs = gridspec.GridSpec(nrows=1, ncols=3)
color = plt.get_cmap('PRGn')

ax0 = plt.subplot(gs[0, 0])
ax0.contourf(x, y, z1, cmap=color)

ax1 = plt.subplot(gs[0, 1])
ax1.contourf(x, y, z2, cmap=color)

ax2 = plt.subplot(gs[0, 2])
ax2.contourf(x, y, z3, cmap=color)

# colorbar
im = plt.gca().get_children()[0]
cax = fig.add_axes([.918, 0.175, 0.025, 0.4])
cb = fig.colorbar(im, cax=cax)

enter image description here

Спасибо

1 Ответ

3 голосов
/ 26 марта 2020

Самый простой способ - сохранить результат contourf в переменной для передачи на plt.colorbar.

Обратите внимание, что для 3 графиков, использующих одну и ту же цветную полосу, ограничения должны быть одинаковыми для каждый. По умолчанию vmin и vmax устанавливаются на минимум и максимум данного z-массива. Чтобы получить их равными для 3 графиков, можно установить для них глобальный минимум и максимум.

Вот пример (используя современный способ определения вспомогательных участков):

import numpy as np
import matplotlib.pyplot as plt

fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3, figsize=(9, 8))

# create some dummy data, where z1, z2 and z3 possibly have different ranges
x, y = np.meshgrid(np.linspace(0, 4, 20), np.linspace(300, 850, 20))
z1 = np.cos(x) + np.sin(y / 100)
z2 = np.cos(x) + np.sin(y / 100) + 0.2
z3 = np.cos(x) + np.sin(y / 100) + 0.5
vmin = min(z1.min(), z2.min(), z3.min())
vmax = max(z1.max(), z2.max(), z3.max())

cmap = plt.get_cmap('PRGn')
contour_z1 = ax0.contourf(x, y, z1, cmap=cmap, vmin=vmin, vmax=vmax)
contour_z2 = ax1.contourf(x, y, z2, cmap=cmap, vmin=vmin, vmax=vmax)
contour_z3 = ax2.contourf(x, y, z3, cmap=cmap, vmin=vmin, vmax=vmax)

# colorbar
cax = fig.add_axes([.918, 0.175, 0.025, 0.4])
cb = fig.colorbar(contour_z1, cax=cax)
plt.show()

resulting plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...