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.
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
minlon = 99.0
maxlon = 120.0
minlat = 0.0
maxlat = 9.0
map = Basemap(llcrnrlon=minlon,llcrnrlat=minlat,
urcrnrlon=maxlon,urcrnrlat=maxlat, projection='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',
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))
import inspect
frame = inspect.currentframe()
path = inspect.getfile(frame)
fname = path.split('.')[0]
plt.savefig(fname + ".png",dpi=280, bbox_inches='tight')
plt.show()
No comments:
Post a Comment