python 中的二维等值线图使用一维 X、Y 和 Z 变量

2D contour plot in python using 1D X, Y and Z variables

首先让我承认我对 Python 很陌生。我想在 Python 中创建数据的等高线图,以便自动化该过程,否则可以使用 Surfer 轻松执行。我有 1000 个这样的数据文件,手动创建可能会非常乏味。 我正在使用的数据如下所示,它是一个数据帧,其中包含 0、1 和 2 headers 以及 1,2,..279 作为索引:

     0   1         2
0     3  -1 -0.010700
1     4  -1  0.040100
2     5  -1  0.061000
3     6  -1  0.052000
4     7  -1  0.013100
..   ..  ..       ...
275  30  -9 -1.530100
276  31  -9 -1.362300
277  32  -9 -1.190200
278  33  -9 -1.083600
279  30 -10 -1.864600

[280 rows x 3 columns]

这里,

x=data[0]
y=data[1]
z=data[2]

由于轮廓函数pf matplotlib要求z是一个二维数组;这就是混乱开始的地方。按照Whosebug查询的几种解决方案,我做了以下事情:

import numpy as np
x=np.array(x)
y=np.array(y)
z=np.array(z)
X, Y = np.meshgrid(x, y)
import scipy.interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
Z=rbf(X,Y)

lmin=data[2].min()
lmax=data[2].max()
progn=(lmax-lmin)/20
limit=np.arange(lmin,lmax,progn)

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.contour(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()

用上面的代码导出这个图。

然而,这是不希望的,如果一次可以看到表面噪声线,那么下面有有序的等高线,这实际上是需要的,从这里的冲浪者生成的等高线图中可以看出。

我想重申,生成冲浪图时使用了相同的数据。

对于创建所需情节的任何帮助,我们将不胜感激。

感谢@JohanC 的回答。我想将他的建议与我的查询结合起来。

ax.contour 替换为 ax.tricontour 解决了我的情况。 ax.tricontourf 完成轮廓填充。因此,我的代码的最后一段是:

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.tricontour(X,Y,Z,limit) 
ax.tricontourf(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()

除了丢失数据之外,我在处理不规则间隔的数据时也遇到了类似的问题。有人提出的关于二维散点图的建议是完美的解决方案。

plt.figure(figsize=(10,10))
plt.scatter(df.doy,df[i].UT,c=df[i].TEC,s=10,cmap="jet")
plt.colorbar()

和我一样,我使用 plt.tricontourf 绘制了相同的等高线图并得到了相同的结果

plt.figure(figsize=(10,10))
plt.tricontourf(df.doy,df.UT,df.TEC,100,cmap="jet")
plt.colorbar()