2024-05-16 03:13:39 发布
网友
我的问题很简单:在matplotlib中,如何轻松地将轴系统中的坐标转换为数据系统中的坐标 (理想情况下,我正在寻找一个简单的函数output_coords = magic_func(input_coords))
output_coords = magic_func(input_coords)
实际上我的问题是: 我想画一个matplotlib.patches.Ellipse,他的中心在轴系统,而他的大小(宽度和长度)在数据系统。 但是transforms.blended_transform_factory方法在这种情况下不起作用。
matplotlib.patches.Ellipse
transforms.blended_transform_factory
谢谢!
找不到立竿见影的解决方案,需要自己写:
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
遵循transforms tutorial,最简单的方法是 ax.transLimits。
ax.transLimits
output_coords = ax.transLimits.transform(input_coords)
要从Axes实例ax获取转换,可以使用
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))
找不到立竿见影的解决方案,需要自己写:
遵循transforms tutorial,最简单的方法是
ax.transLimits
。要从
Axes
实例ax
获取转换,可以使用相关问题 更多 >
编程相关推荐