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

如何为Matplotlib绘制的椭圆添加轴线?

在Matplotlib中为椭圆添加轴线的通用方法

问题描述

我通过Matplotlib绘制了椭圆,但需要为其添加长轴和短轴以达到目标效果,现有代码如下:

import matplotlib.patches as patches
import matplotlib.pyplot as plt

fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'})

ellipse = patches.Ellipse((0, 0), 4, 2, angle=45, fill=False)
ax.add_artist(ellipse)

ax.set_xlim(-2.2, 2.2)
ax.set_ylim(-2.2, 2.2)

plt.show()

通用实现方案

patches.Ellipse没有内置添加轴线的参数,我们可以通过几何计算实现通用的轴线绘制,适配任意参数的椭圆(包括旋转、非原点中心的情况):

核心思路

  • 提取椭圆的中心坐标、长/短轴长度、旋转角度
  • 将角度转换为弧度,利用三角函数的旋转公式计算轴线端点坐标
  • 在坐标轴上绘制两条垂直的轴线

修改后的完整代码

import matplotlib.patches as patches
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'})

# 定义椭圆参数
center = (0, 0)
long_axis_len = 4  # 长轴直径
short_axis_len = 2  # 短轴直径
rotate_angle = 45  # 旋转角度(单位:度)

# 创建并添加椭圆
ellipse = patches.Ellipse(center, long_axis_len, short_axis_len, angle=rotate_angle, fill=False)
ax.add_artist(ellipse)

# 计算轴线端点坐标
angle_rad = np.deg2rad(rotate_angle)
a = long_axis_len / 2  # 长半轴
b = short_axis_len / 2  # 短半轴
cx, cy = center

# 长轴两个端点
long_end1 = (cx + a * np.cos(angle_rad), cy + a * np.sin(angle_rad))
long_end2 = (cx - a * np.cos(angle_rad), cy - a * np.sin(angle_rad))

# 短轴两个端点(与长轴垂直,旋转角度+90度)
short_end1 = (cx + b * np.cos(angle_rad + np.pi/2), cy + b * np.sin(angle_rad + np.pi/2))
short_end2 = (cx - b * np.cos(angle_rad + np.pi/2), cy - b * np.sin(angle_rad + np.pi/2))

# 绘制轴线,可自定义样式
ax.plot([long_end1[0], long_end2[0]], [long_end1[1], long_end2[1]], color='red', linestyle='--')
ax.plot([short_end1[0], short_end2[0]], [short_end1[1], short_end2[1]], color='blue', linestyle='--')

ax.set_xlim(-2.2, 2.2)
ax.set_ylim(-2.2, 2.2)

plt.show()

方案优势

  • 完全基于椭圆的基础参数计算,适配所有类型的椭圆
  • 可灵活调整轴线的颜色、线型、宽度等样式
  • 若需批量处理,可将轴线绘制逻辑封装为函数,传入椭圆对象或参数即可

内容的提问来源于stack exchange,提问作者Mia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:05:33