Постройте несколько осей Y И цветную полосу в matplotlib

Я пытаюсь создать точечную диаграмму с двумя разными осями Y, а также с цветной полосой.

Вот используемый псевдокод:

#!/usr/bin/python

import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
ax1 = fig.add_subplot(111)
plt.scatter(xgrid,
        ygrid,
        c=be,                   # set colorbar to blaze efficiency
        cmap=cm.hot,
        vmin=0.0,
        vmax=1.0)

cbar = plt.colorbar()
cbar.set_label('Blaze Efficiency')

ax2 = ax1.twinx()
ax2.set_ylabel('Wavelength')

plt.show()

И он создает этот график: сюжет

Мой вопрос заключается в том, как вы используете другой масштаб для осей длины волны, а также, как вы перемещаете цветовую полосу вправо, чтобы она не мешала длине волны?


person Manila Thrilla    schedule 06.06.2012    source источник


Ответы (2)


@ OZ123 Извините, что так долго не отвечал. Matplotlib обладает расширяемыми возможностями настройки, иногда до такой степени, что вы не понимаете, что вы на самом деле делаете. Спасибо за помощь в создании отдельных осей.

Однако я не думал, что мне нужен такой большой контроль, и в итоге я просто использовал аргумент ключевого слова PAD в

fig.colorbar()

и это дало то, что мне было нужно.

Затем псевдокод становится таким:

#!/usr/bin/python

import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
ax1 = fig.add_subplot(111)
mappable = ax1.scatter(xgrid,
                       ygrid,
                       c=be,                   # set colorbar to blaze efficiency
                       cmap=cm.hot,
                       vmin=0.0,
                       vmax=1.0)

cbar = fig.colorbar(mappable, pad=0.15)
cbar.set_label('Blaze Efficiency')

ax2 = ax1.twinx()
ax2.set_ylabel('Wavelength')

plt.show()

Вот как это выглядит сейчас:введите здесь описание изображения:

person Manila Thrilla    schedule 25.06.2012

plt.colorbar() создан для действительно простых случаев, например. на самом деле не думал о сюжете с 2 осями Y. Для детального управления расположением и свойствами цветовой полосы вам почти всегда следует работать с цветовой полосой, указывающей, по каким осям вы хотите построить цветовую полосу.

# on the figure total in precent l    b      w , height 
cbaxes = fig.add_axes([0.1, 0.1, 0.8, 0.05]) # setup colorbar axes. 
# put the colorbar on new axes
cbar = fig.colorbar(mapable,cax=cbaxes,orientation='horizontal')

Обратите внимание, что colorbar принимает следующие ключевые слова:

аргументы ключевого слова:

cax Нет | объект оси, в который будет нарисована цветовая полоса ax None | родительский объект осей, из которого будет украдено пространство для новых осей цветовой полосы

вы также можете увидеть здесь мой более развернутый ответ относительно рисунок colorbar на отдельных осях.

person oz123    schedule 07.06.2012