重新缩放从twiny获得的次y轴

2024-10-06 10:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试添加一个辅助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

结果图像: rescaleY


Tags: 代码from图像绘图getax边界print
1条回答
网友
1楼 · 发布于 2024-10-06 10:23:43

ax.imshow(...)行下插入

ax.set_aspect('auto')

这个集合是纵横比,这样它就可以与要显示的数据相匹配。在

相关问题 更多 >