Matplotlib 3.5中如何获取椭圆的轴坐标路径顶点而非缩放顶点
在Matplotlib 3.5中获取椭圆的轴坐标系顶点
你遇到的问题根源在于用错了变换方法:get_transform()返回的是从Patch内部坐标到**显示坐标系(比如像素)**的完整变换链,而非到轴数据坐标系的变换。要拿到轴坐标系下的顶点,得用get_patch_transform()——这个变换专门负责把Patch的归一化内部坐标(-1到1范围)转换成轴的数据坐标。
修正后的代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse # 补充你漏写的导入 theta = np.pi/4 # 补充theta的定义,你原代码里没给出 fig, ax = plt.subplots() ell_patch = Ellipse((10, 10), 200, 200, theta*180/np.pi, edgecolor='red', facecolor='none') ax.add_patch(ell_patch) ax.set_xlim(-200,200) ax.set_ylim(-200,200) # 获取归一化路径和Patch到数据坐标的变换 path = ell_patch.get_path() patch_transform = ell_patch.get_patch_transform() # 转换顶点到轴数据坐标系 data_coords_vertices = patch_transform.transform(path.vertices) print(data_coords_vertices)
简单解释下:
get_patch_transform()会自动处理椭圆的中心位置、长/短轴长度和旋转角度,把归一化的顶点转换成轴数据坐标系下的实际位置,不会出现你之前遇到的过度缩放问题。- 而
get_transform()包含了从Patch内部坐标→轴数据坐标→显示坐标的所有步骤,直接用它转换得到的是显示层面的坐标(比如像素值),不是你需要的轴坐标系坐标,这就是之前椭圆变大的原因。
内容的提问来源于stack exchange,提问作者G M
相关产品推荐
相关产品推荐

