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

如何基于Pandas极坐标数据绘制Matplotlib极坐标等高线图?

用已有Pandas数据集绘制极坐标等高线图

问题背景

现有Pandas DataFrame包含三列:数值z、极坐标半径r(整数,0到N)、极角phi(角度值,整数0到360),需要绘制z的极坐标等高线图,但直接使用contourf时因z为一维数组报错:Input z must be 2D, not 1D。

解决方案核心思路

contourf要求输入的z必须是与极坐标网格(theta、r)维度完全匹配的二维数组,因此需要把原有长格式的数据集(每行对应一个(r,phi,z))重塑为二维网格结构。

具体实现代码

1. 数据预处理(以模拟数据集为例,替换为你的真实DataFrame即可)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 模拟你的数据集:生成所有(r, phi)组合及对应的z值
r_vals = np.arange(0, 10)  # 示例r范围0-9
phi_vals = np.arange(0, 361)  # 示例phi范围0-360
df = pd.DataFrame(
    [(r, phi, np.sin(r/5) * np.cos(np.radians(phi))) for r in r_vals for phi in phi_vals],
    columns=["r", "phi", "z"]
)

2. 转换极角并重塑z为二维网格

# 把角度phi转换为matplotlib极坐标需要的弧度theta
df["theta"] = np.radians(df["phi"])

# 将长格式数据转为宽格式:行对应r,列对应theta,值为z
z_grid = df.pivot(index="r", columns="theta", values="z").values

# 生成与z_grid维度匹配的极坐标网格
theta_range = np.radians(phi_vals)
r_range = r_vals
theta, r = np.meshgrid(theta_range, r_range)

3. 绘制极坐标等高线图

fig, ax = plt.subplots(subplot_kw={"projection": "polar"})
# 绘制填充等高线,可自定义colormap
contour_plot = ax.contourf(theta, r, z_grid, cmap="viridis")
# 添加颜色条标注z值
fig.colorbar(contour_plot, label="z值")
plt.show()

关键注意事项

  • 确保你的原始DataFrame中每个(r, phi)组合唯一且无缺失,如果存在缺失值,可在pivot时添加fill_value参数(如fill_value=0)填充;
  • meshgrid的参数顺序要注意:第一个参数是theta(极角),第二个是r(半径),与contourf的输入顺序对应;
  • 如果你的r或phi取值不是连续整数,也可以用这种方法,只要通过pivot把数据转换成对应维度的二维数组即可。

内容的提问来源于stack exchange,提问作者Nicole I.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:22:43