Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -302,7 +302,7 @@ def generate_main_analysis(start_year, start_month, end_year, end_month, enso_ph
|
|
302 |
|
303 |
return tracks_fig, wind_scatter, pressure_scatter, regression_fig, slopes_text
|
304 |
|
305 |
-
# Video animation function with
|
306 |
def categorize_typhoon_by_standard(wind_speed, standard):
|
307 |
if standard == 'taiwan':
|
308 |
wind_speed_ms = wind_speed * 0.514444
|
@@ -342,7 +342,7 @@ def generate_track_video(year, typhoon, standard):
|
|
342 |
lon_padding = max((max_lon - min_lon) * 0.3, 5)
|
343 |
|
344 |
# Set up the figure with Gradio-friendly scale (1000x700 pixels at 100 DPI)
|
345 |
-
fig = plt.figure(figsize=(
|
346 |
ax = plt.axes([0.05, 0.05, 0.65, 0.9], projection=ccrs.PlateCarree()) # Map on left 65% of figure
|
347 |
ax.set_extent([min_lon - lon_padding, max_lon + lon_padding, min_lat - lat_padding, max_lat + lat_padding], crs=ccrs.PlateCarree())
|
348 |
|
@@ -355,11 +355,12 @@ def generate_track_video(year, typhoon, standard):
|
|
355 |
|
356 |
ax.set_title(f"{year} {storm.name} Typhoon Path")
|
357 |
|
358 |
-
# Legend for categories
|
359 |
standard_dict = atlantic_standard if standard == 'atlantic' else taiwan_standard
|
360 |
-
|
361 |
-
|
362 |
-
|
|
|
363 |
|
364 |
# Initialize the line and point
|
365 |
line, = ax.plot([], [], 'b-', linewidth=2, transform=ccrs.PlateCarree())
|
@@ -449,7 +450,7 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
449 |
### Features:
|
450 |
- **Track Visualization**: View typhoon tracks by time period and ENSO phase
|
451 |
- **Statistical Analysis**: Examine relationships between ONI values and typhoon characteristics
|
452 |
-
- **Path Animation**: Watch an animated typhoon path with video controls, world map, and details sidebar
|
453 |
- **Regression Analysis**: Perform statistical regression on typhoon data
|
454 |
|
455 |
Select a tab above to begin your analysis.
|
@@ -617,7 +618,10 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
617 |
2. Choose a classification standard (Atlantic or Taiwan)
|
618 |
3. Click "Generate Animation"
|
619 |
4. Use the video player's built-in controls to play, pause, or scrub through the animation
|
620 |
-
5. The animation shows the typhoon track growing over a world map, with
|
|
|
|
|
|
|
621 |
""")
|
622 |
|
623 |
def update_typhoon_options(year):
|
|
|
302 |
|
303 |
return tracks_fig, wind_scatter, pressure_scatter, regression_fig, slopes_text
|
304 |
|
305 |
+
# Video animation function with color legend and typhoon details
|
306 |
def categorize_typhoon_by_standard(wind_speed, standard):
|
307 |
if standard == 'taiwan':
|
308 |
wind_speed_ms = wind_speed * 0.514444
|
|
|
342 |
lon_padding = max((max_lon - min_lon) * 0.3, 5)
|
343 |
|
344 |
# Set up the figure with Gradio-friendly scale (1000x700 pixels at 100 DPI)
|
345 |
+
fig = plt.figure(figsize=(10, 7), dpi=100) # 10x7 inches = 1000x700 pixels
|
346 |
ax = plt.axes([0.05, 0.05, 0.65, 0.9], projection=ccrs.PlateCarree()) # Map on left 65% of figure
|
347 |
ax.set_extent([min_lon - lon_padding, max_lon + lon_padding, min_lat - lat_padding, max_lat + lat_padding], crs=ccrs.PlateCarree())
|
348 |
|
|
|
355 |
|
356 |
ax.set_title(f"{year} {storm.name} Typhoon Path")
|
357 |
|
358 |
+
# Legend for categories with explicit color meanings
|
359 |
standard_dict = atlantic_standard if standard == 'atlantic' else taiwan_standard
|
360 |
+
legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label=f"{cat} ({details['color']})",
|
361 |
+
markerfacecolor=details['color'], markersize=10)
|
362 |
+
for cat, details in standard_dict.items()]
|
363 |
+
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(1.7, 0.5), title="Intensity Categories")
|
364 |
|
365 |
# Initialize the line and point
|
366 |
line, = ax.plot([], [], 'b-', linewidth=2, transform=ccrs.PlateCarree())
|
|
|
450 |
### Features:
|
451 |
- **Track Visualization**: View typhoon tracks by time period and ENSO phase
|
452 |
- **Statistical Analysis**: Examine relationships between ONI values and typhoon characteristics
|
453 |
+
- **Path Animation**: Watch an animated typhoon path with video controls, world map, color legend, and details sidebar
|
454 |
- **Regression Analysis**: Perform statistical regression on typhoon data
|
455 |
|
456 |
Select a tab above to begin your analysis.
|
|
|
618 |
2. Choose a classification standard (Atlantic or Taiwan)
|
619 |
3. Click "Generate Animation"
|
620 |
4. Use the video player's built-in controls to play, pause, or scrub through the animation
|
621 |
+
5. The animation shows the typhoon track growing over a world map, with:
|
622 |
+
- Date on the bottom left
|
623 |
+
- Details (name, date, wind speed, category) on the right
|
624 |
+
- Color legend showing intensity categories on the right
|
625 |
""")
|
626 |
|
627 |
def update_typhoon_options(year):
|