Matplotlib: тики Colorbar и цвет не зависят от значений в родительском графике - PullRequest
0 голосов
/ 04 февраля 2020

Предположим, у меня есть два 2D-массива, приведенных ниже, для которых я хочу построить contourf график. Я построю два contourf, используя два вспомогательных участка.

import numpy as np
import matplotlib.pyplot as plt
a = np.array([
    [1, 2, 2],
    [0, 1, 2],
    [0, 0, 1],
])

b = np.array([
    [4, 5, 5],
    [3, 4, 5],
    [3, 3, 4],
])

Технические характеристики:

  • Я хочу, чтобы на каждом из моих вспомогательных участков была одна цветная полоса [Решено].
  • Я хочу, чтобы обе мои цветовые полосы имели отметки от 0 до 5 [Не решено].
  • Я хочу, чтобы требуемые цвета внутри контуров и цветовых панелей отражали истинный диапазон от 0 до 5 [Решено].

В настоящее время у меня есть следующий код, который решает два из три требования.

z1lim = [0, 5]
levels = 5
ticks = np.linspace(*z1lim, levels)
fig, ax = plt.subplots(ncols=2, figsize=(16, 6)) 

# contourf 0
cntf0 = ax[0].contourf(
    a,
    cmap='viridis', 
    levels=levels, 
    vmin=z1lim[0],
    vmax=z1lim[1],
)
# colorbar 0
cbar0 = fig.colorbar(
    cntf0,
    ticks=ticks,
    ax=ax[0]
)


# contourf 1
cntf1 = ax[1].contourf(
    b,
    cmap='viridis', 
    levels=levels, 
    vmin=z1lim[0],
    vmax=z1lim[1],
)
# colorbar 1
cbar1 = fig.colorbar(
    cntf1,
    ticks=ticks,
    ax=ax[1]
)

Текущие графики

Глядя на текущие результаты, я не могу иметь цветовые полосы с диапазоном от 0 до 5. Было бы замечательно, если бы кто-нибудь мог дать мне рабочий код, который бы приводил к тому, что цветные полосы имеют отметки от 0 до 5.

1 Ответ

2 голосов
/ 05 февраля 2020

Вы берете 5 уровней на каждом сюжете, но не указываете, где они l ie. Следовательно, один сюжет не может знать о другом. Обязательно используйте одинаковые уровни в обоих случаях:

import numpy as np
import matplotlib.pyplot as plt
a = np.array([ [1, 2, 2], [0, 1, 2], [0, 0, 1], ])
b = np.array([ [4, 5, 5], [3, 4, 5], [3, 3, 4], ])

z1lim = [0, 5]
levels = ticks = np.linspace(*z1lim, 11)

fig, ax = plt.subplots(ncols=2, figsize=(16, 6)) 

# contourf 0
cntf0 = ax[0].contourf( a, cmap='viridis',  levels=levels)
# colorbar 0
cbar0 = fig.colorbar( cntf0, ticks=ticks, ax=ax[0] )

# contourf 1
cntf1 = ax[1].contourf( b, cmap='viridis',  levels=levels)
# colorbar 1
cbar1 = fig.colorbar( cntf1, ticks=ticks, ax=ax[1] )

plt.show()

enter image description here

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