Python 使用matplotlib pcolor进行插值
我有两个numpy数组,第一个是(30,365),包含全年30个深度的值,第二个是(30,1),包含与第一个数组中深度对应的实际深度(以米为单位)。我想绘制第一个阵列,以便根据第二个阵列缩放深度,但我也希望对数据进行插值(前几个深度相对较近,而较低的深度相距较远,为pcolor图像提供块状外观。) 这就是我正在做的:Python 使用matplotlib pcolor进行插值,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,我有两个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.mes
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
这就产生了块状外观,有没有关于如何获得更平滑的图形的想法?没有,
pcolor
不做插值。您可以尝试使用ununiformimage
甚至imshow
。查看示例您的深度是否在规则网格上(即,恒定间距)?如果是这样,您可以使用imshow
并使用extent
关键字和aspect='auto'
设置范围。否则,您有两个选择
您可以改用pcolormesh
并使用shading='gouraud'
。这将有助于清晰的颜色量化,但不如插值
第二种选择是将数据插值到新的常规深度栅格,因此可以使用imshow
和不同的插值选项。例如,要仅沿深度方向插值,可以使用scipy的interpolate.interp1d
:
from scipy.interpolate import interp1d
fint = interp1d(depth, data.T, kind='cubic')
newdata = fint(newdepth).T
添加了
.T
,因为插值必须位于最后一个索引上,而深度是数据的第一个索引。如果愿意,您可以将种类
替换为线性
我想问题不在于我对pcolor的迷恋,而在于我不知道如何绘制出一个与同一轴相一致的图(如果这有意义的话)@pter如果我这次理解正确,你想要一个更适合高深度的色阶,而不适合低深度的色阶?嗯,我不确定这是否是我想要的。在我的pcolor图上,上部深度平滑过渡,顶部1仅为一个像素,它们从那里慢慢变高,因此很容易看到底部和第二至底部深度相交的线。我希望我能为我的绘图添加一个图像。@p绘图会有帮助,为什么不?@p听起来你想拉伸你的轴,为什么不为你的深度做一个对数刻度呢?它不在规则的网格上。pcolormesh有一个有趣的结果,但它似乎太模糊了。我认为插值到一个规则的网格然后使用imshow是一种方法,但是我不太明白怎么做。我只是用一个简单的插值例子更新了我的答案。