2016-08-25 4 views
0

나는 matplotlib와 Axes3D를 사용하여 파이썬에서 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 유의하시기 바랍니다, 데이터는 내가 도망 다른 파일에 따라 변경됩니다. 올바른 방향의 한 점을 높이 평가할 것입니다.

편집 : 방법은

나는 내가 가지고 시도하지 않은 것을 기억할 수없는 지난 이틀 동안 너무 많은 다른 예에서 너무 많은 다른 보간 방법을 시도했습니다 시도했다. 나는 griddata, interp2d 및 약간 hImage.imshow(interpolation='gaussian') (또는 그 효과가있는 것)을 기억한다고 생각합니다. Griddata는 plot_surface을 이해하지 못했고, interp2d는 끝나지 않았으며, hImage는 예상했던 것처럼 축소 된 변형없이 전체 플롯을 노란색으로 바꿨습니다.

또한 2D 데이터 배열과 1 차원 데이터 배열을 결합하고 2D 배열의 길이로 나누는 등의 다른 방법을 시도했습니다. 불행히도, 내 데이터에는 매우 낮은 값이 많이 포함되어 있기 때문에 컨버전스에서 잃어버린 몇 가지 높은 값이 있습니다. 편집 : 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를 만드는 것인가? 나는 파이썬과 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) 

다른 옵션을 찾는 동안 발견 한 기능의 이동 평균 유형입니다. 내 데이터의 상당 부분이 z 축 값이 낮기 때문에 높은 피크를 낮추는 트레이드 오프가 있지만 내 3D 플롯을 부드럽게 만듭니다.

+0

코드를 편집하고 정의 된 함수의 본문을 들여 쓰기해야합니다. 이제는 잘못된 코드이므로 downvoted해야합니다. 다행히 당신을 위해 일한 해결책을 찾았습니다. – dblclik

+0

@dblclik 죄송합니다! 그것을 복사/붙여 넣기했을 때 들여 쓰기를하지 않았다는 것을 깨닫지 못했습니다. 잡으러 와줘서 고마워. – SanticL

+0

아무런 문제가 없지만 항상 내게 일어난다. (나는 누군가가 항상 나를 생각 나게 해주기를 바란다!) 표면 플롯을 가진 GL – dblclik

관련 문제