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传入弧度单位,若计算结果为角度需提前转换。 - 构造闭合填充路径:按顺序拼接坐标点形成无缺口的闭合区域轮廓:
- 第一条曲线:沿r从小到大的顺序,排列所有
(theta1[i], r[i])点 - 第二条曲线:沿r从大到小的倒序,排列所有
(theta2[i], r[i])点
- 第一条曲线:沿r从小到大的顺序,排列所有
- 调用填充接口绘图:将拼接完成的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
相关产品推荐
相关产品推荐

