gauravlochab commited on
Commit
5ee9210
·
1 Parent(s): abbde7d

feat: enhance graph responsiveness and add annotations for clarity

Browse files
Files changed (1) hide show
  1. app.py +113 -21
app.py CHANGED
@@ -806,14 +806,15 @@ def create_combined_time_series_graph(df):
806
  logger.info("Cumulative APR graph line has been removed as requested")
807
 
808
  # Update layout - use simple boolean values everywhere
809
- # Increase the width and height for better visualization
810
  fig.update_layout(
811
  title="Babydegen agents",
812
- xaxis_title="Time",
813
- yaxis_title="Percent drawdown || Agent APR",
814
  template="plotly_white",
815
- height=700, # Increased height
816
- width=1400, # Increased width
 
817
  legend=dict(
818
  orientation="h",
819
  yanchor="bottom",
@@ -822,10 +823,47 @@ def create_combined_time_series_graph(df):
822
  x=1,
823
  groupclick="toggleitem"
824
  ),
825
- margin=dict(r=20, l=20, t=30, b=20),
826
  hovermode="closest"
827
  )
828
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
829
  # Update y-axis with fixed range of -50 to +100 for psychological effect
830
  fig.update_yaxes(
831
  showgrid=True,
@@ -835,7 +873,8 @@ def create_combined_time_series_graph(df):
835
  autorange=False, # Disable autoscaling
836
  range=[-50, 100], # Set fixed range from -50 to +100
837
  tickformat=".2f", # Format tick labels with 2 decimal places
838
- tickfont=dict(size=16, family="Arial, sans-serif", color="black", weight="bold") # Larger and bold font for tick labels
 
839
  )
840
 
841
  # Update x-axis with better formatting and autoscaling
@@ -845,9 +884,10 @@ def create_combined_time_series_graph(df):
845
  gridcolor='rgba(0,0,0,0.1)',
846
  # No fixed range - let Plotly autoscale
847
  autorange=True, # Explicitly enable autoscaling
848
- tickformat="%b %d, %H:%M", # More detailed time format
849
  tickangle=-30, # Angle the labels for better readability
850
- tickfont=dict(size=16, family="Arial, sans-serif", color="black", weight="bold") # Larger and bold font for tick labels
 
851
  )
852
 
853
  # SIMPLIFIED APPROACH: Do a direct plot without markers for comparison
@@ -991,25 +1031,65 @@ def create_combined_time_series_graph(df):
991
  # Simplified layout with adjusted y-axis range and increased size
992
  simple_fig.update_layout(
993
  title="Babydegen agents",
994
- xaxis_title="Time",
995
- yaxis_title="Percent drawdown || Agent APR",
996
  yaxis=dict(
997
  # No fixed range - let Plotly autoscale
998
  autorange=True, # Explicitly enable autoscaling
999
  tickformat=".2f", # Format tick labels with 2 decimal places
1000
  tickfont=dict(size=12) # Larger font for tick labels
1001
  ),
1002
- height=700, # Increased height
1003
- width=1400, # Increased width
1004
- template="plotly_white" # Use a cleaner template
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1005
  )
1006
 
1007
  # Apply autoscaling to the x-axis for the fallback graph
1008
  simple_fig.update_xaxes(
1009
  autorange=True, # Explicitly enable autoscaling
1010
- tickformat="%b %d, %H:%M",
1011
  tickangle=-30,
1012
- tickfont=dict(size=12)
 
1013
  )
1014
 
1015
  # Add a note about hidden agents if there are more than MAX_VISIBLE_AGENTS
@@ -1462,7 +1542,7 @@ def create_visualizations():
1462
 
1463
  return fig_swaps_chain, fig_bridges_chain, fig_agents_registered, fig_tvl
1464
 
1465
- # Modify dashboard function to remove the diagnostics section
1466
  def dashboard():
1467
  with gr.Blocks() as demo:
1468
  gr.Markdown("# Average Modius Agent Performance")
@@ -1472,8 +1552,9 @@ def dashboard():
1472
  with gr.Column():
1473
  refresh_btn = gr.Button("Refresh APR Data")
1474
 
1475
- # Create container for plotly figure (combined graph only)
1476
- combined_graph = gr.Plot(label="APR for All Agents")
 
1477
 
1478
  # Create compact toggle controls at the bottom of the graph
1479
  with gr.Row(visible=True):
@@ -1488,10 +1569,21 @@ def dashboard():
1488
  with gr.Column(scale=1, min_width=150):
1489
  adjusted_apr_toggle = gr.Checkbox(label="Adjusted APR Moving Average", value=True, elem_id="adjusted_apr_toggle")
1490
 
1491
- # Add custom CSS for styling the toggle checkboxes
1492
  gr.HTML("""
1493
  <style>
1494
- /* Style for toggle checkboxes */
 
 
 
 
 
 
 
 
 
 
 
1495
  #apr_toggle .gr-checkbox {
1496
  accent-color: #e74c3c !important;
1497
  }
 
806
  logger.info("Cumulative APR graph line has been removed as requested")
807
 
808
  # Update layout - use simple boolean values everywhere
809
+ # Make chart responsive instead of fixed width
810
  fig.update_layout(
811
  title="Babydegen agents",
812
+ xaxis_title=None, # Remove x-axis title to use annotation instead
813
+ yaxis_title=None, # Remove the y-axis title as we'll use annotations instead
814
  template="plotly_white",
815
+ height=600, # Reduced height for better fit on smaller screens
816
+ # Removed fixed width to enable responsiveness
817
+ autosize=True, # Enable auto-sizing for responsiveness
818
  legend=dict(
819
  orientation="h",
820
  yanchor="bottom",
 
823
  x=1,
824
  groupclick="toggleitem"
825
  ),
826
+ margin=dict(r=30, l=120, t=40, b=50), # Increased bottom margin for x-axis title
827
  hovermode="closest"
828
  )
829
 
830
+ # Add annotations for y-axis regions
831
+ fig.add_annotation(
832
+ x=-0.08, # Position further from the y-axis to avoid overlapping with tick labels
833
+ y=-25, # Middle of the negative region
834
+ xref="paper",
835
+ yref="y",
836
+ text="Percent drawdown",
837
+ showarrow=False,
838
+ font=dict(size=14, family="Arial, sans-serif", color="black", weight="bold"), # Smaller font size
839
+ textangle=-90, # Rotate text to be vertical
840
+ align="center"
841
+ )
842
+
843
+ fig.add_annotation(
844
+ x=-0.08, # Position further from the y-axis to avoid overlapping with tick labels
845
+ y=50, # Middle of the positive region
846
+ xref="paper",
847
+ yref="y",
848
+ text="Agent APR",
849
+ showarrow=False,
850
+ font=dict(size=14, family="Arial, sans-serif", color="black", weight="bold"), # Smaller font size
851
+ textangle=-90, # Rotate text to be vertical
852
+ align="center"
853
+ )
854
+
855
+ # Add x-axis title as annotation to match y-axis annotation style
856
+ fig.add_annotation(
857
+ x=0.5, # Center of the x-axis
858
+ y=-0.15, # Below the x-axis
859
+ xref="paper",
860
+ yref="paper",
861
+ text="Date",
862
+ showarrow=False,
863
+ font=dict(size=14, family="Arial, sans-serif", color="black", weight="bold"), # Match y-axis font
864
+ align="center"
865
+ )
866
+
867
  # Update y-axis with fixed range of -50 to +100 for psychological effect
868
  fig.update_yaxes(
869
  showgrid=True,
 
873
  autorange=False, # Disable autoscaling
874
  range=[-50, 100], # Set fixed range from -50 to +100
875
  tickformat=".2f", # Format tick labels with 2 decimal places
876
+ tickfont=dict(size=12, family="Arial, sans-serif", color="black", weight="bold"), # Smaller font for tick labels
877
+ title=None # Remove the built-in axis title since we're using annotations
878
  )
879
 
880
  # Update x-axis with better formatting and autoscaling
 
884
  gridcolor='rgba(0,0,0,0.1)',
885
  # No fixed range - let Plotly autoscale
886
  autorange=True, # Explicitly enable autoscaling
887
+ tickformat="%b %d", # Simplified date format without time
888
  tickangle=-30, # Angle the labels for better readability
889
+ tickfont=dict(size=12, family="Arial, sans-serif", color="black", weight="bold"), # Smaller font for tick labels
890
+ title=None # Remove built-in title to use annotation instead
891
  )
892
 
893
  # SIMPLIFIED APPROACH: Do a direct plot without markers for comparison
 
1031
  # Simplified layout with adjusted y-axis range and increased size
1032
  simple_fig.update_layout(
1033
  title="Babydegen agents",
1034
+ xaxis_title=None, # Remove x-axis title to use annotation instead
1035
+ yaxis_title=None, # Remove the y-axis title as we'll use annotations instead
1036
  yaxis=dict(
1037
  # No fixed range - let Plotly autoscale
1038
  autorange=True, # Explicitly enable autoscaling
1039
  tickformat=".2f", # Format tick labels with 2 decimal places
1040
  tickfont=dict(size=12) # Larger font for tick labels
1041
  ),
1042
+ height=600, # Reduced height for better fit
1043
+ # Removed fixed width to enable responsiveness
1044
+ autosize=True, # Enable auto-sizing for responsiveness
1045
+ template="plotly_white", # Use a cleaner template
1046
+ margin=dict(r=30, l=120, t=40, b=50) # Increased bottom margin for x-axis title
1047
+ )
1048
+
1049
+ # Add annotations for y-axis regions in the fallback graph
1050
+ simple_fig.add_annotation(
1051
+ x=-0.08, # Position further from the y-axis to avoid overlapping with tick labels
1052
+ y=-25, # Middle of the negative region
1053
+ xref="paper",
1054
+ yref="y",
1055
+ text="Percent drawdown",
1056
+ showarrow=False,
1057
+ font=dict(size=12, family="Arial, sans-serif", color="black"), # Even smaller font for fallback
1058
+ textangle=-90, # Rotate text to be vertical
1059
+ align="center"
1060
+ )
1061
+
1062
+ simple_fig.add_annotation(
1063
+ x=-0.08, # Position further from the y-axis to avoid overlapping with tick labels
1064
+ y=50, # Middle of the positive region
1065
+ xref="paper",
1066
+ yref="y",
1067
+ text="Agent APR",
1068
+ showarrow=False,
1069
+ font=dict(size=12, family="Arial, sans-serif", color="black"), # Even smaller font for fallback
1070
+ textangle=-90, # Rotate text to be vertical
1071
+ align="center"
1072
+ )
1073
+
1074
+ # Add x-axis title as annotation to match y-axis annotation style
1075
+ simple_fig.add_annotation(
1076
+ x=0.5, # Center of the x-axis
1077
+ y=-0.15, # Below the x-axis
1078
+ xref="paper",
1079
+ yref="paper",
1080
+ text="Date",
1081
+ showarrow=False,
1082
+ font=dict(size=12, family="Arial, sans-serif", color="black"), # Match y-axis font
1083
+ align="center"
1084
  )
1085
 
1086
  # Apply autoscaling to the x-axis for the fallback graph
1087
  simple_fig.update_xaxes(
1088
  autorange=True, # Explicitly enable autoscaling
1089
+ tickformat="%b %d", # Simplified date format without time
1090
  tickangle=-30,
1091
+ tickfont=dict(size=12),
1092
+ title=None # Remove built-in title to use annotation instead
1093
  )
1094
 
1095
  # Add a note about hidden agents if there are more than MAX_VISIBLE_AGENTS
 
1542
 
1543
  return fig_swaps_chain, fig_bridges_chain, fig_agents_registered, fig_tvl
1544
 
1545
+ # Modify dashboard function to make the plot container responsive
1546
  def dashboard():
1547
  with gr.Blocks() as demo:
1548
  gr.Markdown("# Average Modius Agent Performance")
 
1552
  with gr.Column():
1553
  refresh_btn = gr.Button("Refresh APR Data")
1554
 
1555
+ # Create container for plotly figure with responsive sizing
1556
+ with gr.Column():
1557
+ combined_graph = gr.Plot(label="APR for All Agents", elem_id="responsive_plot")
1558
 
1559
  # Create compact toggle controls at the bottom of the graph
1560
  with gr.Row(visible=True):
 
1569
  with gr.Column(scale=1, min_width=150):
1570
  adjusted_apr_toggle = gr.Checkbox(label="Adjusted APR Moving Average", value=True, elem_id="adjusted_apr_toggle")
1571
 
1572
+ # Add custom CSS for making the plot responsive
1573
  gr.HTML("""
1574
  <style>
1575
+ /* Make plot responsive */
1576
+ #responsive_plot {
1577
+ width: 100% !important;
1578
+ max-width: 100% !important;
1579
+ }
1580
+ #responsive_plot > div {
1581
+ width: 100% !important;
1582
+ height: auto !important;
1583
+ min-height: 500px !important;
1584
+ }
1585
+
1586
+ /* Existing toggle checkbox styling */
1587
  #apr_toggle .gr-checkbox {
1588
  accent-color: #e74c3c !important;
1589
  }