不规则间隔样本的2D彩色图(matplotlib.mlab.griddata)

3 投票
1 回答
2338 浏览
提问于 2025-04-20 16:24

我之前在代码审查上发过这个问题,但有人告诉我这里更合适,所以我把它搬过来了。

简单来说,我想为一些不规则采样的数据创建一个彩色图。我在使用matplotlib.mlab.griddata进行插值时取得了一些成功。不过,当我用matplotlib.pyplot.imshow绘制插值后的数据时,图的边缘部分似乎是空白的。如果我增加网格的密度(在代码中增加N),情况会好一些,但问题并没有完全解决。

我附上了我的代码,并想上传我生成的图像,但因为声望不够,暂时无法上传图片;)

编辑:现在情况变了,按照Ajean的建议进行了修改,上传了图像:在这里输入图片描述

有人能帮我看看问题出在哪里吗?

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.mlab import griddata

# Generate Data
X=np.random.random(100)
Y=2*np.random.random(100)-1
Z=X*Y

# Interpolation
N=100j       
extent=(0,1,-1,1)
xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N]
resampled=griddata(X,Y,Z,xs,ys,interp='nn')

#Plot

fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_xlabel('X')
ax.set_ylabel('Y')

cplot=ax.imshow(resampled.T,extent=extent) 
ticks=np.linspace(-1,1,11)
cbar=fig.colorbar(magplot,ticks=ticks,orientation='vertical')
cbar.set_label('Value', labelpad=20,rotation=270,size=16)

ax.scatter(X,Y,c='r')

1 个回答

1

这是因为你调用随机数的方式没有给你边界角落的任何值,所以没有东西可以用来插值。如果你把X和Y的定义改成

# Just include the four corners
X=np.concatenate([np.random.random(100),[0,0,1,1]])
Y=np.concatenate([2*np.random.random(100)-1,[-1,1,1,-1]])

这样的话,你就能填满整个区域了。

撰写回答