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

Matplotlib极坐标图中如何填充两条theta(r)曲线间的扇形区域

极坐标下填充两条theta(r)曲线间径向区域的实现方案

常规极坐标fill_between方法仅支持r作为theta函数的场景,针对持有的theta1(r)、theta2(r)曲线(r在1~330区间均匀取值),不需要推导多值的逆关系r(theta),直接通过构造闭合多边形填充即可实现目标效果:

  • 核心逻辑:将两条曲线的采样点按顺序拼接为闭合路径,直接调用极坐标轴的fill方法完成填充,完全适配theta为r函数的场景。

实现步骤

  • 采样数据准备:在r的取值区间[1, 330]内取密度足够高的均匀采样点,分别计算每个r对应的theta1(r)、theta2(r)值,注意极坐标接口要求theta传入弧度单位,若计算结果为角度需提前转换。
  • 构造闭合填充路径:按顺序拼接坐标点形成无缺口的闭合区域轮廓:
    1. 第一条曲线:沿r从小到大的顺序,排列所有(theta1[i], r[i])点
    2. 第二条曲线:沿r从大到小的倒序,排列所有(theta2[i], r[i])点
  • 调用填充接口绘图:将拼接完成的theta数组、r数组传入极坐标轴的fill方法,即可完成区域填充。

可直接运行的代码示例

import numpy as np
import matplotlib.pyplot as plt

# 生成r轴采样点,采样数越高填充边缘越平滑
r = np.linspace(1, 330, 1000)
# 替换为你实际的theta1(r)、theta2(r)计算逻辑,以下为演示用示例函数
theta1 = 0.2 * np.sin(r / 50) + np.pi / 4
theta2 = 0.2 * np.cos(r / 50) + np.pi / 3

# 拼接闭合路径坐标
theta_fill = np.concatenate([theta1, theta2[::-1]])
r_fill = np.concatenate([r, r[::-1]])

# 创建极坐标子图并绘图
fig, ax = plt.subplots(subplot_kw={"projection": "polar"})
# 填充区域,可自定义填充色、透明度
ax.fill(theta_fill, r_fill, color="skyblue", alpha=0.6)
# 可选:绘制两条边界曲线
ax.plot(theta1, r, color="navy", linewidth=2)
ax.plot(theta2, r, color="darkorange", linewidth=2)

plt.show()

效果参考

填充效果示意图

注意事项

  • 如果两条曲线的theta差跨过极坐标0/2π周期边界(比如一个值接近0、另一个接近2π),可以先对theta数组做解缠绕处理避免填充错位:调用np.unwrap(theta1)、np.unwrap(theta2)处理后再拼接路径即可。
  • r区间跨度较大时建议采样点数量不低于1000,避免填充边缘出现锯齿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:57:19