如何基于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.
相关产品推荐
相关产品推荐

