加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何将2D网格点云插入连续区域?

发布时间:2020-12-16 22:39:49 所属栏目:Python 来源:网络整理
导读:我有一个2维Numpy NDarray填充0到8之间的浮点数.这个2维数组大小是(1000,1600)并且有大约1400个值(点云中的点),其余值是None,所以matplotlib不会绘制这些值.您可以在下图中看到绘制的表格.我想要的是,使用旁边的值插值的None值具有渐变式热图.这个pointcloud

我有一个2维Numpy NDarray填充0到8之间的浮点数.这个2维数组大小是(1000,1600)并且有大约1400个值(点云中的点),其余值是None,所以matplotlib不会绘制这些值.您可以在下图中看到绘制的表格.我想要的是,使用旁边的值插值的None值具有渐变式热图.这个pointcloud代表屋顶的形状,我想把这个数据处理成一个我可以提供给神经网络以检测屋顶类型的图像.

我用于此图的代码很短,

import matplotlib.pyplot as plt
plt.clf()
#plotGrid is the numpy.ndarray with shape (1000,1600) and dtype float
plt.imshow(plotGrid,cmap='gray',interpolation='nearest')
plt.colorbar()
plt.show()

图片(点击放大,看点):

最佳答案
tricontouf

您可以使用有效值的三角图.为此,您首先需要过滤掉所有的nan值(您应该确实使用无效值np.nan而不是None).
可以将这些值及其坐标放入plt.tricontour()中以获得等高线图而无需手动插值.

import matplotlib.pyplot as plt
import numpy as np

# Generate some example data
f = lambda x,y : np.exp((-(x-150)**2-(y-150)**2)/3.e3)
plotGrid = np.zeros((300,300))*np.nan
coo = np.random.randint(5,295,size=(150,2) )
for x,y in coo:
    plotGrid[y,x] = f(x,y)
#plotGrid is now a numpy.ndarray with shape (300,300),mostly np.nan,and dtype float

# filter out nan values and get coordinates.
x,y = np.indices(plotGrid.shape)
x,y,z = x[~np.isnan(plotGrid)],y[~np.isnan(plotGrid)],plotGrid[~np.isnan(plotGrid)]

plt.tricontourf(x,z)

plt.colorbar()
plt.show()

enter image description here

tripcolor

使用tripcolor是另一种选择:

plt.tripcolor(x,z,shading='gouraud')

enter image description here

插值和轮廓

您还可以先使用matplotlib.mlab.griddata在网格上插入数据,然后使用正常的contourf图,

xi = np.linspace(0,plotGrid.shape[1],plotGrid.shape[1])
yi = np.linspace(0,plotGrid.shape[0],plotGrid.shape[0])
zi = mlab.griddata(x,xi,yi,interp='linear')
plt.contourf(xi,zi,15)

插值和imshow

或者以同样的方式使用imshow情节,

plt.imshow(zi)

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读