@@ -36,20 +36,33 @@ def stepcal(lonmax, lonmin, res, num=15, ip=1):
36
36
totalpt = (lonmax - lonmin ) / res * ip
37
37
return int (totalpt / num )
38
38
39
- def grid (route , fname , georange , sfname , band , lonlatstep = 5 , res = 0.125 , num = 15 , ip = 1 , full_res = - 1 , ** kwargs ):
39
+ def grid (route , fname , georange , sfname , band , lonlatstep = 5 , num = 15 , ip = 1 , full_res = - 1 , ** kwargs ):
40
40
config = kwargs ["config" ]
41
41
42
- lats , lons , data_spd , data_dir , data_time , sate_name , res = rgrib .get_data (route + fname , band )
42
+ lats , lons , data_spd , data_dir , data_time , sate_name , res = rgrib .get_data (route + fname , band , georange )
43
43
44
44
# transfroming resolution into degree if it's string type
45
45
_res_temp = res
46
46
if isinstance (_res_temp , str ):
47
47
if "°" in _res_temp :
48
48
_res_temp = float (_res_temp [:- 1 ])
49
+ res = f"{ _res_temp * 100 } "
50
+ if res .endswith (".0" ):
51
+ res = res [:- 2 ] + "KM"
52
+ else :
53
+ res += "KM"
49
54
elif "KM" in _res_temp .upper ():
50
55
_res_temp = float (_res_temp [:- 2 ]) / 100
51
56
else :
52
57
_res_temp = float (_res_temp )
58
+ if "." in res :
59
+ res = f"{ _res_temp * 100 } "
60
+ if res .endswith (".0" ):
61
+ res = res [:- 2 ] + "KM"
62
+ else :
63
+ res += "KM"
64
+ else :
65
+ res += "KM"
53
66
54
67
if isinstance (georange , tuple ):
55
68
# get range parameter
@@ -93,55 +106,29 @@ def grid(route, fname, georange, sfname, band, lonlatstep=5, res=0.125, num=15,
93
106
ax .patch .set_facecolor ("#000000" )
94
107
95
108
# process data's valid time (latest)
96
- if sate_name == "CFOSAT" :
97
- data_time = datetime .datetime .strptime (data_time , "%Y-%m-%dT%H:%M:%SZ" ).strftime ('%Y/%m/%d %H%MZ' )
109
+ if "CFOSAT" in sate_name :
110
+ try :
111
+ data_time = datetime .datetime .strptime (data_time , "%Y-%m-%dT%H:%M:%SZ" ).strftime ('%Y/%m/%d %H%MZ' )
112
+ except Exception :
113
+ data_time = datetime .datetime .strptime (data_time , "%Y-%m-%d %H:%M:%SZ" ).strftime ('%Y/%m/%d %H%MZ' )
114
+ elif "HY-2" in sate_name :
115
+ try :
116
+ data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
117
+ except Exception :
118
+ data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S.%f" ).strftime ('%Y/%m/%d %H%MZ' )
119
+ elif "FY-3E" in sate_name :
120
+ try :
121
+ data_time = datetime .datetime .strptime (data_time , "%Y%m%d%H%M" ).strftime ('%Y/%m/%d %H%MZ' )
122
+ except Exception :
123
+ data_time = datetime .datetime .strptime (data_time , "%Y%m%d %H:%M:%S.%f" ).strftime ('%Y/%m/%d %H%MZ' )
98
124
else :
99
- if "HY" in sate_name :
100
- try :
101
- data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
102
- except Exception :
103
- data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S.%f" ).strftime ('%Y/%m/%d %H%MZ' )
104
- elif "FY-3E" in sate_name :
105
- try :
106
- data_time = datetime .datetime .strptime (data_time , "%Y%m%d%H%M" ).strftime ('%Y/%m/%d %H%MZ' )
107
- except Exception :
108
- data_time = datetime .datetime .strptime (data_time , "%Y%m%d %H:%M:%S.%f" ).strftime ('%Y/%m/%d %H%MZ' )
109
- else :
110
- try :
111
- data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
112
- except Exception :
113
- try :
114
- data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S.%f" ).strftime ('%Y/%m/%d %H%MZ' )
115
- except Exception :
116
- try :
117
- data_time = datetime .datetime .strptime (data_time , "%Y-%m-%dT%H:%M:%SZ" ).strftime ('%Y/%m/%d %H%MZ' )
118
- except Exception :
119
- try :
120
- data_time = datetime .datetime .strptime (data_time , "%Y-%m-%dT%H:%M:%S.%fZ" ).strftime ('%Y/%m/%d %H%MZ' )
121
- except Exception :
122
- try :
123
- data_time = datetime .datetime .strptime (data_time , "%Y-%m-%dT%H:%M:%SZ" ).strftime ('%Y/%m/%d %H%MZ' )
124
- except Exception :
125
- data_time = datetime .datetime .strptime (data_time , "%Y-%m-%d %H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
125
+ try :
126
+ data_time = datetime .datetime .strptime (data_time , "%Y%m%dT%H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
127
+ except Exception :
128
+ data_time = datetime .datetime .strptime (data_time , "%Y-%m-%d %H:%M:%S" ).strftime ('%Y/%m/%d %H%MZ' )
126
129
127
130
print ("...PLOTING..." )
128
131
129
- '''
130
- # get area's max wind
131
- # You can delete these codes if you do not want to show the max wind
132
- '''
133
- dspd = data_spd [(lons <= lonmax )& (lons >= lonmin )& (lats <= latmax )& (lats >= latmin )]
134
- if len (dspd ) > 0 and not isinstance (dspd .max (), np .ma .core .MaskedConstant ):
135
- damax = round (dspd .max (), 1 )
136
- else :
137
- damax = "0.0"
138
-
139
- # add title at the top of figure
140
- text = f'{ sate_name } { res } Wind (barbs) [kt] (Generated by @Shuitai)\n Valid Time: { data_time } '
141
- ax .set_title (text , loc = 'left' , fontsize = 5 )
142
- text = f'Max. Wind: { damax } kt'
143
- ax .set_title (text , loc = 'right' , fontsize = 4 )
144
-
145
132
# plot brabs with colormap and color-bar
146
133
cmap , vmin , vmax = cm .get_colormap ("wind" )
147
134
@@ -190,6 +177,22 @@ def grid(route, fname, georange, sfname, band, lonlatstep=5, res=0.125, num=15,
190
177
cb .ax .tick_params (labelsize = 4 , length = 0 )
191
178
cb .outline .set_linewidth (0.3 )
192
179
180
+ '''
181
+ # get area's max wind
182
+ # You can delete these codes if you do not want to show the max wind
183
+ '''
184
+ dspd = data_spd [(lons <= lonmax )& (lons >= lonmin )& (lats <= latmax )& (lats >= latmin )]
185
+ if len (dspd ) > 0 and not isinstance (dspd .max (), np .ma .core .MaskedConstant ):
186
+ damax = round (dspd .max (), 1 )
187
+ else :
188
+ damax = "0.0"
189
+
190
+ # add title at the top of figure
191
+ text = f'{ sate_name } { res } Wind (barbs) [kt] (Generated by @Shuitai)\n Valid Time: { data_time } '
192
+ ax .set_title (text , loc = 'left' , fontsize = 5 )
193
+ text = f'Max. Wind: { damax } kt'
194
+ ax .set_title (text , loc = 'right' , fontsize = 4 )
195
+
193
196
# add coastlines
194
197
ax .add_feature (
195
198
cfeature .COASTLINE .with_scale ("10m" ),
@@ -219,8 +222,8 @@ def grid(route, fname, georange, sfname, band, lonlatstep=5, res=0.125, num=15,
219
222
gl .bottom_labels = True
220
223
gl .right_labels = False
221
224
gl .left_labels = True
222
- gl .xpadding = 2.5
223
- gl .ypadding = 2.5
225
+ gl .xpadding = 3
226
+ gl .ypadding = 3
224
227
gl .xlabel_style = {'size' : 4 , 'color' : 'k' , 'ha' : 'center' }
225
228
gl .ylabel_style = {'size' : 4 , 'color' : 'k' , 'va' : 'center' }
226
229
plt .rcParams ['axes.unicode_minus' ] = False
@@ -274,4 +277,4 @@ def grid(route, fname, georange, sfname, band, lonlatstep=5, res=0.125, num=15,
274
277
save_name = "" # fill in any name what you like
275
278
276
279
# finish loading config, start gird
277
- grid (route , file , georange , save_name , band , res = 0.125 , num = 20 , ip = 1 , lonlatstep = step , full_res = f_res , config = config )
280
+ grid (route , file , georange , save_name , band , num = 15 , ip = 1 , lonlatstep = step , full_res = f_res , config = config )
0 commit comments