1D X, Y 및 Z 변수를 사용하는 Python의 2D 등고선 플롯

Aug 15 2020

제가 Python을 처음 접했음을 인정하면서이 쿼리를 시작하겠습니다. 프로세스를 자동화하기 위해 Python에서 데이터의 등고선 플롯을 만들고 싶습니다. 그렇지 않으면 Surfer를 사용하여 쉽게 수행 할 수 있습니다. 나는 그러한 데이터 파일이 1000 개 있고 수동으로 생성하는 것은 매우 지루할 수 있습니다. 내가 사용하는 데이터는 다음과 같이 0, 1 및 2 헤더와 1,2, .. 279가 인덱스로있는 데이터 프레임입니다.

     0   1         2
0     3  -1 -0.010700
1     4  -1  0.040100
2     5  -1  0.061000
3     6  -1  0.052000
4     7  -1  0.013100
..   ..  ..       ...
275  30  -9 -1.530100
276  31  -9 -1.362300
277  32  -9 -1.190200
278  33  -9 -1.083600
279  30 -10 -1.864600

[280 rows x 3 columns]

여기,

x=data[0]
y=data[1]
z=data[2]

contour 함수 pf matplotlib는 z가 2D 배열이어야하므로; 이것이 혼란이 시작되는 곳입니다. stackoverflow 쿼리의 여러 솔루션에 따라 다음을 수행했습니다.

import numpy as np
x=np.array(x)
y=np.array(y)
z=np.array(z)
X, Y = np.meshgrid(x, y)
import scipy.interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
Z=rbf(X,Y)

lmin=data[2].min()
lmax=data[2].max()
progn=(lmax-lmin)/20
limit=np.arange(lmin,lmax,progn)

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.contour(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()

위의 코드를 사용하면이 플롯이 파생됩니다.

그러나 이는 바람직하지 않으며 표면 노이즈 선을 통해 한 번 볼 수있는 경우 아래에 정렬 된 등고선이 있으며, 이는 여기 서퍼에 의해 생성 된 등고선 플롯에서 볼 때 실제로 원하는 것입니다.

동일한 데이터가 서퍼 플롯을 생성하는 데 사용되었다는 사실을 반복하고 싶습니다.

원하는 플롯을 만드는 데 도움을 주시면 감사하겠습니다.

답변

ChandanDey Oct 07 2020 at 18:34

답변에 대한 @JohanC에게 감사드립니다. 나는 그의 제안을 내 질문과 함께 관점에 넣고 싶습니다.

ax.contour대체 ax.tricontour내 상황 을 해결합니다. 그리고 ax.tricontourf윤곽 채우기가 완료됩니다. 따라서 내 코드의 마지막 부분은 다음과 같습니다.

fig, ax = plt.subplots(figsize=(6,2)) #x ranges between 3 to 57, y -1 to -10
ax.tricontour(X,Y,Z,limit) 
ax.tricontourf(X,Y,Z,limit) 
ax.set_title('Contour Plot')
plt.show()