6

我有两个 numpy 数组,第一个是 (30, 365) 并且包含全年 30 个深度的值,第二个数组是 (30, 1) 并且包含与深度对应的实际深度(以米为单位)第一个数组。我想绘制第一个数组,以便根据第二个数组缩放深度,但我还希望对数据进行插值(前几个深度相对靠近,而较低的深度相距很远,为 pcolor 图像提供块状外观.)

这就是我正在做的事情:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 365, 1)
X, Y = np.meshgrid(x, depth)    #depth is the (30, 1) array

plt.pcolor(X, -Y, data)         #data is the (30, 365) array

这导致了块状外观,关于如何获得更平滑的图形的任何想法?

4

2 回答 2

4

您的深度是否在规则网格上(即恒定间距)?如果是这样,您可以使用关键字 and来imshow设置范围。否则,您有两个选择。extentaspect='auto'

您可以pcolormesh改用并使用shading='gouraud'. 这将有助于清晰的颜色量化,但不如插值好。

第二种选择是将数据插值到一个新的常规深度网格中,这样您就可以使用imshow不同的插值选项。例如,要仅沿深度方向进行插值,您可以使用 scipy's interpolate.interp1d

from scipy.interpolate import interp1d

fint = interp1d(depth, data.T, kind='cubic')
newdata = fint(newdepth).T

之所以.T添加,是因为插值必须在最后一个索引上,而深度是数据的第一个索引。如果您愿意,可以替换kind为。'linear'

于 2012-08-22T22:55:51.547 回答
3

不,pcolor不做插值。您可以尝试NonUniformImage,甚至可以imshow代替。在此处查看示例

于 2012-08-22T22:01:35.953 回答