matplotlib 转换Axis数据坐标系

os8fio9y  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(123)

我的问题很简单:在matplotlib中,如何轻松地将坐标系中的坐标转换为数据系统(理想情况下,我正在寻找一个简单的函数output_coords = magic_func(input_coords)
其实我的问题是:我想绘制一个matplotlib.patches.Ellipse与他的中心轴系统,但他的大小(宽度和长度)在数据系统。但是transforms.blended_transform_factory方法在这种情况下不起作用。

k0pti3hp

k0pti3hp1#

要从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))
iugsix8n

iugsix8n2#

transforms tutorial之后,最简单的方法是使用ax.transLimits

output_coords = ax.transLimits.transform(input_coords)
dw1jzc5e

dw1jzc5e3#

没有找到即时的解决方案,需要自己写:

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

相关问题