Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -405,8 +405,14 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 405 |
typhoon_search = gr.Textbox(label="Typhoon Search")
|
| 406 |
analyze_btn = gr.Button("Generate Tracks")
|
| 407 |
tracks_plot = gr.Plot(label="Typhoon Tracks")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
analyze_btn.click(
|
| 409 |
-
fn=
|
| 410 |
inputs=[start_year, start_month, end_year, end_month, enso_phase, typhoon_search],
|
| 411 |
outputs=tracks_plot
|
| 412 |
)
|
|
@@ -422,8 +428,15 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 422 |
wind_analyze_btn = gr.Button("Generate Wind Analysis")
|
| 423 |
wind_scatter = gr.Plot(label="Wind Speed vs ONI")
|
| 424 |
wind_regression_results = gr.Textbox(label="Wind Regression Results")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
wind_analyze_btn.click(
|
| 426 |
-
fn=
|
| 427 |
inputs=[wind_start_year, wind_start_month, wind_end_year, wind_end_month, wind_enso_phase, wind_typhoon_search],
|
| 428 |
outputs=[wind_scatter, wind_regression_results]
|
| 429 |
)
|
|
@@ -439,8 +452,15 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 439 |
pressure_analyze_btn = gr.Button("Generate Pressure Analysis")
|
| 440 |
pressure_scatter = gr.Plot(label="Pressure vs ONI")
|
| 441 |
pressure_regression_results = gr.Textbox(label="Pressure Regression Results")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 442 |
pressure_analyze_btn.click(
|
| 443 |
-
fn=
|
| 444 |
inputs=[pressure_start_year, pressure_start_month, pressure_end_year, pressure_end_month, pressure_enso_phase, pressure_typhoon_search],
|
| 445 |
outputs=[pressure_scatter, pressure_regression_results]
|
| 446 |
)
|
|
@@ -452,14 +472,21 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 452 |
lon_end_year = gr.Number(label="End Year", value=2024, minimum=1900, maximum=2024, step=1)
|
| 453 |
lon_end_month = gr.Dropdown(label="End Month", choices=list(range(1, 13)), value=6)
|
| 454 |
lon_enso_phase = gr.Dropdown(label="ENSO Phase", choices=['all', 'El Nino', 'La Nina', 'Neutral'], value='all')
|
|
|
|
| 455 |
lon_analyze_btn = gr.Button("Generate Longitude Analysis")
|
| 456 |
regression_plot = gr.Plot(label="Longitude vs ONI")
|
| 457 |
slopes_text = gr.Textbox(label="Regression Slopes")
|
| 458 |
lon_regression_results = gr.Textbox(label="Longitude Regression Results")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 459 |
lon_analyze_btn.click(
|
| 460 |
-
fn=
|
| 461 |
-
|
| 462 |
-
inputs=[lon_start_year, lon_start_month, lon_end_year, lon_end_month, lon_enso_phase, ""],
|
| 463 |
outputs=[regression_plot, slopes_text, lon_regression_results]
|
| 464 |
)
|
| 465 |
|
|
@@ -470,8 +497,11 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 470 |
standard_dropdown = gr.Dropdown(label="Classification Standard",
|
| 471 |
choices=['atlantic', 'taiwan'], value='atlantic')
|
| 472 |
|
| 473 |
-
# Fix the animation with
|
| 474 |
def generate_fixed_path_animation(year, typhoon, standard):
|
|
|
|
|
|
|
|
|
|
| 475 |
typhoon_id = typhoon.split('(')[-1].strip(')')
|
| 476 |
storm = ibtracs.get_storm(typhoon_id)
|
| 477 |
|
|
@@ -527,7 +557,7 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 527 |
updatemenus=[{
|
| 528 |
"buttons": [
|
| 529 |
{
|
| 530 |
-
"args": [None, {"frame": {"duration": 200, "redraw": True}, "fromcurrent": True}],
|
| 531 |
"label": "Play",
|
| 532 |
"method": "animate"
|
| 533 |
},
|
|
@@ -545,6 +575,15 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 545 |
}],
|
| 546 |
sliders=[{
|
| 547 |
"active": 0,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 548 |
"steps": [
|
| 549 |
{
|
| 550 |
"args": [[f.name], {
|
|
@@ -554,10 +593,7 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 554 |
"label": str(i),
|
| 555 |
"method": "animate"
|
| 556 |
} for i, f in enumerate(frames)
|
| 557 |
-
]
|
| 558 |
-
"x": 0.1,
|
| 559 |
-
"y": 0,
|
| 560 |
-
"len": 0.9
|
| 561 |
}]
|
| 562 |
)
|
| 563 |
|
|
@@ -571,6 +607,7 @@ with gr.Blocks(title="Typhoon Analysis Dashboard") as demo:
|
|
| 571 |
2. Click "Generate Animation"
|
| 572 |
3. Use the play button to start the animation
|
| 573 |
4. Use the slider to scrub through different positions
|
|
|
|
| 574 |
""")
|
| 575 |
|
| 576 |
# Year dropdown change function
|
|
|
|
| 405 |
typhoon_search = gr.Textbox(label="Typhoon Search")
|
| 406 |
analyze_btn = gr.Button("Generate Tracks")
|
| 407 |
tracks_plot = gr.Plot(label="Typhoon Tracks")
|
| 408 |
+
|
| 409 |
+
# Fixed function that extracts only the first return value
|
| 410 |
+
def get_tracks_plot(*args):
|
| 411 |
+
results = generate_main_analysis(*args)
|
| 412 |
+
return results[0]
|
| 413 |
+
|
| 414 |
analyze_btn.click(
|
| 415 |
+
fn=get_tracks_plot,
|
| 416 |
inputs=[start_year, start_month, end_year, end_month, enso_phase, typhoon_search],
|
| 417 |
outputs=tracks_plot
|
| 418 |
)
|
|
|
|
| 428 |
wind_analyze_btn = gr.Button("Generate Wind Analysis")
|
| 429 |
wind_scatter = gr.Plot(label="Wind Speed vs ONI")
|
| 430 |
wind_regression_results = gr.Textbox(label="Wind Regression Results")
|
| 431 |
+
|
| 432 |
+
# Fixed function for wind analysis
|
| 433 |
+
def get_wind_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search):
|
| 434 |
+
results = generate_main_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search)
|
| 435 |
+
regression = perform_wind_regression(start_year, start_month, end_year, end_month)
|
| 436 |
+
return results[1], regression
|
| 437 |
+
|
| 438 |
wind_analyze_btn.click(
|
| 439 |
+
fn=get_wind_analysis,
|
| 440 |
inputs=[wind_start_year, wind_start_month, wind_end_year, wind_end_month, wind_enso_phase, wind_typhoon_search],
|
| 441 |
outputs=[wind_scatter, wind_regression_results]
|
| 442 |
)
|
|
|
|
| 452 |
pressure_analyze_btn = gr.Button("Generate Pressure Analysis")
|
| 453 |
pressure_scatter = gr.Plot(label="Pressure vs ONI")
|
| 454 |
pressure_regression_results = gr.Textbox(label="Pressure Regression Results")
|
| 455 |
+
|
| 456 |
+
# Fixed function for pressure analysis
|
| 457 |
+
def get_pressure_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search):
|
| 458 |
+
results = generate_main_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search)
|
| 459 |
+
regression = perform_pressure_regression(start_year, start_month, end_year, end_month)
|
| 460 |
+
return results[2], regression
|
| 461 |
+
|
| 462 |
pressure_analyze_btn.click(
|
| 463 |
+
fn=get_pressure_analysis,
|
| 464 |
inputs=[pressure_start_year, pressure_start_month, pressure_end_year, pressure_end_month, pressure_enso_phase, pressure_typhoon_search],
|
| 465 |
outputs=[pressure_scatter, pressure_regression_results]
|
| 466 |
)
|
|
|
|
| 472 |
lon_end_year = gr.Number(label="End Year", value=2024, minimum=1900, maximum=2024, step=1)
|
| 473 |
lon_end_month = gr.Dropdown(label="End Month", choices=list(range(1, 13)), value=6)
|
| 474 |
lon_enso_phase = gr.Dropdown(label="ENSO Phase", choices=['all', 'El Nino', 'La Nina', 'Neutral'], value='all')
|
| 475 |
+
lon_typhoon_search = gr.Textbox(label="Typhoon Search (Optional)")
|
| 476 |
lon_analyze_btn = gr.Button("Generate Longitude Analysis")
|
| 477 |
regression_plot = gr.Plot(label="Longitude vs ONI")
|
| 478 |
slopes_text = gr.Textbox(label="Regression Slopes")
|
| 479 |
lon_regression_results = gr.Textbox(label="Longitude Regression Results")
|
| 480 |
+
|
| 481 |
+
# Fixed function for longitude analysis
|
| 482 |
+
def get_longitude_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search):
|
| 483 |
+
results = generate_main_analysis(start_year, start_month, end_year, end_month, enso_phase, typhoon_search)
|
| 484 |
+
regression = perform_longitude_regression(start_year, start_month, end_year, end_month)
|
| 485 |
+
return results[3], results[4], regression
|
| 486 |
+
|
| 487 |
lon_analyze_btn.click(
|
| 488 |
+
fn=get_longitude_analysis,
|
| 489 |
+
inputs=[lon_start_year, lon_start_month, lon_end_year, lon_end_month, lon_enso_phase, lon_typhoon_search],
|
|
|
|
| 490 |
outputs=[regression_plot, slopes_text, lon_regression_results]
|
| 491 |
)
|
| 492 |
|
|
|
|
| 497 |
standard_dropdown = gr.Dropdown(label="Classification Standard",
|
| 498 |
choices=['atlantic', 'taiwan'], value='atlantic')
|
| 499 |
|
| 500 |
+
# Fix the animation with improved function
|
| 501 |
def generate_fixed_path_animation(year, typhoon, standard):
|
| 502 |
+
if not typhoon:
|
| 503 |
+
return None
|
| 504 |
+
|
| 505 |
typhoon_id = typhoon.split('(')[-1].strip(')')
|
| 506 |
storm = ibtracs.get_storm(typhoon_id)
|
| 507 |
|
|
|
|
| 557 |
updatemenus=[{
|
| 558 |
"buttons": [
|
| 559 |
{
|
| 560 |
+
"args": [None, {"frame": {"duration": 200, "redraw": True}, "fromcurrent": True, "mode": "immediate"}],
|
| 561 |
"label": "Play",
|
| 562 |
"method": "animate"
|
| 563 |
},
|
|
|
|
| 575 |
}],
|
| 576 |
sliders=[{
|
| 577 |
"active": 0,
|
| 578 |
+
"yanchor": "top",
|
| 579 |
+
"xanchor": "left",
|
| 580 |
+
"currentvalue": {
|
| 581 |
+
"prefix": "Frame: "
|
| 582 |
+
},
|
| 583 |
+
"pad": {"b": 10, "t": 50},
|
| 584 |
+
"len": 0.9,
|
| 585 |
+
"x": 0.1,
|
| 586 |
+
"y": 0,
|
| 587 |
"steps": [
|
| 588 |
{
|
| 589 |
"args": [[f.name], {
|
|
|
|
| 593 |
"label": str(i),
|
| 594 |
"method": "animate"
|
| 595 |
} for i, f in enumerate(frames)
|
| 596 |
+
]
|
|
|
|
|
|
|
|
|
|
| 597 |
}]
|
| 598 |
)
|
| 599 |
|
|
|
|
| 607 |
2. Click "Generate Animation"
|
| 608 |
3. Use the play button to start the animation
|
| 609 |
4. Use the slider to scrub through different positions
|
| 610 |
+
5. If animation doesn't play automatically, try using the slider to view frames
|
| 611 |
""")
|
| 612 |
|
| 613 |
# Year dropdown change function
|