2013-09-18 2 views
11

Я пытаюсь разделить свои сюжеты в разных подзаговорах. То, что я хочу достичь, - это установить цветную панель для подзаголовка в другом подзаголовке. Сейчас я использую:Как нарисовать цветную панель pcolor в другом подзаголовке - matplotlib

# first graph 
axes = plt.subplot2grid((4, 2), (0, 0), rowspan=3) 
pc = plt.pcolor(df1, cmap='jet') 

# second graph 
axes = plt.subplot2grid((4, 2), (3, 0)) 
plt.pcolor(df2, cmap='Greys') 

# colorbar 
plt.subplot2grid((4, 2), (0, 1), rowspan=3) 
plt.colorbar(pc) 

Но результат состоит в следующем (обратите внимание на нежелательную пустой граф оставил в Colorbar): Wrong graph

Что я могу сделать, чтобы напечатать только Colorbar без левой сюжет?

Благодаря

ответ

16

colorbar() принимает аргумент в cax ключевое слово, которое позволяет указать axes объект, что Colorbar будет нарисована на.

В вашем случае, вы бы изменить Colorbar вызов на следующее:

# colorbar 
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3) 
plt.colorbar(pc, cax=axes) 

Это займет все пространство, данное subplot2grid; вы можете настроить это, чтобы быть более разумным либо путем того, чтобы основные оси занимали гораздо больше столбцов, чем оси цветной панели, или устанавливая явно gridspec. Например, ваша фигура может быть проще настроить следующим:

from matplotlib import gridspec 
gs = gridspec.GridSpec(2, 2, height_ratios=(3, 1), width_ratios=(9, 1)) 

# first graph 
axes = plt.subplot(gs[0,0]) 
pc = plt.pcolor(df1, cmap='jet') 

# second graph 
axes = plt.subplot(gs[1,0]) 
plt.pcolor(df2, cmap='Greys') 

# colorbar 
axes = plt.subplot(gs[0,1]) 
plt.colorbar(pc, cax=axes) 

Тогда вы можете просто изменить height_ratios и width_ratios по своему вкусу.

+0

Это работает, но цветная панель увеличена горизонтально. Как использовать один и тот же коэффициент по умолчанию? Я попытался передать ключевое слово 'aspect', но он не принят, поэтому я отступил назад, чтобы сделать это явно увеличивая количество столбцов для графики. – gc5

+0

Я добавил раздел ответа другим способом, чтобы оси цветной панели занимали меньше пространство. – tbekolay

+0

Awesome, спасибо .. :) – gc5

0

Я считаю, что вы должны использовать топор вместо cax.

# colorbar 
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3) 
plt.colorbar(pc, ax=axes) 
+0

Нет, 'cax' устанавливает оси, на которые нарисована цветовая полоса,' ax' используется только для определения того, какие оси украдут пространство, если 'cax' не передается. – tacaswell

+0

http://matplotlib.org/devdocs /api/pyplot_api.html#matplotlib.pyplot.colorbar – tacaswell

Смежные вопросы