2014-06-30 124 views
1

我想有兩個子圖,其中第一個子圖平方,x軸和y軸共享相同的限制。除此之外,第二個圖應該共享相同的x軸,但是具有獨立的y軸。方形的陰謀與子圖共享,共享x軸

最後的結果應該是這樣的:

Wanted solution with squared plot and additional second plot

如何獲得這種形式的陰謀?

回答

0

的想法是需要一個固定的figsize和附加到這個使用GridSpec,給定figsize內的工作,以確保,該空間是我們想要的方式使用。

以下部分將生成一個平方圖和一個較小的子圖,其固定的height_ratio爲3:1。的原因figsize是,我們希望有一個正方形(其確定該圖的width34=3+1一個高度在高度比率給出)。

fig = plt.figure(figsize=(3, 4)) 
gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1]) 

Solution with hspace-gap

爲了填補這一缺口的次要情節之間,我們知道給予額外的參數hspace=0

fig = plt.figure(figsize=(3, 4)) 
gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1], hspace=0) 

Solution without hspace-gap

一個完整的工作示例可能看起來像這樣:

import pylab as plt  
import numpy as np 
from matplotlib.ticker import MaxNLocator 
import matplotlib.gridspec as gridspec 

fig = plt.figure(figsize=(3, 4)) 
gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1],hspace=0) 

# generate some random test data 
datatemp = np.random.random_sample((100,2)) 
datatemp2 = np.random.random_sample((100,2))*np.array([1,2]) 

ax0 = plt.subplot(gs[0]) 
ax0.scatter(*datatemp.T) 
ax1 = plt.subplot(gs[1],sharex=ax0) 
ax1.scatter(*datatemp2.T) 

ax0.grid(True) 
ax1.grid(True) 

ax0.set_xlim(0,1) 
ax0.set_ylim(0,1) 

ax1.set_ylim(0,2) 

# cosmetics 
ax1.axes.get_yaxis().set_major_locator(MaxNLocator(prune='upper')) 
ax1.set_yticks(np.arange(0,2,0.5)) 

plt.setp(ax0.get_xticklabels(), visible=False)