Cara Simpel Contouring Elevasi di Python Tanpa Menggunakan Interpolasi (Mesh/Gridded/Kriging)

Yogi P
2 min readMar 23, 2021

--

Contouring merupakan metode yang lazim digunakan oleh Earth Scientist untuk memprediksi persebaran sesuatu (Cebakan, Topografi, Mineral, dll) akan tetapi untuk memvisualisasikannya cukup memakan waktu untuk membuat interpolasi dan menjadikannya gridded data

Akan tetapi ada cara mudah yang memiliki kemiripan dengan metode free-hand contouring manual, yaitu dengan menggunakan plot kdeplot dari seaborn. Dengan sedikit modifikasi kita bisa membuat peta kontur sederhana.

Kelemahan: Disini hanya menghasilkan bentuk yang merepresentasikan nilai saja, mungkin jika saya berhasil menemukannya untuk mengeluarkan nilainya akan saya buat tulisan lanjutannya

Mari langsung saja.

IMPORT LIBRARY

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata
import seaborn as sns

MEMBUAT DUMMY DATA

Kita akan membuat random dummy data yang terdiri dari (x,y) sebagai koordinat dan (z) sebagai elevasi

x = (np.random.triangular(10,50,100,20)).astype(int)
y = (np.random.triangular(10,50,100,20)).astype(int)
z = (np.random.triangular(10,50,100,20)).astype(int)

MENGINTIP HASIL

Kita intip sedikit hasilnya

import pandas as pddata= {'x':x,'y':y,'z':z}
df = pd.DataFrame(data)
df.head()
Hasil mengintip

Karena hasil mengintipnya oke mari kita lanjut untuk plot contour selamat mencoba

PLOT CONTOUR

plt.figure(figsize=(10,10))plt.ylim(0,100)
plt.xlim(0,100)
ax = sns.scatterplot(x,y,hue=z)
ax.set(xlabel='x',ylabel='y',title='Plot')
ScatterPlot

Berikut hasil plot dari data dummy kita. Selanjutnya kita akan mencoba contouring langsung dari data tersebut.

plt.figure(figsize=(10,10))plt.ylim(0,100)
plt.xlim(0,100)
ax = sns.kdeplot(x,y)
ax.set(xlabel='x',ylabel='y',title='Contour')
Contour 1

Apakah hasil ini representatif? tentu tidak. Kita harus memodifikasi sedikit agar representatif. Karena density yang dilihat oleh kdeplot adalah density (x,y)-nya saja, oleh karena itu, kita harus menyelipkan nilai z ke dalam (x,y) dengan cara menduplikasinya

X = np.repeat(x,z)
Y = np.repeat(y,z)

Setelah diduplikasi, nilai X dan Y akan merepresentasikan density atau elevasi yang kita selipkan.

plt.figure(figsize=(10,10))plt.ylim(0,100)
plt.xlim(0,100)
ax = sns.kdeplot(X,Y)
ax.set(xlabel='x',ylabel='y',title='Contour')
Contour 2

Bagimana? Mirip peta kontur bukan? Mari kita bandingkan

Hasil konturnya cukup merepresentasikan bentuk dan nilai. Walaupun belum mengeluarkan nilai sebenarnya ataupun nilai prediksi.

Semoga bermanfaat!

--

--

Yogi P
Yogi P

Written by Yogi P

Random writer — Geology, Data, Tech, and Music

Responses (1)