Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib pcolor进行插值_Python_Numpy_Matplotlib_Scipy - Fatal编程技术网

Python 使用matplotlib 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

我有两个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

这就产生了块状外观,有没有关于如何获得更平滑的图形的想法?

没有,
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是一种方法,但是我不太明白怎么做。我只是用一个简单的插值例子更新了我的答案。