Cov*_*ich 9 python matplotlib coordinate-systems coordinate-transformation
我的问题很简单:在matplotlib中,如何轻松地将Axis系统中的坐标转换为数据系统(从理想情况来说,我正在寻找一个简单的函数output_coords = magic_func(input_coords))
实际上我的确切问题是:我想matplotlib.patches.Ellipse用他的中心在Axis系统中绘制一个但是他的数据系统中的大小(宽度和长度).但是这种transforms.blended_transform_factory方法在这种情况下不起作用.
谢谢 !
wil*_*mpa 15
要从Axes实例获取转换ax,您可以使用
axis_to_data = ax.transAxes + ax.transData.inverted()
points_data = axis_to_data.transform(points_axis)
data_to_axis = axis_to_data.inverted()
numpy.testing.assert_allclose(points_axis, data_to_axis.transform(points_data))
Run Code Online (Sandbox Code Playgroud)
按照转换教程,最简单的方法是使用
ax.transLimits.
output_coords = ax.transLimits.transform(input_coords)
Run Code Online (Sandbox Code Playgroud)
没有立即找到解决方案,需要自己编写:
def axis_data_coords_sys_transform(axis_obj_in,xin,yin,inverse=False):
""" inverse = False : Axis => Data
= True : Data => Axis
"""
xlim = axis_obj_in.get_xlim()
ylim = axis_obj_in.get_ylim()
xdelta = xlim[1] - xlim[0]
ydelta = ylim[1] - ylim[0]
if not inverse:
xout = xlim[0] + xin * xdelta
yout = ylim[0] + yin * ydelta
else:
xdelta2 = xin - xlim[0]
ydelta2 = yin - ylim[0]
xout = xdelta2 / xdelta
yout = ydelta2 / ydelta
return xout,yout
Run Code Online (Sandbox Code Playgroud)