我有一组数据,我想使用 Matplotlib 在极坐标中生成等高线图。
我的数据如下:
theta
- 角度值的一维数组radius
- 半径值的一维数组value
- 我想用于轮廓的一维值数组
这些都是正确对齐的一维数组 - 例如:
theta radius value
30 1 2.9
30 2 5.3
35 5 9.2
也就是说,所有的值都重复了足够多的次数,因此这个包含三个变量的“表格”的每一行都定义了一个点。
如何根据这些值创建极坐标等值线图?我考虑过将半径和 theta 值转换为 x 和 y 值并在笛卡尔坐标中进行,但轮廓函数似乎需要二维数组,我不太明白为什么。
有什么想法吗?
最佳答案
Matplotlib 的 contour()
函数要求将数据排列为点的二维网格以及每个网格点对应的值网格。如果您的数据自然排列在网格中,您可以将 r、theta 转换为 x、y 并使用 contour(r*np.cos(theta), r*np.sin(theta), values)
制作你的情节。
如果您的数据不是自然网格化的,您应该遵循 Stephen 的建议并使用 griddata()
将数据插入到网格中。
以下脚本显示了两者的示例。
import pylab as plt
from matplotlib.mlab import griddata
import numpy as np
# data on a grid
r = np.linspace(0, 1, 100)
t = np.linspace(0, 2*np.pi, 100)
r, t = np.meshgrid(r, t)
z = (t-np.pi)**2 + 10*(r-0.5)**2
plt.subplot(121)
plt.contour(r*np.cos(t), r*np.sin(t), z)
# ungrid data, then re-grid it
r = r.flatten()
t = t.flatten()
x = r*np.cos(t)
y = r*np.sin(t)
z = z.flatten()
xgrid = np.linspace(x.min(), x.max(), 100)
ygrid = np.linspace(y.min(), y.max(), 100)
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata(x,y,z, xgrid, ygrid)
plt.subplot(122)
plt.contour(xgrid, ygrid, zgrid)
plt.show()
关于python - Matplotlib 中的极地等高线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548556/