3D-p中大数据的平滑处理

2024-10-01 09:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用matplotlib和Axes3D在Python中绘制了一个3D图,它看起来很不错,但是由于我绘制的数据太多,它有很多锯齿状的边缘。我尝试过对数据使用scipy插值方法,但是plot_surface命令不喜欢返回的类型。关于这个问题,我还没能找到更多的信息。在

以下是我目前为止的代码:

import numpy
import scipy.io as sio
from matplotlib import pyplot 
import matplotlib
from mpl_toolkits.mplot3d import Axes3D
import scipy

#data pulled from file
matFile = sio.loadmat(matFileLocation)
data = matFile['data']
[numrows, numcols] = numpy.shape(numpy.atleast_2d(data))
fig = pyplot.figure()
ax = fig.gca(projection = '3d')
x = range(numcols)
y = range(numrows)
X, Y = numpy.meshgrid(x,y)
hImage = ax.plot_surface(X,Y,data,cmap = 'jet', rstride = 1, cstride = 10, linewidth=0, antialiased = False)
fig.colorbar(hImage)
hImage.set_clim(mindb, maxdb)
pyplot.show()

请注意,x、y和数据将根据我运行的不同文件而改变。如果能在正确的方向上提出一点建议,我们将不胜感激。在

编辑:尝试的方法

在过去的两天里,我从太多不同的例子中尝试了太多不同的插值方法,以至于我不记得我有什么和没有试过的。我想我记得griddatainterp2d和一些{}(或者类似的东西)。Griddata返回了plot_surface无法理解的内容,interp2d从未完成,hImage将我的整个绘图变为黄色,没有我预期的缩放变化。在

我也尝试过其他方法,比如用一组一的二维数组卷积数据,然后除以二维数组的长度。不幸的是,我的数据包含很多非常低的值,所以我在卷积中丢失了一些高值。编辑:我忘了除以len^2,这些值现在更有意义了。

我基本上是从MatLab中寻找shading interp。在


Tags: 数据方法fromimportnumpydataplotmatplotlib
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:47

最后我用一个2d数组对数据进行卷积,然后除以新数组的长度。在

def movingaverage(interval, window_size, mindb):
    window= numpy.ones((int(window_size),int(window_size)))/(float(window_size)**2)
    return scipy.signal.convolve2d(interval, window, 'same', fillvalue=mindb)

这是我在寻找其他选项时发现的移动平均函数类型。它平滑了我的3d绘图,尽管它确实有降低峰值的代价,因为我的很多数据的z轴值很低。在

相关问题 更多 >