палитра matplotlib на каждом подзаголовке

Я хотел бы добавить отдельную цветовую полосу к каждому подзаголовку на графике 2x2.

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
plt.colorbar(z1_plot,cax=ax1)
z2_plot = ax2.scatter(x,y,c = z2,vmin=0.0,vmax=40)
plt.colorbar(z1_plot,cax=ax2)
z3_plot = ax3.scatter(x,y,c = z3,vmin=0.0,vmax=894)
plt.colorbar(z1_plot,cax=ax3)
z4_plot = ax4.scatter(x,y,c = z4,vmin=0.0,vmax=234324)
plt.colorbar(z1_plot,cax=ax4)
plt.show()

Я думал, что это то, как вы это делаете, но полученный сюжет действительно испорчен; он просто имеет серый фон и игнорирует имеющиеся у меня команды set_xlim, set_ylim (здесь не показаны для простоты). + не показывает цветных полос. Это правильный способ сделать это?

Я также попытался избавиться от «cax = ...», но тогда цветовая шкала переместилась на нижний правый график, а не на каждый отдельный график!


person Cokes    schedule 26.05.2014    source источник
comment
plt.colorbar(z1_plot,cax=ax2)предполагается равным plt.colorbar(z2_plot,cax=ax2) и т. Д. Для 3 и 4? Для подзаголовков и цветовых полос я бы посмотрел в AxesGrid   -  person oschoudhury    schedule 27.05.2014


Ответы (5)


Просмотрите эту страницу с примером matplotlib. Там показано, как получить следующий график с четырьмя отдельными цветными полосами для каждого подзаголовка: введите описание изображения здесь

Надеюсь, это поможет.
Вы можете дополнительно посмотреть здесь, где можно найти много что вы можете делать с matplotlib.

person Community    schedule 26.05.2014

Это легко решается утилитой make_axes_locatable. Я привожу минимальный пример, показывающий, как это работает, и который должен быть легко адаптирован:

панель для каждого изображения

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

import numpy as np

m1 = np.random.rand(3, 3)
m2 = np.arange(0, 3*3, 1).reshape((3, 3))

fig = plt.figure(figsize=(16, 12))
ax1 = fig.add_subplot(121)
im1 = ax1.imshow(m1, interpolation='None')

divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')

ax2 = fig.add_subplot(122)
im2 = ax2.imshow(m2, interpolation='None')

divider = make_axes_locatable(ax2)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical');
person Ramon Martinez    schedule 28.02.2018

В plt.colorbar(z1_plot,cax=ax1) используйте ax= вместо cax=, т.е. plt.colorbar(z1_plot,ax=ax1)

person jayesef    schedule 21.06.2017
comment
добавить: fig.colorbar(sm, ax=fig.get_axes()) добавит шкалу палитры поверх обоих - person IljaBek; 17.02.2019

Укажите аргумент ax для matplotlib.pyplot.colorbar(), например

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)
for i in range(2):
    for j in range(2):
         data = np.array([[i, j], [i+0.5, j+0.5]])
         im = ax[i, j].imshow(data)
         plt.colorbar(im, ax=ax[i, j])

plt.show()

введите описание изображения здесь

person Patrick Sanan    schedule 19.03.2019

Попробуйте использовать функцию ниже, чтобы добавить шкалу палитры:

def add_colorbar(mappable):
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    import matplotlib.pyplot as plt
    last_axes = plt.gca()
    ax = mappable.axes
    fig = ax.figure
    divider = make_axes_locatable(ax)
    cax = divider.append_axes("right", size="5%", pad=0.05)
    cbar = fig.colorbar(mappable, cax=cax)
    plt.sca(last_axes)
    return cbar

Тогда вам нужно изменить коды как:

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
add_colorbar(z1_plot)
person uqzzhao    schedule 09.03.2020