2015-09-28 2 views
0

Я стараюсь установить такой же масштаб по оси y двух подзадач в matplotlib. Я могу очень близко сделать это вручную. Но есть ли возможность взять тот же масштаб для двух подзаговоров?Та же шкала, но разная высота для подзаголовков

# -*- coding: utf-8 -*- 

import numpy as np 
import matplotlib.pyplot as plt 

import matplotlib 

x=np.array([0,1,2,4])/4. 
y1=[0.5,0.5,1.0,1.5] 
y2=[0,1,2,4] 
fig=plt.figure(figsize=(8,8.5)) 
ax1=plt.subplot(2,1,1) 
plt.plot(x,y1) 
plt.yticks([0.5,1,1.5]) 
plt.grid() 
ax2=plt.subplot(2,1,2) 
plt.plot(x,y2) 
plt.yticks([0.5,1,1.5]) 
plt.grid() 
plt.tight_layout() 
ratio1=(ax1.get_xlim()[1]-ax1.get_xlim()[0])/(ax1.get_ylim()[1]-ax1.get_ylim()[0]) 
ratio2=(ax2.get_xlim()[1]-ax2.get_xlim()[0])/(ax2.get_ylim()[1]-ax2.get_ylim()[0]) 

aspectratio=0.5 
ratio_default= ratio2*aspectratio 
ax1.set_aspect(ratio_default) 
plt.savefig('demo.png') 
plt.show() 

enter image description here Благодаря

ответ

0
ar=ax2.get_position().bounds 

ar=((ar[0]-ar[2])/(ar[1]-ar[3])) 

aspectratio=ar 

делает работу :)

0

Вы можете установить set_ylim для обеспечения оси одинаковы для обоих ax1 и ax2 и использовать subplot2grid заложить два участка на формирование сетки:

import numpy as np 
import matplotlib.pyplot as plt 

import matplotlib 

x = np.array([0,1,2,4])/4. 
y1 = [0.5,0.5,1.0,1.5] 
y2 = [0,1,2,4] 
fig = plt.figure(figsize = (8,8.5)) 

ax1 = plt.subplot2grid((3,3), (0,0), colspan=3, rowspan=1) 
plt.plot(x,y1) 
plt.yticks([0.5,1,1.5]) 
ax1.set_ylim([0, 1.5]) 

plt.grid() 

ax2 = plt.subplot2grid((3,3), (1,0), colspan=3, rowspan=2) 
plt.plot(x,y2) 
plt.yticks([0.5,1,1.5]) 
ax2.set_ylim([0, 1.5]) 
plt.grid() 

plt.tight_layout() 

ratio1 = (ax1.get_xlim()[1]-ax1.get_xlim()[0])/(ax1.get_ylim()[1]-ax1.get_ylim()[0]) 
ratio2 = (ax2.get_xlim()[1]-ax2.get_xlim()[0])/(ax2.get_ylim()[1]-ax2.get_ylim()[0]) 

plt.savefig('demo.png') 
plt.show() 

Соотношение сторон тогда не требуется. Это дает выход следующим образом: enter image description here

+0

я мог бы сделать это, но я только хочу, чтобы показать область интереса верхней сюжетные, изменяя его высоту. – bios

+0

Вы можете использовать 'subplot2grid' для размещения верхних подложек на сетке. Тогда соотношение сторон не требуется. –

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