# --- Create dataframe (Table CtG1A.3) ---
data = {
"Year": [
*["2020–22"] * 48,
*["2015–17"] * 48
],
"Indigenous_status": [
*(["Aboriginal and Torres Strait Islander"] * 32 +
["Non-Indigenous"] * 8 +
["Difference"] * 8),
*(["Aboriginal and Torres Strait Islander"] * 32 +
["Non-Indigenous"] * 8 +
["Difference"] * 8)
],
"Sex": [
*([ "Males"] * 16 + ["Females"] * 16 + ["Males"] * 4 + ["Females"] * 4 + ["Males"] * 4 + ["Females"] * 4),
*([ "Males"] * 16 + ["Females"] * 16 + ["Males"] * 4 + ["Females"] * 4 + ["Males"] * 4 + ["Females"] * 4)
],
"Measure": (["Mean", "LCI", "UCI"] * 32)[:96],
"Quintile": (["Q1", "Q2", "Q3", "Q4"] * 24)[:96],
"Value": [
# Aboriginal and Torres Strait Islander 2020–22
69.5, 71.7, 74.3, 74.6, 69.2, 71.2, 73.4, 73.3, 70.4, 72.6, 75.6, 76.1,
74.0, 75.7, 78.0, 77.0, 73.8, 75.3, 77.2, 75.7, 75.0, 76.5, 79.2, 78.3,
# Non-Indigenous 2020–22 (Means only)
78.4, 79.5, 80.8, 82.0,
82.3, 83.0, 84.0, 84.6,
# Difference 2020–22
8.9, 7.8, 6.5, 7.4,
8.3, 7.3, 6.0, 7.6,
# Aboriginal and Torres Strait Islander 2015–17
69.7, 71.8, 72.6, 74.0, 68.9, 70.9, 71.4, 72.8, 70.5, 72.7, 73.8, 75.2,
73.8, 76.7, 75.9, 77.7, 73.0, 75.8, 74.8, 76.6, 74.6, 77.6, 77.0, 78.8,
# Non-Indigenous 2015–17 (Means only)
77.8, 79.0, 80.3, 81.6,
81.9, 82.7, 83.5, 84.5,
# Difference 2015–17
8.1, 7.2, 7.8, 7.7,
8.1, 6.0, 7.5, 6.8
]
}
df = pd.DataFrame(data)
# --- Clean data ---
df["Quintile"] = pd.Categorical(df["Quintile"], categories=["Q1", "Q2", "Q3", "Q4"], ordered=True)
df["Year"] = df["Year"].astype(str)
# --- Filter mean values only for main plot ---
df_mean = df[df["Measure"] == "Mean"]
# --- Set plot style ---
sns.set(style="whitegrid", context="talk")
# --- Plot 1: Life expectancy by quintile and sex (Indigenous vs Non-Indigenous) ---
plt.figure(figsize=(11.7, 8.3)) # A4 size in inches (landscape)
sns.lineplot(
data=df_mean[df_mean["Indigenous_status"] != "Difference"],
x="Quintile", y="Value",
hue="Sex", style="Indigenous_status",
markers=True, dashes=False, linewidth=2.2
)
plt.title("Life Expectancy by SEIFA (IRSD) Quintile and Indigenous Status\nAustralia, 2015–17 vs 2020–22")
plt.ylabel("Life Expectancy (years)")
plt.xlabel("Socioeconomic Quintile (Q1–Q4)")
plt.legend(title="Sex / Indigenous Status")
plt.tight_layout()
plt.show()
# --- Plot 2: Life expectancy gap (Difference group) ---
plt.figure(figsize=(11.7, 8.3)) # A4 size
sns.lineplot(
data=df_mean[df_mean["Indigenous_status"] == "Difference"],
x="Quintile", y="Value",
hue="Sex", style="Year",
markers=True, linewidth=2.2, dashes=True
)
plt.title("Life Expectancy Gap (Aboriginal & Torres Strait Islander vs Non-Indigenous)\nBy Socioeconomic Quintile")
plt.ylabel("Gap (years)")
plt.xlabel("Socioeconomic Quintile (Q1–Q4)")
plt.legend(title="Sex / Year")
plt.tight_layout()
plt.show()
IyAtLS0gQ3JlYXRlIGRhdGFmcmFtZSAoVGFibGUgQ3RHMUEuMykgLS0tCmRhdGEgPSB7CiAgICAiWWVhciI6IFsKICAgICAgICAqWyIyMDIw4oCTMjIiXSAqIDQ4LAogICAgICAgICpbIjIwMTXigJMxNyJdICogNDgKICAgIF0sCiAgICAiSW5kaWdlbm91c19zdGF0dXMiOiBbCiAgICAgICAgKihbIkFib3JpZ2luYWwgYW5kIFRvcnJlcyBTdHJhaXQgSXNsYW5kZXIiXSAqIDMyICsKICAgICAgICAgIFsiTm9uLUluZGlnZW5vdXMiXSAqIDggKwogICAgICAgICAgWyJEaWZmZXJlbmNlIl0gKiA4KSwKICAgICAgICAqKFsiQWJvcmlnaW5hbCBhbmQgVG9ycmVzIFN0cmFpdCBJc2xhbmRlciJdICogMzIgKwogICAgICAgICAgWyJOb24tSW5kaWdlbm91cyJdICogOCArCiAgICAgICAgICBbIkRpZmZlcmVuY2UiXSAqIDgpCiAgICBdLAogICAgIlNleCI6IFsKICAgICAgICAqKFsgIk1hbGVzIl0gKiAxNiArIFsiRmVtYWxlcyJdICogMTYgKyBbIk1hbGVzIl0gKiA0ICsgWyJGZW1hbGVzIl0gKiA0ICsgWyJNYWxlcyJdICogNCArIFsiRmVtYWxlcyJdICogNCksCiAgICAgICAgKihbICJNYWxlcyJdICogMTYgKyBbIkZlbWFsZXMiXSAqIDE2ICsgWyJNYWxlcyJdICogNCArIFsiRmVtYWxlcyJdICogNCArIFsiTWFsZXMiXSAqIDQgKyBbIkZlbWFsZXMiXSAqIDQpCiAgICBdLAogICAgIk1lYXN1cmUiOiAoWyJNZWFuIiwgIkxDSSIsICJVQ0kiXSAqIDMyKVs6OTZdLAogICAgIlF1aW50aWxlIjogKFsiUTEiLCAiUTIiLCAiUTMiLCAiUTQiXSAqIDI0KVs6OTZdLAogICAgIlZhbHVlIjogWwogICAgICAgICMgQWJvcmlnaW5hbCBhbmQgVG9ycmVzIFN0cmFpdCBJc2xhbmRlciAyMDIw4oCTMjIKICAgICAgICA2OS41LCA3MS43LCA3NC4zLCA3NC42LCA2OS4yLCA3MS4yLCA3My40LCA3My4zLCA3MC40LCA3Mi42LCA3NS42LCA3Ni4xLAogICAgICAgIDc0LjAsIDc1LjcsIDc4LjAsIDc3LjAsIDczLjgsIDc1LjMsIDc3LjIsIDc1LjcsIDc1LjAsIDc2LjUsIDc5LjIsIDc4LjMsCiAgICAgICAgIyBOb24tSW5kaWdlbm91cyAyMDIw4oCTMjIgKE1lYW5zIG9ubHkpCiAgICAgICAgNzguNCwgNzkuNSwgODAuOCwgODIuMCwKICAgICAgICA4Mi4zLCA4My4wLCA4NC4wLCA4NC42LAogICAgICAgICMgRGlmZmVyZW5jZSAyMDIw4oCTMjIKICAgICAgICA4LjksIDcuOCwgNi41LCA3LjQsCiAgICAgICAgOC4zLCA3LjMsIDYuMCwgNy42LAoKICAgICAgICAjIEFib3JpZ2luYWwgYW5kIFRvcnJlcyBTdHJhaXQgSXNsYW5kZXIgMjAxNeKAkzE3CiAgICAgICAgNjkuNywgNzEuOCwgNzIuNiwgNzQuMCwgNjguOSwgNzAuOSwgNzEuNCwgNzIuOCwgNzAuNSwgNzIuNywgNzMuOCwgNzUuMiwKICAgICAgICA3My44LCA3Ni43LCA3NS45LCA3Ny43LCA3My4wLCA3NS44LCA3NC44LCA3Ni42LCA3NC42LCA3Ny42LCA3Ny4wLCA3OC44LAogICAgICAgICMgTm9uLUluZGlnZW5vdXMgMjAxNeKAkzE3IChNZWFucyBvbmx5KQogICAgICAgIDc3LjgsIDc5LjAsIDgwLjMsIDgxLjYsCiAgICAgICAgODEuOSwgODIuNywgODMuNSwgODQuNSwKICAgICAgICAjIERpZmZlcmVuY2UgMjAxNeKAkzE3CiAgICAgICAgOC4xLCA3LjIsIDcuOCwgNy43LAogICAgICAgIDguMSwgNi4wLCA3LjUsIDYuOAogICAgXQp9CgpkZiA9IHBkLkRhdGFGcmFtZShkYXRhKQoKIyAtLS0gQ2xlYW4gZGF0YSAtLS0KZGZbIlF1aW50aWxlIl0gPSBwZC5DYXRlZ29yaWNhbChkZlsiUXVpbnRpbGUiXSwgY2F0ZWdvcmllcz1bIlExIiwgIlEyIiwgIlEzIiwgIlE0Il0sIG9yZGVyZWQ9VHJ1ZSkKZGZbIlllYXIiXSA9IGRmWyJZZWFyIl0uYXN0eXBlKHN0cikKCiMgLS0tIEZpbHRlciBtZWFuIHZhbHVlcyBvbmx5IGZvciBtYWluIHBsb3QgLS0tCmRmX21lYW4gPSBkZltkZlsiTWVhc3VyZSJdID09ICJNZWFuIl0KCiMgLS0tIFNldCBwbG90IHN0eWxlIC0tLQpzbnMuc2V0KHN0eWxlPSJ3aGl0ZWdyaWQiLCBjb250ZXh0PSJ0YWxrIikKCiMgLS0tIFBsb3QgMTogTGlmZSBleHBlY3RhbmN5IGJ5IHF1aW50aWxlIGFuZCBzZXggKEluZGlnZW5vdXMgdnMgTm9uLUluZGlnZW5vdXMpIC0tLQpwbHQuZmlndXJlKGZpZ3NpemU9KDExLjcsIDguMykpICAjIEE0IHNpemUgaW4gaW5jaGVzIChsYW5kc2NhcGUpCnNucy5saW5lcGxvdCgKICAgIGRhdGE9ZGZfbWVhbltkZl9tZWFuWyJJbmRpZ2Vub3VzX3N0YXR1cyJdICE9ICJEaWZmZXJlbmNlIl0sCiAgICB4PSJRdWludGlsZSIsIHk9IlZhbHVlIiwKICAgIGh1ZT0iU2V4Iiwgc3R5bGU9IkluZGlnZW5vdXNfc3RhdHVzIiwKICAgIG1hcmtlcnM9VHJ1ZSwgZGFzaGVzPUZhbHNlLCBsaW5ld2lkdGg9Mi4yCikKcGx0LnRpdGxlKCJMaWZlIEV4cGVjdGFuY3kgYnkgU0VJRkEgKElSU0QpIFF1aW50aWxlIGFuZCBJbmRpZ2Vub3VzIFN0YXR1c1xuQXVzdHJhbGlhLCAyMDE14oCTMTcgdnMgMjAyMOKAkzIyIikKcGx0LnlsYWJlbCgiTGlmZSBFeHBlY3RhbmN5ICh5ZWFycykiKQpwbHQueGxhYmVsKCJTb2Npb2Vjb25vbWljIFF1aW50aWxlIChRMeKAk1E0KSIpCnBsdC5sZWdlbmQodGl0bGU9IlNleCAvIEluZGlnZW5vdXMgU3RhdHVzIikKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zaG93KCkKCiMgLS0tIFBsb3QgMjogTGlmZSBleHBlY3RhbmN5IGdhcCAoRGlmZmVyZW5jZSBncm91cCkgLS0tCnBsdC5maWd1cmUoZmlnc2l6ZT0oMTEuNywgOC4zKSkgICMgQTQgc2l6ZQpzbnMubGluZXBsb3QoCiAgICBkYXRhPWRmX21lYW5bZGZfbWVhblsiSW5kaWdlbm91c19zdGF0dXMiXSA9PSAiRGlmZmVyZW5jZSJdLAogICAgeD0iUXVpbnRpbGUiLCB5PSJWYWx1ZSIsCiAgICBodWU9IlNleCIsIHN0eWxlPSJZZWFyIiwKICAgIG1hcmtlcnM9VHJ1ZSwgbGluZXdpZHRoPTIuMiwgZGFzaGVzPVRydWUKKQpwbHQudGl0bGUoIkxpZmUgRXhwZWN0YW5jeSBHYXAgKEFib3JpZ2luYWwgJiBUb3JyZXMgU3RyYWl0IElzbGFuZGVyIHZzIE5vbi1JbmRpZ2Vub3VzKVxuQnkgU29jaW9lY29ub21pYyBRdWludGlsZSIpCnBsdC55bGFiZWwoIkdhcCAoeWVhcnMpIikKcGx0LnhsYWJlbCgiU29jaW9lY29ub21pYyBRdWludGlsZSAoUTHigJNRNCkiKQpwbHQubGVnZW5kKHRpdGxlPSJTZXggLyBZZWFyIikKcGx0LnRpZ2h0X2xheW91dCgpCnBsdC5zaG93KCk=
# --- Create dataframe (Table CtG1A.3) ---
data = {
"Year": [
*["2020–22"] * 48,
*["2015–17"] * 48
],
"Indigenous_status": [
*(["Aboriginal and Torres Strait Islander"] * 32 +
["Non-Indigenous"] * 8 +
["Difference"] * 8),
*(["Aboriginal and Torres Strait Islander"] * 32 +
["Non-Indigenous"] * 8 +
["Difference"] * 8)
],
"Sex": [
*([ "Males"] * 16 + ["Females"] * 16 + ["Males"] * 4 + ["Females"] * 4 + ["Males"] * 4 + ["Females"] * 4),
*([ "Males"] * 16 + ["Females"] * 16 + ["Males"] * 4 + ["Females"] * 4 + ["Males"] * 4 + ["Females"] * 4)
],
"Measure": (["Mean", "LCI", "UCI"] * 32)[:96],
"Quintile": (["Q1", "Q2", "Q3", "Q4"] * 24)[:96],
"Value": [
# Aboriginal and Torres Strait Islander 2020–22
69.5, 71.7, 74.3, 74.6, 69.2, 71.2, 73.4, 73.3, 70.4, 72.6, 75.6, 76.1,
74.0, 75.7, 78.0, 77.0, 73.8, 75.3, 77.2, 75.7, 75.0, 76.5, 79.2, 78.3,
# Non-Indigenous 2020–22 (Means only)
78.4, 79.5, 80.8, 82.0,
82.3, 83.0, 84.0, 84.6,
# Difference 2020–22
8.9, 7.8, 6.5, 7.4,
8.3, 7.3, 6.0, 7.6,
# Aboriginal and Torres Strait Islander 2015–17
69.7, 71.8, 72.6, 74.0, 68.9, 70.9, 71.4, 72.8, 70.5, 72.7, 73.8, 75.2,
73.8, 76.7, 75.9, 77.7, 73.0, 75.8, 74.8, 76.6, 74.6, 77.6, 77.0, 78.8,
# Non-Indigenous 2015–17 (Means only)
77.8, 79.0, 80.3, 81.6,
81.9, 82.7, 83.5, 84.5,
# Difference 2015–17
8.1, 7.2, 7.8, 7.7,
8.1, 6.0, 7.5, 6.8
]
}
df = pd.DataFrame(data)
# --- Clean data ---
df["Quintile"] = pd.Categorical(df["Quintile"], categories=["Q1", "Q2", "Q3", "Q4"], ordered=True)
df["Year"] = df["Year"].astype(str)
# --- Filter mean values only for main plot ---
df_mean = df[df["Measure"] == "Mean"]
# --- Set plot style ---
sns.set(style="whitegrid", context="talk")
# --- Plot 1: Life expectancy by quintile and sex (Indigenous vs Non-Indigenous) ---
plt.figure(figsize=(11.7, 8.3)) # A4 size in inches (landscape)
sns.lineplot(
data=df_mean[df_mean["Indigenous_status"] != "Difference"],
x="Quintile", y="Value",
hue="Sex", style="Indigenous_status",
markers=True, dashes=False, linewidth=2.2
)
plt.title("Life Expectancy by SEIFA (IRSD) Quintile and Indigenous Status\nAustralia, 2015–17 vs 2020–22")
plt.ylabel("Life Expectancy (years)")
plt.xlabel("Socioeconomic Quintile (Q1–Q4)")
plt.legend(title="Sex / Indigenous Status")
plt.tight_layout()
plt.show()
# --- Plot 2: Life expectancy gap (Difference group) ---
plt.figure(figsize=(11.7, 8.3)) # A4 size
sns.lineplot(
data=df_mean[df_mean["Indigenous_status"] == "Difference"],
x="Quintile", y="Value",
hue="Sex", style="Year",
markers=True, linewidth=2.2, dashes=True
)
plt.title("Life Expectancy Gap (Aboriginal & Torres Strait Islander vs Non-Indigenous)\nBy Socioeconomic Quintile")
plt.ylabel("Gap (years)")
plt.xlabel("Socioeconomic Quintile (Q1–Q4)")
plt.legend(title="Sex / Year")
plt.tight_layout()
plt.show()