Thursday, January 6, 2022

18-Python Basemap : Plot Peta Negeri-Negeri di Malaysia dan Menetapkan Warna

 Assalam wbt. Jumpa lagi.

Post yang sebelum ini kita telah melihat bagaimana untuk plot peta Malaysia yang plain dan agak sedikit kasar, namun post kali ini kita akan mempelajari bagaimana untuk membuat plot peta Malaysia menggunakan shapefile (peta digital luar) yang diambil daripada website https://gadm.org/download_country.html. Anda perlu muat turun file shapefile daripada website tersebut dengan memilih option "shapefile" selepas memilih pilihan negara. Kelebihan website ini anda mampu untuk muat turun shapefile daripada mana-mana negara di dunia.

Anda akan diperkenalkan dengan aplikasi tambahan basemap iaitu readshapefile serta menambahkan warna mengikut keselesaan masing-masing. Sebenarnya anda mempunyai pilihan untuk auto-setting warna negeri-negeri mengikut color scheme yang disediakan namun saya sarankan biarlah ianya dilakukan secara manual agar kita bebas memilih warna mengikut citarasa sendiri. 

Seperti biasa copy skrip berikut dan save kepada nama yang korang tentukan sendiri serta simpan di folder kerja semasa.

## start copy from here ##
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
import geopandas as gpd
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
import numpy as np
import matplotlib as mpl
#mpl.rcParams['font.size'] = 12.
mpl.rcParams['font.family'] = 'Arial' ## Arial, Comic Sans MS

##LOKASI SIMPAN FILE SHAPEFILE ANDA
path='D:/PROJEK-SHAPEFILE/Data-GADM/'

## CREATE AREA MAP
minlon = 99.0
maxlon = 120.0
minlat = 0.0
maxlat = 9.0

map = Basemap(llcrnrlon=minlon,llcrnrlat=minlat,
urcrnrlon=maxlon,urcrnrlat=maxlatprojection='merc',
resolution = 'i')

map.drawparallels(np.arange(-90,91,2),fontsize=10,
   labels=[1,0,0,0],color='0.25',linewidth=0.04)

map.drawmeridians(np.arange(-180,180,2),fontsize=10,
labels=[0,0,0,1],color='0.25',linewidth=0.04)

map.drawcoastlines(linewidth=0.3)
map.drawcountries(linewidth=0.3)
    
# load the shapefile, use the name 'NAME_1'
map.readshapefile(path+'gadm36_MYS_shp/gadm36_MYS_1', 
name='NAME_1', drawbounds=True)

##### PLOT AND COLOR STATES
ax = plt.subplot()
patches   = []
for info, shape in zip(map.NAME_1_info, map.NAME_1):
    if info['NAME_1'] == 'Sarawak':
        patches.append( Polygon(np.array(shape), True) )
ax.add_collection(PatchCollection(patches, facecolor='y', edgecolor='k', linewidths=0.5, zorder=2))

##### PLOT TEXT FOR STATES
lons = [110.0,]
lats = [4.0,]
x,y = map(lons, lats)
 
labels = ['Sarawak',]
for label, xpt, ypt in zip(labels, x, y):
    plt.text(xpt, ypt, label,fontsize=12)

## PLOT TITLE IMEJ
fname="Peta Malaysia"
plt.title(fname, fontsize=18)

#### METHOD SAVING IMAGE USING CURRENT FILE NAME
import inspect
frame = inspect.currentframe()
path = inspect.getfile(frame)
fname = path.split('.')[0]
plt.savefig(fname + ".png",dpi=280, bbox_inches='tight')
plt.show()

### end copy script here ###########

Paparan Imej
Catatan:
a) Anda boleh menukar warna negeri ikut kesesuaian masing-masing pada facecolor="yellow"

Selamat mencuba!




No comments:

Post a Comment

23-Python : Plotting Temperature Histogram

  Assalamualaikum wbt dan jumpa lagi. Post kali ini kita akan cuba untuk membuat analisa taburan suhu purata setiap data yang telah dibelakk...