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.