我正在尝试添加一个辅助y轴,其刻度从原始刻度重新缩放。我的代码中的rescaleY函数使用twiny来添加辅助轴,然后我设置新轴的ybound并为其设置纵横比。结果显示左右y轴之间的正确对应关系,但边界不正确。
我想要什么: 左侧y轴的ybound为(-0.5,4.5),右侧y轴的ybound为(-5.0,45.0)。
我得到的:左y轴的ybound为(-2,6),右y轴的ybound为(-20,60),即顶部和底部有白色条纹实际绘图区。
只有当原始图的宽高比“相等”时,才会出现此问题。在这种情况下,这是调用imshow的结果(相反,如果我使用pcolormesh,一切看起来都很好;如果我为imshow的结果手动重置方面,它也很好)。您可能还注意到,ybound的屏幕打印与您从图像中读取的内容不同。
任何人都有想法解决这个问题?感谢。
代码:
from matplotlib.pyplot import *
from numpy import *
def rescaleY(ax=None,scaleY=1.0):
'''
Add an right-side y-axis whose ticks are
rescaled from that of ax by scaleY.
'''
if ax == None:
ax = gca()
x0,x1 = ax.get_xbound()
y0,y1 = ax.get_ybound()
axTwinX = ax.twinx()
if ax.get_aspect() in ['equal',1.,1]:
axTwinX.set_aspect(1./scaleY)
axTwinX.set_ybound(y0*scaleY, y1*scaleY)
#print axTwinX.get_xbound(),axTwinX.get_ybound()
return axTwinX
xs = arange(10)
ys = arange(5)
x,y=meshgrid(xs,ys)
ax = gca()
ax.imshow(sin(x),origin='lower')
axTwinX = rescaleY(ax,10)
print ax.get_xbound(),ax.get_ybound(),ax.get_aspect()
print axTwinX.get_xbound(),axTwinX.get_ybound(),axTwinX.get_aspect()
savefig('rescaleY',bbox_inches='tight')
show()
结果命令行输出:
( - 0.5,9.5)( - 0.5,5.5)等于
( - 0.5,9.5)( - 5.0,45.0)0.1
结果图片:
答案 0 :(得分:1)
在ax.imshow(...)
ax.set_aspect('auto')
此设置的宽高比使其适合要显示的数据。