Data and code with comprehensive comments for articles on The Seasonal Variation of the DC Global Electric Circuit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

64 KiB

In [24]:
import matplotlib.pyplot as plt
import numpy as np
In [25]:
wrf_mon_T2 = np.load("./data/WRF_T2_MONxLAT.npy")
In [26]:
area_factor = (
    np.cos(np.arange(180) * np.pi / 180) - np.cos(np.arange(1, 181) * np.pi / 180)
) / 2
# area factors for different latitudes
In [27]:
month_name = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]
In [28]:
lat = [20, 30, 40, 50]  # boundary latitudes for the plot
In [29]:
fig = plt.figure(figsize=(10, 14), constrained_layout=False)
ax = [None for _ in range(4)]
for n in range(4):
    ax[n] = fig.add_subplot(4, 4, (2 * n + 1, 2 * n + 2))

low = [23, 22, 20, 18]
high = [27, 26, 24, 22]
step = [1] * 4
coeff = [1] * 4
caption = [f"WRF, 1980–2020, {lt}°S–{lt}°N" for lt in lat]
# thin spaces ('') are used between ‘°’ signs and letters
col = ["firebrick"] * 4

for n in range(4):
    for axis in ["top", "bottom", "left", "right"]:
        ax[n].spines[axis].set_linewidth(0.5)
    ax[n].tick_params(length=6, width=0.5, axis="y")
    ax[n].tick_params(length=0, width=0.5, axis="x")
    ax[n].grid(color="0.", linewidth=0.5, axis="y")

    ax[n].set_xlim((-0.5, 11.5))
    ax[n].set_xticks(np.arange(12))
    ax[n].set_xticklabels(month_name, fontsize="large", va="top")

    ax[n].set_ylim((low[n], high[n]))
    ax[n].set_yticks(np.arange(low[n], high[n] + step[n] / 2, step[n]))
    ax[n].set_yticklabels(
        (np.arange(low[n], high[n] + step[n] / 2, step[n]) / coeff[n]).astype(int),
        fontsize="large",
    )
    ax[n].set_ylabel("Mean surface\nair temperature, °C", fontsize="large")

    ax[n].set_title(caption[n], fontsize="large")

fig.align_ylabels([ax[0], ax[2]])
fig.align_ylabels([ax[1], ax[3]])

for n in range(4):
    # normalization of temperature values on the 
    # area of degree cells before summation:
    # T_avg =(T_1*S_1+T_2*S_2+...+T_2*S_N)/(S_1 + S_2 + ... +S_N)
    T_values = np.sum(
        wrf_mon_T2[90 - lat[n] : 90 + lat[n]]
        * area_factor[90 - lat[n] : 90 + lat[n], np.newaxis],
        axis=0,
    ) / np.sum(area_factor[90 - lat[n] : 90 + lat[n]])
    
    ax[n].bar(np.arange(12), T_values, width=0.8, color=col[n])

for n in range(4):
    ax[n].text(
        -0.25, 1.05,
        chr(ord("a") + n),
        fontsize="x-large",
        fontweight="semibold",
        ha="left", va="bottom",
        transform=ax[n].transAxes,
    )

fig.subplots_adjust(hspace=0.3, wspace=1.0)

fig.savefig(
    "figures_two_parts/t2.eps", bbox_inches="tight"
)
In [ ]: