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

求助:基于1D数组实现极坐标彩色网格图的插值绘制

极坐标数据插值生成彩色网格图问题

现有数据

拥有三个1D数组:

theta数组

theta = np.array([180., 180., 180., 180., 180., 180., 180., 180., 180.,   0.,   0.,
         0.,   0.,   0.,   0.,   0.,   0.,   0.,   0., 225., 225., 225.,
       225., 225., 225., 225., 225., 225.,  45.,  45.,  45.,  45.,  45.,
        45.,  45.,  45.,  45.,  45., 270., 270., 270., 270., 270., 270.,
       270., 270., 270.,  90.,  90.,  90.,  90.,  90.,  90.,  90.,  90.,
        90.,  90., 315., 315., 315., 315., 315., 315., 315., 315., 315.,
       135., 135., 135., 135., 135., 135., 135., 135., 135., 135.])

phi数组

phi = np.array([45.        , 39.98823529, 35.01176471, 30.        , 24.98823529,
       20.01176471, 15.        ,  9.98823529,  5.01176471,  0.        ,
        5.01176471,  9.98823529, 15.        , 20.01176471, 24.98823529,
       30.        , 35.01176471, 39.98823529, 45.        , 45.        ,
       39.98823529, 35.01176471, 30.        , 24.98823529, 20.01176471,
       15.        ,  9.98823529,  5.01176471,  0.        ,  5.01176471,
        9.98823529, 15.        , 20.01176471, 24.98823529, 30.        ,
       35.01176471, 39.98823529, 45.        , 45.        , 39.98823529,
       35.01176471, 30.        , 24.98823529, 20.01176471, 15.        ,
        9.98823529,  5.01176471,  0.        ,  5.01176471,  9.98823529,
       15.        , 20.01176471, 24.98823529, 30.        , 35.01176471,
       39.98823529, 45.        , 45.        , 39.98823529, 35.01176471,
       30.        , 24.98823529, 20.01176471, 15.        ,  9.98823529,
        5.01176471,  0.        ,  5.01176471,  9.98823529, 15.        ,
       20.01176471, 24.98823529, 30.        , 35.01176471, 39.98823529,
       45.        ])

violet_ints数组

violet_ints = np.array([ 60821.47285091,  71469.47778826,  81950.58139812,  92660.95741024,
       103228.07719577, 113446.6171393 , 123862.48451513, 132666.65201113,
       138673.94497866, 141418.87424494, 140947.68057807, 137704.80141046,
       131712.10023037, 122871.74227686, 111022.93897237,  98051.87876927,
        85884.71515151,  74789.81179595,  64223.21535332,  47239.6029958 ,
        59060.46569283,  71631.51992138,  85056.88727878,  97838.32318773,
       110985.04206186, 123046.60805235, 131994.74029036, 138009.81758468,
       141092.29699058, 141436.99265739, 139367.40863866, 134564.53259257,
       127256.22737589, 117476.56579378, 105893.78184852,  94434.79559289,
        83012.77977437,  71513.83906988,  35465.27768276,  52489.59008641,
        70259.4064192 ,  87011.24343702, 101845.51856053, 114496.37908394,
       125113.38041456, 132956.15831876, 138245.26502938, 140988.36471711,
       141467.04309028, 139302.73813352, 135346.73647267, 128688.98045284,
       120273.38645452, 110273.45442647,  99177.33744858,  87341.78739578,
        74874.97094334,  50986.33091372,  63371.63698099,  76937.62936534,
        91341.43206481, 105418.35862792, 117371.0063522 , 127397.07283259,
       134693.40421132, 139258.98685025, 141392.73492377, 140797.81487188,
       137360.21016255, 130967.39590833, 122385.40640793, 113290.91743172,
       103305.45203984,  93133.15852394,  82350.70121816,  71046.51493323])

现有绘图代码

已通过以下代码生成极坐标散点图:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(10, 20))
ax = plt.axes(projection='polar')
axx = ax.scatter(theta*np.pi/180, phi, c=violet_ints, cmap='viridis')
plt.colorbar(axx, shrink = 0.4);

问题描述

需要对上述数据进行插值,生成极坐标彩色网格图。尝试用np.meshgrid转换数组:

Theta, Phi = np.meshgrid(theta, phi)
_, Violet_Ints = np.meshgrid(violet_ints, violet_ints)

但用pcolormesh绘图结果不符合预期,求解决方法。

解决方案

问题原因

直接对原始重复分组的1D数组做meshgrid,会生成冗余且不规则的网格点,无法满足插值和网格绘图的要求。

正确实现步骤

  1. 提取原始数据中唯一的角度值,构建规则的极坐标网格
  2. 使用插值算法将离散的强度值映射到规则网格上
  3. 绘制极坐标彩色网格图

完整代码

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata

# 1. 将theta转换为弧度
theta_rad = theta * np.pi / 180

# 2. 提取唯一的角度值并排序,构建规则网格
unique_theta = np.sort(np.unique(theta_rad))
unique_phi = np.sort(np.unique(phi))
Theta_grid, Phi_grid = np.meshgrid(unique_theta, unique_phi)

# 3. 对强度值进行插值,得到规则网格上的数值
violet_grid = griddata(
    (theta_rad, phi), 
    violet_ints, 
    (Theta_grid, Phi_grid), 
    method='cubic'  # 三次插值,平滑效果好;追求速度可换为'linear'
)

# 4. 绘制极坐标网格图
plt.figure(figsize=(10,10))
ax = plt.axes(projection='polar')
pcm = ax.pcolormesh(Theta_grid, Phi_grid, violet_grid, cmap='viridis')
plt.colorbar(pcm, shrink=0.6)
ax.set_title('极坐标插值彩色网格图', y=1.1)
plt.show()

说明

  • 若未安装scipy,可执行pip install scipy完成安装
  • 插值方法可选linear(线性,速度快)或cubic(三次,平滑度高),可根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:30:55