Assalamualaikum wbt dan jumpa lagi.
Post kali ini kita akan cuba untuk membuat plot suhu ke atas peta Malaysia dan rantau sekitar menggunakan data suhu yang telah dikongsi di dalam post ke 21 yang lalu. Menggunakan data suhu yang sama pada data resolusi 2.5 degree yang membawa maksud setiap nilai suhu merupakan perwakilan bagi data setiap pixel atau keluasan sesebuah kawasan. Untuk data suhu yang dibekalkan, nilai setiap pixel persegi adalah bersamaan dengan (2.5 degree x 2.5 degree) atau (277.5 km x 277.5 km) pada anggaran 1 degree adalah bersamaan 111 km. Bagi mendapatkan bacaan suhu yang lebih baik, kita perlu mendapatkan sumber data pada resolusi yang lebih tinggi (degree yang lebih rendah) samada 0.1 atau 0.05 degree jika ada.
Untuk perkongsian kali ini saya akan menggunakan data suhu pada resolusi 2.5 degree sebagai permulaan serta mengurangkan bebanan storage komputer anda. Saya juga akan berkongsi bagaimana untuk mendapatkan sumber data ini pada post-post akan datang.
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import os
import glob
from scipy.interpolate import griddata
plt.rcParams.update({'font.size':12,'font.family': 'serif'})
### searching current working folder
folder = os.getcwd()
path1=folder+'/Data/'
os.makedirs(os.path.dirname(path1), exist_ok=True)
os.makedirs(os.path.dirname(path2), exist_ok=True)
### setting plotting frame size
plt.figure(figsize = (9, 8))
ax = plt.subplot()
### using python LOOP to process all data
for x in files:
print(x)
output_name=x[-15:-9]
print(output_name)
data2=np.loadtxt(x)
lats=data2[:,0]
lons=data2[:,1]
temp=data2[:,2]
min_temp=min(temp)
max_temp=max(temp)
### Processing data gridding for an array data using meshgrid
lon,lat=np.meshgrid(lons,lats)
zz=griddata((lons,lats),temp,(lon,lat),method='nearest')
lat_min = -10.0
lat_max = 10.0
lon_min = 95.0
lon_max = 125.0
m = Basemap(projection = 'mill',llcrnrlat = lat_min,
m.drawparallels(np.arange(-90, 91,5),labels =[1,0,0,0],
m.drawmeridians(np.arange(-180,180,5),labels =[0,0,0,1],
m.bluemarble(scale=0.5)
m.drawcountries()
m.drawstates()
m.drawcoastlines()
im=m.pcolormesh(lon,lat,zz,latlon = True, cmap= 'jet',
### setting color bar below the map
cbar = m.colorbar(im,location='bottom',pad="10%")
cbar.set_label('Degree Celcius',fontsize=10)
### applying map title
plt.title('Monthly Average Temperature (Degree Celcuis) in '+output_name)
plt.savefig(path2+output_name+ ".png",dpi=280,
No comments:
Post a Comment