我正在尝试添加一个辅助y轴,其刻度将从原始轴重新缩放。我的代码中的rescaleY函数使用twiny添加次轴,然后设置新轴的ybound并为其设置纵横比。结果显示了左右y轴之间的正确对应,但边界不正确。在
我想要的: 左y轴的y边界为(-0.5,4.5),右y轴的y边界为(-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,4.5)等于
(-0.5,9.5)(-5.0,45.0)0.1
结果图像:
在
ax.imshow(...)
行下插入这个集合是纵横比,这样它就可以与要显示的数据相匹配。在
相关问题 更多 >
编程相关推荐