2016-02-10 7 views
3

У меня есть простой код для создания фигуры с 7 осями/пользовательскими подзаголовками (я понимаю, что подсети равны и равны друг другу, и в моей конкретной ситуации мне нужно, чтобы она была больше чем остальные).Python, общие оси оси Matplotlib Y оси

fig = plt.figure(figsize = (16,12)) 
# row 1 
ax1 = plt.axes([0.1,0.7,0.2,0.2]) 
ax2 = plt.axes([0.4,0.7,0.2,0.2]) 
ax3 = plt.axes([0.7,0.7,0.2,0.2]) 
# big row 2 
ax4 = plt.axes([0.1, 0.4, 0.5, 0.2]) 
#row 3 
ax5 = plt.axes([0.1,0.1,0.2,0.2]) 
ax6 = plt.axes([0.4,0.1,0.2,0.2]) 
ax7 = plt.axes([0.7,0.1,0.2,0.2]) 

мой вопрос в том, как получить все эти оси для совместного использования одной и той же оси y. Все, что я могу найти на Google/стек для сюжетных, например:

ax = plt.subplot(blah, sharey=True) 

но называть то же самое для создания осей не работает:

ax = plt.axes([blah], sharey=True) # throws error 

есть в любом случае для достижения этой цели? То, что я работаю с это:

Desired fig layout

ответ

2

Это довольно просто, используя matplotlib.gridspec.GridSpec

gs=GridSpec(3,3) создает сетку 3х3 разместить подзаговоры на

для ваших верхних и нижних строк, нам просто нужно для индексации одной ячейки на этой сетке 3x3 (например, gs[0,0] находится в верхнем левом углу).

Для среднего ряда, вы должны охватывать две колонки, поэтому мы используем gs[1,0:2]

import matplotlib.pyplot as plt 
from matplotlib.gridspec import GridSpec 

fig=plt.figure(figsize=(16,12)) 

gs = GridSpec(3,3) 

# Top row 
ax1=fig.add_subplot(gs[0,0]) 
ax2=fig.add_subplot(gs[0,1],sharey=ax1) 
ax3=fig.add_subplot(gs[0,2],sharey=ax1) 

# Middle row 
ax4=fig.add_subplot(gs[1,0:2],sharey=ax1) 

# Bottom row 
ax5=fig.add_subplot(gs[2,0],sharey=ax1) 
ax6=fig.add_subplot(gs[2,1],sharey=ax1) 
ax7=fig.add_subplot(gs[2,2],sharey=ax1) 

ax1.set_ylim(-15,10) 

plt.show() 

enter image description here

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