2015-09-28 53 views
0

我努力在matplotlib中对两个子图的y轴设置相同的比例尺。 我可以非常接近地手动​​完成此操作。但是有没有一种选择可以为这两个小区采用相同的比例?同尺度但不同高度的子图

# -*- 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以确保轴是相同的两个ax1ax2和使用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'将网格顶部的小图绘制出来。那么不需要宽高比。 –