You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:03:36