Skip to content

Commit 4a8ef99

Browse files
authored
Merge pull request PSLmodels#1139 from GHX5T-SOL/fix-plot-label-units
Fix output plot unit labels
2 parents 6007ab3 + 78aa743 commit 4a8ef99

2 files changed

Lines changed: 67 additions & 7 deletions

File tree

ogcore/output_plots.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
from ogcore.utils import Inequality
1313

1414

15+
INTEREST_RATE_VARS = {"r_gov", "r", "r_p"}
16+
17+
1518
def plot_aggregates(
1619
base_tpi,
1720
base_params,
@@ -41,7 +44,8 @@ def plot_aggregates(
4144
var_list (list): names of variable to plot
4245
plot_type (string): type of plot, can be:
4346
'pct_diff': plots percentage difference between baseline
44-
and reform ((reform-base)/base)
47+
and reform ((reform-base)/base). For interest rates,
48+
percentage point differences are plotted.
4549
'diff': plots difference between baseline and reform
4650
(reform-base)
4751
'levels': plot variables in model units
@@ -73,6 +77,8 @@ def plot_aggregates(
7377
# Check that reform included if doing pct_diff or diff plot
7478
if plot_type == "pct_diff" or plot_type == "diff":
7579
assert reform_tpi is not None
80+
only_interest_rates = all(v in INTEREST_RATE_VARS for v in var_list)
81+
has_interest_rates = any(v in INTEREST_RATE_VARS for v in var_list)
7682
fig1, ax1 = plt.subplots()
7783
if not stationarized:
7884
for v in var_list:
@@ -91,7 +97,12 @@ def plot_aggregates(
9197
plot_var = reform_tpi[v] - base_tpi[v]
9298
else:
9399
plot_var = (reform_tpi[v] - base_tpi[v]) / base_tpi[v]
94-
ylabel = r"Pct. change"
100+
if only_interest_rates:
101+
ylabel = r"Percentage point change"
102+
elif has_interest_rates:
103+
ylabel = r"Pct. or percentage point change"
104+
else:
105+
ylabel = r"Pct. change"
95106
plt.plot(
96107
year_vec,
97108
plot_var[start_index : start_index + num_years_to_plot],
@@ -119,7 +130,7 @@ def plot_aggregates(
119130
],
120131
label="Reform " + VAR_LABELS[v],
121132
)
122-
ylabel = r"Model Units"
133+
ylabel = r"Rate" if only_interest_rates else r"Model Units"
123134
elif plot_type == "forecast":
124135
# Need reform and baseline to ensure plot makes sense
125136
assert reform_tpi is not None
@@ -437,8 +448,8 @@ def plot_gdp_ratio(
437448
p (OG-Core Specifications class): parameters object
438449
var_list (list): names of variable to plot
439450
plot_type (string): type of plot, can be:
440-
'diff': plots difference between baseline and reform
441-
(reform-base)
451+
'diff' or 'pct_diff': plots percentage point difference
452+
between baseline and reform ratios to GDP (reform-base)
442453
'levels': plot variables in model units
443454
num_years_to_plot (integer): number of years to include in plot
444455
start_year (integer): year to start plot
@@ -453,7 +464,7 @@ def plot_gdp_ratio(
453464
assert isinstance(start_year, (int, np.integer))
454465
assert isinstance(num_years_to_plot, int)
455466
assert num_years_to_plot <= base_params.T
456-
if plot_type == "diff":
467+
if plot_type != "levels":
457468
assert reform_tpi is not None
458469
# Make sure both runs cover same time period
459470
if reform_tpi:
@@ -510,7 +521,10 @@ def plot_gdp_ratio(
510521
plot_var[start_index : start_index + num_years_to_plot],
511522
label=ToGDP_LABELS[v],
512523
)
513-
ylabel = r"Percent of GDP"
524+
if plot_type == "levels":
525+
ylabel = r"Percent of GDP"
526+
else:
527+
ylabel = r"Percentage points of GDP"
514528
# vertical markers at certain years
515529
if vertical_line_years:
516530
for yr in vertical_line_years:

tests/test_output_plots.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,38 @@ def test_plot_aggregates_not_a_type(tmpdir):
249249
)
250250

251251

252+
def test_plot_aggregates_interest_rate_pct_diff_label():
253+
fig = output_plots.plot_aggregates(
254+
base_tpi,
255+
base_params,
256+
reform_tpi=reform_tpi,
257+
reform_params=reform_params,
258+
var_list=["r"],
259+
plot_type="pct_diff",
260+
num_years_to_plot=20,
261+
start_year=int(base_params.start_year),
262+
)
263+
264+
assert fig.axes[0].get_ylabel() == "Percentage point change"
265+
plt.close()
266+
267+
268+
def test_plot_aggregates_interest_rate_levels_label():
269+
fig = output_plots.plot_aggregates(
270+
base_tpi,
271+
base_params,
272+
reform_tpi=reform_tpi,
273+
reform_params=reform_params,
274+
var_list=["r"],
275+
plot_type="levels",
276+
num_years_to_plot=20,
277+
start_year=int(base_params.start_year),
278+
)
279+
280+
assert fig.axes[0].get_ylabel() == "Rate"
281+
plt.close()
282+
283+
252284
test_data = [
253285
(base_tpi, base_params, None, None, None, None, "levels"),
254286
(base_tpi, base_params, reform_tpi, reform_params, None, None, "levels"),
@@ -316,6 +348,20 @@ def test_plot_gdp_ratio_save_fig(tmpdir):
316348
assert isinstance(img, np.ndarray)
317349

318350

351+
def test_plot_gdp_ratio_pct_diff_label():
352+
fig = output_plots.plot_gdp_ratio(
353+
base_tpi,
354+
base_params,
355+
reform_tpi=reform_tpi,
356+
reform_params=reform_params,
357+
start_year=int(base_params.start_year),
358+
plot_type="pct_diff",
359+
)
360+
361+
assert fig.axes[0].get_ylabel() == "Percentage points of GDP"
362+
plt.close()
363+
364+
319365
def test_ability_bar():
320366
fig = output_plots.ability_bar(
321367
base_tpi,

0 commit comments

Comments
 (0)