Penggunaan Norma pada Peta dan Normalisasi Fungsi Arbiter

Penggunaan Norma pada Peta dan Normalisasi Fungsi Arbiter

Sekalipun telah memahami konsep dasar dari peta, namun masih ada beberapa hal yang perlu diperhatikan ketika menggambar peta. Salah satu contoh adalah jika kita ingin memiliki warna yang berbeda di sisi kiri dan kanan titik tengah, serta memiliki skala linear yang berbeda. Contohnya, pada sebuah peta topografi, daratan dan laut memiliki titik tengah pada nilai nol, namun daratan biasanya memiliki rentang ketinggian lebih besar dibandingkan dengan lautan memiliki rentang kedalaman, dan mereka sering diwakili oleh warna yang berbeda.

Pada bagian ini, kita akan membahas beberapa contoh penggunaan norma pada peta, termasuk TwoSlopeNorm dan FuncNorm. Kedua contoh tersebut memungkinkan kita untuk memiliki skala linear yang berbeda di sisi kiri dan kanan titik tengah.

TwoSlopeNorm: Pemetaan dengan warna yang berbeda di sisi kiri dan kanan

Kode berikut menunjukkan cara membuat TwoSlopeNorm untuk memetakan daratan dan lautan dengan warna yang berbeda:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

# Load data
dem = cbook.get_sample_data('topobathy.npz')
topo = dem['topo']
longitude = dem['longitude']
latitude = dem['latitude']

fig, ax = plt.subplots()

# Make colormap with land and ocean clearly delineated and of the same length (256 + 256)
colors_undersea = plt.cm.terrain(np.linspace(0, 0.17, 256))
colors_land = plt.cm.terrain(np.linspace(0.25, 1, 256))
all_colors = np.vstack((colors_undersea, colors_land))
terrain_map = colors.LinearSegmentedColormap.from_list('terrain_map', all_colors)

# Make the norm: Note the center is offset so that the land has more dynamic range:
divnorm = colors.TwoSlopeNorm(vmin=-500., vcenter=0, vmax=4000)

pcm = ax.pcolormesh(longitude, latitude, topo, rasterized=True, norm=divnorm, cmap=terrain_map, shading='auto')

# Simple geographic plot, set aspect ratio because distance between lines of longitude depends on latitude.
ax.set_aspect(1 / np.cos(np.deg2rad(49)))
ax.set_title('TwoSlopeNorm(x)')
cb = fig.colorbar(pcm, shrink=0.6)
cb.set_ticks([-500, 0, 1000, 2000, 3000, 4000])
plt.show()

Dalam contoh di atas, kita menggunakan TwoSlopeNorm untuk memetakan daratan dan lautan dengan warna yang berbeda. Pada titik tengah, kita dapat mengatur rentang nilai yang berbeda antara daratan dan lautan.

FuncNorm: Normalisasi fungsi arbiter

Jika TwoSlopeNorm tidak memenuhi kebutan Anda, maka Anda dapat menggunakan FuncNorm untuk definisi normalisasi fungsi arbiter. Contohnya, berikut adalah contoh penggunaan FuncNorm untuk mendefinisikan fungsi normalisasi yang memiliki power 0.5:

import matplotlib.pyplot as plt

def _forward(x):
 return np.sqrt(x)

def _inverse(x):
 return x**2

N = 100
X, Y = np.mgrid[0:3:complex(0, N), 0:2:complex(0, N)]
Z1 = (1 + np.sin(Y * 10.)) * X**2
fig, ax = plt.subplots()

norm = colors.FuncNorm((_forward, _inverse), vmin=0, vmax=20)
pcm = ax.pcolormesh(X, Y, Z1, norm=norm, cmap='PuBu_r', shading='auto')
ax.set_title('FuncNorm(x)')
fig.colorbar(pcm, shrink=0.6)
plt.show()

Dalam contoh di atas, kita menggunakan FuncNorm untuk definisi fungsi normalisasi yang memiliki power 0.5.

Normalisasi kustom: Implementasi dua rentang linear

TwoSlopeNorm dapat menjadi contoh yang berguna untuk mendefinisikan normalisasi kustom. Namun, perlu diingat bahwa Anda harus mengdefinisikan fungsi invers untuk norma tersebut agar colorbar berfungsi dengan baik.

import matplotlib.pyplot as plt

class CustomNorm:
 def __init__(self):
 self.vmin = 0
 self.vmax = 20

 def __call__(self, value):
 if value < 10:
 return (value - self.vmin) / (10 - self.vmin)
 else:
 return (value - 10) / (self.vmax - 10)

 def inverse(self, value):
 if value < (10 - self.vmin) / (10 - self.vmin):
 return self.vmin + value * (10 - self.vmin)
 else:
 return 10 + (value - ((10 - self.vmin) / (10 - self.vmin))) * (self.vmax - 10)

norm = CustomNorm()
pcm = ax.pcolormesh(X, Y, Z1, norm=norm, cmap='PuBu_r', shading='auto')
ax.set_title('Custom Norm(x)')
fig.colorbar(pcm, shrink=0.6)
plt.show()

Dalam contoh di atas, kita mendefinisikan normalisasi kustom yang memiliki dua rentang linear. Kita juga mengdefinisikan fungsi invers untuk norma tersebut agar colorbar berfungsi dengan baik.

Kesimpulan

Penggunaan norma pada peta memungkinkan kita untuk memiliki skala linear yang berbeda di sisi kiri dan kanan titik tengah. Dalam artikel ini, kita membahas beberapa contoh penggunaan norma pada peta, termasuk TwoSlopeNorm dan FuncNorm. Kedua contoh tersebut memungkinkan kita untuk memiliki skala linear yang berbeda di sisi kiri dan kanan titik tengah.