Cara Simpel Contouring Elevasi di Python Tanpa Menggunakan Interpolasi (Mesh/Gridded/Kriging)
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()
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')
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')
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')
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!