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

如何在Matplotlib中将一维极坐标数据转为等高线图?

解决Matplotlib极坐标等高线图的1D数据报错问题

首先修正你原始代码的缩进错误——g4.append(v)需要放在循环内部,否则只会保留最后一个计算值:

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

theta = np.arange(math.radians(0), math.radians(361), 0.01).tolist()
g4 = []
for i in theta:
    v = ((2**(1-1)) * (1 + (1*math.cos(i)))**1)
    g4.append(v)  # 修正缩进,确保每个θ对应的v都被添加到列表

# 原来的散点图代码
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.scatter(theta, g4, c=g4, cmap='viridis')

错误原因

ax.contourf()要求输入的z参数必须是二维数组,因为它用来展示极坐标平面(θ, r)上的连续标量场,而你当前的g4是一维数组,仅记录了每个θ对应的r值,不符合函数的输入要求。

解决方案

根据你的需求分两种情况处理:

情况1:绘制极坐标下的二维标量场等高线

如果需要展示完整的二维场等高线,需要先构建θ和r的二维网格,再计算每个网格点对应的z值:

import numpy as np
import matplotlib.pyplot as plt

# 生成θ和r的网格数据
theta = np.linspace(0, 2*np.pi, 100)
r = np.linspace(0, 2, 100)  # 你的r(θ)=1+cosθ的最大值为2,所以r范围设0-2
theta_grid, r_grid = np.meshgrid(theta, r)

# 计算每个网格点的z值,这里示例用r与目标曲线的差值作为场值
z = r_grid - (1 + np.cos(theta_grid))

# 创建极坐标子图并绘制等高线
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
contour = ax.contourf(theta_grid, r_grid, z, cmap='viridis', levels=20)
fig.colorbar(contour)

# 叠加原始的r(θ)曲线作为参考
ax.plot(theta, 1 + np.cos(theta), color='red', linewidth=2)

plt.show()

情况2:填充极坐标曲线围成的区域

如果你的需求只是填充r(θ)曲线围成的区域(而非二维场等高线),不需要用contourf,直接用fill即可:

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.fill(theta, g4, color='skyblue', alpha=0.7)
ax.plot(theta, g4, color='darkblue', linewidth=1)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:06