Monday, September 20, 2021

17-Python Basemap : Plot Points and Names The Location on Map

 Assalam wbt. Jumpa lagi.

Post sebelum kita telah mempelajari bagaimana untuk menyediakan peta melalui library Basemap yang disediakan oleh Python samada imej resolusi rendah dan tinggi. Post kali ini saya akan berkongsi bagaimana untuk membuat plot beberapa lokasi Lapangan Terbang di Semenanjung Malaysia serta menambah teks di atas peta atau map tersebut.

Sebagai permulaan kita akan membuat plot untuk 4 lokasi lapangan terbang di Semenanjung Malaysia sahaja namun korang boleh menggunakan konsep yang sama jika mempunyai lokasi (latitude dan longitude) yang banyak dengan hanya menyenaraikan ke dalam fail location.dat. Sila copy lokasi lapangan terbang di Penang, KLIA, Kota Bharu dan Kuantan yang terdiri daripada Latitude dan Longitude seperti berikut dan simpan sebagai "location.dat".

Location   Lat  Lon
Penang    5.30 100.30
KBharu    6.20 102.30
KLIA    2.70 101.70
Kuantan    3.80 103.20

Data location.dat yang dibekalkan agak sedikit berlainan daripada contoh yang dikongsi sebelum ini kerana mangandungi data location di column pertama yang bukan float atau integer malah bukan dikategorikan sebagai string. Bagi kes begini kita akan mengandaikan data location.dat adalah berjenis "objek" yang harus dinyatakan sebagai dtype="object" di dalam np.loadtxt()tetapi nilai Lats dan Lons harus ditukar kembali menjadi float menggunakan command baharu yang akan diperkenalkan.

## copy script from here ##
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams.update({'font.size':12,'font.family':'arial'})
fig = plt.figure(figsize=(5,5)) 
ax=fig.gca()
ax.grid(alpha=0.05)

## open dataset
data=np.loadtxt('location.dat',skiprows=1,dtype='object')

## declaring dataset by column
locations=data[:,0]

lats = data[:,1]
## convert object to float
lats1=np.array(lats, dtype=np.float)

lons = data[:,2]
## convert object to float
lons1=np.array(lons, dtype=np.float)

## plotting basemap semenanjung pada intermediate (i) resolution
map = Basemap(projection='merc', resolution = 'i',
              llcrnrlon=99.0, llcrnrlat=0.0,
              urcrnrlon=106.0, urcrnrlat=9.0)

map.drawcoastlines(linewidth=0.5)
map.drawcountries(linewidth=0.5)
map.fillcontinents(color = 'white')
map.drawmapboundary()

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

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

## plotting coordinate to x,y plane
x,y = map(lons1, lats1)

## plotting each points at marker * (star)
map.plot(x, y, '*b', markersize=8, label='Local Airport In Peninsula') 

## plot legend
plt.legend(loc='upper center',fontsize=10,ncol=1,
           fancybox=True, shadow=True) 
      
### plot naming of the airports
labels = ['Penang','Kota Bharu','Kuala Lumpur','Kuantan']
for label, xpt, ypt in zip(labels, x, y):
    plt.text(xpt, ypt,label,color='r')
    
### AUTO FILE NAMING# 
import inspect
frame = inspect.currentframe()
path = inspect.getfile(frame)
fname = path.split('.')[0]
plt.savefig(fname + ".png",dpi=280, bbox_inches='tight')

### end copy script here ##

Paparan Imej:
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...