python - 在极坐标图上插值数据后 matplotlib 中的等高线伪影

标签 python numpy matplotlib scipy

我有一小部分不规则间隔的数据,这些数据是在圆形区域的不同点处以极坐标格式获取的。我需要进行插值以在规则间隔的网格上获取数据,然后我想使用等高线图绘制它们。

我已经设法进行了插值并绘制了结果,但是我必须从极坐标转换为直角坐标才能进行插值,当我将数据转换回极坐标时,我在极坐标图上得到了伪影。

以下代码展示了我目前所拥有的,并在极坐标和矩形图上绘制了数据:

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

# inputs as 1D arrays
r = np.array([0, 1, 1, 1, 1, 2, 2, 2, 2])
theta = np.radians(np.array([0, 90, 180, 270, 0, 90, 180, 270, 0]))
# z = f(theta, r)
z = np.array([8, 7, 6, 4, 5, 2, 2, 2, 2])

# convert to rect
x = r * np.cos(theta)
y = r * np.sin(theta)

# create RBF for smoothing
rbf = Rbf(x, y, z)

# create grid to smooth over
xi, yi = np.mgrid[-2:2:10j, -2:2:10j]
# smooth
zi = rbf(xi, yi)

# convert back to polar
ri = np.sqrt(xi*xi + yi*yi)
ti = np.arctan2(yi, xi)

# polar plot
fig = plt.figure()
ax = plt.subplot(121, polar=True)
cax = ax.contour(ti, ri, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(ti, ri, zi, 10, cmap=plt.cm.Spectral)
ax.set_rmax(2)

# rect plot
ax = plt.subplot(122)
cax = ax.contour(xi, yi, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(xi, yi, zi, 10, cmap=plt.cm.Spectral)

plt.show()

剩下的问题是:

  • 我可以修复轮廓线瑕疵吗?
  • Scipy 是否提供更合适的插值算法,适用于包含极坐标的此类小型数据集?

最佳答案

您可能想阅读 this同样,但就极坐标中的等值线图而言,matplotlib 需要一个规则网格数组在半径和角度,因此您可以很好地绘制所有内容:

# polar plot
ri, ti = np.mgrid[0:2:100j, 0:2*np.pi:100j]
zi = rbf(ri*np.cos(ti), ri*np.sin(ti))

fig = plt.figure()
ax = plt.subplot(121, polar=True)
cax = ax.contour(ti, ri, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(ti, ri, zi, 10, cmap=plt.cm.Spectral)
ax.set_rmax(2)

# rect plot
xi, yi = np.mgrid[-2:2:100j, -2:2:100j]
zi = rbf(xi, yi)

ax = plt.subplot(122, aspect='equal')
cax = ax.contour(xi, yi, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(xi, yi, zi, 10, cmap=plt.cm.Spectral)
plt.show()

enter image description here

我对您使用 Rbf 感到有点惊讶。您到底想做什么,为什么要使用该插值器?

关于python - 在极坐标图上插值数据后 matplotlib 中的等高线伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364764/

相关文章:

python - 无法运行 2 人 Python 游戏

python - 如何在 Windows 10 64 位上安装 pygraphviz

python - 在 Bokeh LabelSet 中更改文本字体大小

python - 在 Python 中制作 pandas.DatetimeIndex 的有效方法

python - 如何将滑动窗口的 3d 数组展平为 2d 数组?

python - Matplotlib 使用一组特定数据点绘制等高线图

python - Matplotlib:显示 numpy "sparse"数组 - 放大点?

python - ElementTree/TidyHTMLTreeBuilder 弄乱了我文本中的尾随空格

python - 二值化图像数据

python - 当我增加框架厚度时,信号器消失