Akram Sanad commited on
Commit
a8dd096
·
1 Parent(s): c5bafe6

fixed legend, added doted lines for forecast

Browse files
Files changed (1) hide show
  1. visualize/visualize.py +61 -33
visualize/visualize.py CHANGED
@@ -10,7 +10,9 @@ import os
10
  from forecast import get_forecast_datasets, get_forecast_data
11
 
12
 
13
- def concatenate_historic_forecast(historic, forecast, cols_to_keep, value_period_col = "forecast scénario modéré"):
 
 
14
  historic["period"] = "historique"
15
  forecast["period"] = value_period_col
16
  historic = historic[cols_to_keep]
@@ -87,8 +89,10 @@ def visualize_climate(
87
  y=segment[column], # Precipitation values on y-axis
88
  mode="lines",
89
  name=f"{condition_value}",
 
 
90
  line=dict(color="blue" if condition_value == "historique" else "purple"),
91
- showlegend=False
92
  )
93
  )
94
  else:
@@ -98,7 +102,9 @@ def visualize_climate(
98
  y=segment[column], # Precipitation values on y-axis
99
  mode="lines",
100
  name=f"{condition_value}",
101
- line=dict(color="blue" if condition_value == "historique" else "purple"),
 
 
102
  )
103
  )
104
 
@@ -107,38 +113,54 @@ def visualize_climate(
107
  concatenated_pessimist = concatenated_pessimist.sort_values(by=x_axis)
108
  for condition_value in concatenated_pessimist["period"].unique():
109
  segment = concatenated_pessimist[concatenated_pessimist["period"] == condition_value]
110
- fig.add_trace(
111
- go.Scatter(
112
- x=segment[x_axis], # Years on x-axis
113
- y=segment[column], # Precipitation values on y-axis
114
- mode="lines",
115
- name=f"{condition_value}",
116
- line=dict(color="blue" if condition_value == "historique" else "orange"),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  )
118
- )
119
-
120
  # Interpolation for the pessimistic scenario...
121
  interpolation_pessimist = concatenated_pessimist[concatenated_pessimist[x_axis] > 2023]
 
122
  fig.add_trace(
123
  go.Scatter(
124
  x=interpolation_pessimist[x_axis],
125
  y=interpolation_pessimist[column].interpolate(),
126
  mode="lines",
127
  name = "forecast scénario pessimiste",
128
- line=dict(color="orange"),
129
- showlegend=False
130
-
 
131
  ),
132
  )
133
  interpolation_moderate = concatenated_moderate[concatenated_moderate[x_axis] > 2023]
 
134
  fig.add_trace(
135
  go.Scatter(
136
  x=interpolation_moderate[x_axis],
137
  y=interpolation_moderate[column].interpolate(),
138
  mode="lines",
139
  name = "forecast scénario modéré",
140
- line=dict(color="purple"),
141
- showlegend=False
 
142
 
143
  ),
144
  )
@@ -150,7 +172,8 @@ def visualize_climate(
150
 
151
  return fig
152
 
153
- def aggregate_yearly(df, col_to_agg, operation = "mean"):
 
154
  df[col_to_agg] = df.groupby("year")[col_to_agg].transform(operation)
155
  return df
156
 
@@ -167,12 +190,13 @@ def generate_plots(
167
  plots.append(visualize_climate(moderate, historic, pessimist, x_axes[i], col))
168
  return plots
169
 
 
170
  def get_plots():
171
  cols_to_plot = [
172
- "Precipitation (mm)",
173
- "Near Surface Air Temperature (°C)",
174
- "Surface Downwelling Shortwave Radiation (W/m²)",
175
- ]
176
  cols_to_keep = [
177
  "Precipitation (mm)",
178
  "Near Surface Air Temperature (°C)",
@@ -200,22 +224,26 @@ def get_plots():
200
 
201
  moderate = get_forecast_data(latitude, longitude, "moderate")
202
  pessimist = get_forecast_data(latitude, longitude, "pessimist")
203
- moderate = moderate.rename(columns={"Precipitation (kg m-2 s-1)": "Precipitation (mm)"})
 
 
204
  moderate["time"] = pd.to_datetime(moderate["time"])
205
- moderate = moderate.sort_values('time')
206
- moderate['year'] = moderate["time"].dt.year
207
- moderate["Precipitation (mm)"] = moderate["Precipitation (mm)"]*31536000
208
- pessimist = pessimist.rename(columns={"Precipitation (kg m-2 s-1)": "Precipitation (mm)"})
 
 
209
  pessimist["time"] = pd.to_datetime(pessimist["time"])
210
- pessimist = pessimist.sort_values('time')
211
- pessimist['year'] = pessimist["time"].dt.year
212
- pessimist["Precipitation (mm)"] = pessimist["Precipitation (mm)"]*31536000
213
  pessimist["period"] = "forecast scénario pessimiste"
214
- historic['year'] = historic["time"].dt.year
215
- historic["Precipitation (mm)"] = historic["Precipitation (mm)"]*8760.0
216
  for col in cols_to_plot:
217
  moderate = aggregate_yearly(moderate, col)
218
  historic = aggregate_yearly(historic, col)
219
  pessimist = aggregate_yearly(pessimist, col)
220
  plots = generate_plots(moderate, historic, pessimist, x_axes, cols_to_plot)
221
- return plots
 
10
  from forecast import get_forecast_datasets, get_forecast_data
11
 
12
 
13
+ def concatenate_historic_forecast(
14
+ historic, forecast, cols_to_keep, value_period_col="forecast scénario modéré"
15
+ ):
16
  historic["period"] = "historique"
17
  forecast["period"] = value_period_col
18
  historic = historic[cols_to_keep]
 
89
  y=segment[column], # Precipitation values on y-axis
90
  mode="lines",
91
  name=f"{condition_value}",
92
+ legendgroup='group1',
93
+ showlegend=False,
94
  line=dict(color="blue" if condition_value == "historique" else "purple"),
95
+
96
  )
97
  )
98
  else:
 
102
  y=segment[column], # Precipitation values on y-axis
103
  mode="lines",
104
  name=f"{condition_value}",
105
+ legendgroup='group2',
106
+ showlegend=False,
107
+ line=dict(color="blue" if condition_value == "historique" else "purple", dash='dot'),
108
  )
109
  )
110
 
 
113
  concatenated_pessimist = concatenated_pessimist.sort_values(by=x_axis)
114
  for condition_value in concatenated_pessimist["period"].unique():
115
  segment = concatenated_pessimist[concatenated_pessimist["period"] == condition_value]
116
+ if condition_value == "historique":
117
+ fig.add_trace(
118
+ go.Scatter(
119
+ x=segment[x_axis], # Years on x-axis
120
+ y=segment[column], # Precipitation values on y-axis
121
+ mode="lines",
122
+ name=f"{condition_value}",
123
+ legendgroup='group1',
124
+ line=dict(color="blue" if condition_value == "historique" else "orange", dash='dot' if condition_value != "historique" else None),
125
+ )
126
+ )
127
+ else:
128
+ fig.add_trace(
129
+ go.Scatter(
130
+ x=segment[x_axis], # Years on x-axis
131
+ y=segment[column], # Precipitation values on y-axis
132
+ mode="lines",
133
+ name=f"{condition_value}",
134
+ legendgroup='group3',
135
+ line=dict(color="blue" if condition_value == "historique" else "orange", dash='dot' if condition_value != "historique" else None),
136
+ )
137
  )
 
 
138
  # Interpolation for the pessimistic scenario...
139
  interpolation_pessimist = concatenated_pessimist[concatenated_pessimist[x_axis] > 2023]
140
+ interpolation_pessimist = interpolation_pessimist[interpolation_pessimist[x_axis] <= 2025]
141
  fig.add_trace(
142
  go.Scatter(
143
  x=interpolation_pessimist[x_axis],
144
  y=interpolation_pessimist[column].interpolate(),
145
  mode="lines",
146
  name = "forecast scénario pessimiste",
147
+ legendgroup='group3',
148
+ showlegend=False,
149
+ line=dict(color="orange", dash='dot'),
150
+
151
  ),
152
  )
153
  interpolation_moderate = concatenated_moderate[concatenated_moderate[x_axis] > 2023]
154
+ interpolation_moderate = interpolation_moderate[interpolation_moderate[x_axis] <= 2025]
155
  fig.add_trace(
156
  go.Scatter(
157
  x=interpolation_moderate[x_axis],
158
  y=interpolation_moderate[column].interpolate(),
159
  mode="lines",
160
  name = "forecast scénario modéré",
161
+ legendgroup='group2',
162
+ line=dict(color="purple", dash='dot'),
163
+
164
 
165
  ),
166
  )
 
172
 
173
  return fig
174
 
175
+
176
+ def aggregate_yearly(df, col_to_agg, operation="mean"):
177
  df[col_to_agg] = df.groupby("year")[col_to_agg].transform(operation)
178
  return df
179
 
 
190
  plots.append(visualize_climate(moderate, historic, pessimist, x_axes[i], col))
191
  return plots
192
 
193
+
194
  def get_plots():
195
  cols_to_plot = [
196
+ "Precipitation (mm)",
197
+ "Near Surface Air Temperature (°C)",
198
+ "Surface Downwelling Shortwave Radiation (W/m²)",
199
+ ]
200
  cols_to_keep = [
201
  "Precipitation (mm)",
202
  "Near Surface Air Temperature (°C)",
 
224
 
225
  moderate = get_forecast_data(latitude, longitude, "moderate")
226
  pessimist = get_forecast_data(latitude, longitude, "pessimist")
227
+ moderate = moderate.rename(
228
+ columns={"Precipitation (kg m-2 s-1)": "Precipitation (mm)"}
229
+ )
230
  moderate["time"] = pd.to_datetime(moderate["time"])
231
+ moderate = moderate.sort_values("time")
232
+ moderate["year"] = moderate["time"].dt.year
233
+ moderate["Precipitation (mm)"] = moderate["Precipitation (mm)"] * 31536000
234
+ pessimist = pessimist.rename(
235
+ columns={"Precipitation (kg m-2 s-1)": "Precipitation (mm)"}
236
+ )
237
  pessimist["time"] = pd.to_datetime(pessimist["time"])
238
+ pessimist = pessimist.sort_values("time")
239
+ pessimist["year"] = pessimist["time"].dt.year
240
+ pessimist["Precipitation (mm)"] = pessimist["Precipitation (mm)"] * 31536000
241
  pessimist["period"] = "forecast scénario pessimiste"
242
+ historic["year"] = historic["time"].dt.year
243
+ historic["Precipitation (mm)"] = historic["Precipitation (mm)"] * 8760.0
244
  for col in cols_to_plot:
245
  moderate = aggregate_yearly(moderate, col)
246
  historic = aggregate_yearly(historic, col)
247
  pessimist = aggregate_yearly(pessimist, col)
248
  plots = generate_plots(moderate, historic, pessimist, x_axes, cols_to_plot)
249
+ return plots