使用 1D X、Y 和 Z 变量在 python 中绘制二维等高线图

让我承认我是 Python 的新手,开始这个查询。我想在 Python 中创建数据的等高线图,以便自动化该过程,否则可以使用 Surfer 轻松执行。我有 1000 个这样的数据文件,手动创建可能会非常乏味。我正在使用的数据如下所示,它是一个带有 0、1 和 2 标头以及 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 是一个二维数组;这就是混乱开始的地方。在计算器查询的几种解决方案之后,我做了以下事情:


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()

使用上面的代码可以得出该图。

http://img1.mukewang.com/646c78e10001240e03760150.jpg

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

http://img.mukewang.com/646c78ec0001350006090124.jpg

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

在创建所需情节方面的任何帮助都将受到高度赞赏。


繁星点点滴滴
浏览 155回答 2
2回答

GCT1015

除了丢失数据之外,我在处理不规则间隔的数据时遇到了类似的问题。有人提出的关于二维散点图的建议是完美的解决方案。plt.figure(figsize=(10,10)) plt.scatter(df.doy,df[i].UT,c=df[i].TEC,s=10,cmap="jet") plt.colorbar()Likewsie,我使用绘制了相同的等高线图plt.tricontourf并得到了相同的结果plt.figure(figsize=(10,10)) plt.tricontourf(df.doy,df.UT,df.TEC,100,cmap="jet") plt.colorbar()

慕姐4208626

我想把他的建议与我的查询结合起来。ax.contour替换为ax.tricontour解决了我的情况。并ax.tricontourf完成轮廓填充。因此,我的代码的最后一段是:fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10ax.tricontour(X,Y,Z,limit) ax.tricontourf(X,Y,Z,limit) ax.set_title('Contour Plot')plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python