2016-02-10 158 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軸。所有我能找到在谷歌/堆棧是次要情節,如:

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