2016-08-25 8 views
0

matplotlibとAxes3Dを使用してPythonで3Dプロットを作成しました。それはかなりよく見えますが、プロットしているデータの量によってギザギザのエッジがたくさんあります。私はデータ上でscipy補間法を試みましたが、plot_surfaceコマンドは与えられた型を好きではありません。私は主題に関して他に多くを見つけることができませんでした。ここで3Dプロットのスムーズな大量データ

は、これまでの私のコードです:

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、およびデータは、私が実行して別のファイルに基づいて変更されますのでご注意ください。正しい方向のポイントが高く評価されます。

編集:メソッドは、私は私が私が持っているものを覚えてすることはできませんし、試していませんが、過去2日間で非常に多くの異なる例から非常に多くの異なる補間方法を試してみた

を試してみました。私はgriddatainterp2dといくつかはhImage.imshow(interpolation='gaussian')(またはそれに相当するもの)を覚えていると思います。 Griddataは、plot_surfaceが理解できなかった何かを返しました、interp2dは決して終了しませんでした。そしてhImageは、私が期待していたような縮尺の変化なしで私の全体のプロットを黄色に変えました。

私は2次元配列の1と2次元配列の長さで割ることでデータを畳み込むなどの他のアプローチも試みました。残念ながら、私のデータには非常に低い値がたくさん含まれているので、私が畳み込みで失ったいくつかの高い値があります。 編集:私はlen^2で割り切れるのを忘れていました。

私は本質的にMatLabからshading interpを探しています。

+0

日付を補間しようとしたことを示すコードはありますか?つまり、あなたが試したSciPyの機能です。また、Githubでホストできるサンプルファイルや、私たちがあなたと一緒に試してみるべきものがありますか? – dblclik

+0

また、ここで提案を試しましたか?http://stackoverflow.com/a/35158321/1607105? – dblclik

+0

@dblclik例から始めましたが、データは2D配列であり、xとyはそうではないので、この例の 'tck = interpolate.bisplrep(X、Y、Z、s = 0)'は作業。ファイルに関しては、私は仕事のプロトコルのために私がホストすることができるものは本当にありません。私が言えることは、ランダムな[140x50000]行列(またはフリップフロップxとyを作ることですか?私はPythonとmatlabの間で混同します)を作ることです。私が試した方法については、編集を参照してください? – SanticL

答えて

0

2次元の配列でデータを畳み込み、新しい配列の長さで割ったところ、

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軸値が低いので、ピークが低くなるというトレードオフがあります。

+0

あなたはコードを編集し、定義された関数の本体を字下げする必要があります。それは間違ったコードであり、下線を引く必要があります。あなたのために働く解決策を見つけられたらうれしい – dblclik

+0

@dblclikそれについては申し訳ありません!コピーして貼り付けたときにインデントを取らなかったことに気付かなかった。それをキャッチしていただきありがとうございます。 – SanticL

+0

問題はありません、私はいつも私に起こります(私はちょうど誰かが私に思い出させることを願っています!)あなたのサーフェイスプロットを使ってGL – dblclik