import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# Provided and fictional data
data = {
'Year': [2015, 2018, 2024],
'Number of Houses': [801417, 850000, 957491],
'Number of Households': [1265468, 1350000, 1576847],
'Housing Deficit': [464051, 800000, 619356],
}
# Convert to DataFrame
df = pd.DataFrame(data)
# Calculate Percentages
df['Houses (%)'] = df['Number of Houses'] / df['Number of Households'] * 100
df['Deficit (%)'] = df['Housing Deficit'] / df['Number of Households'] * 100
# Ensure all percentages are non-negative and valid
df['Houses (%)'] = df['Houses (%)'].apply(lambda x: max(x, 0))
df['Deficit (%)'] = df['Deficit (%)'].apply(lambda x: max(x, 0))
# Plotting
fig, axs = plt.subplots(2, 2, figsize=(15, 10))
# Pie Chart for 2015
sizes_2015 = [df['Houses (%)'][0], df['Deficit (%)'][0], 100 - df['Houses (%)'][0] - df['Deficit (%)'][0]]
labels_2015 = ['Houses (2015)', 'Deficit (2015)', 'Other']
colors = ['skyblue', 'lightcoral', 'lightgrey']
axs[0, 0].pie(sizes_2015, labels=labels_2015, autopct='%1.1f%%', startangle=140, colors=colors)
axs[0, 0].set_title('Housing Distribution (2015)')
# Pie Chart for 2018
sizes_2018 = [df['Houses (%)'][1], df['Deficit (%)'][1], 100 - df['Houses (%)'][1] - df['Deficit (%)'][1]]
labels_2018 = ['Houses (2018)', 'Deficit (2018)', 'Other']
sizes_2018 = [max(size, 0) for size in sizes_2018] # Ensure no negative values
axs[0, 1].pie(sizes_2018, labels=labels_2018, autopct='%1.1f%%', startangle=140, colors=colors)
axs[0, 1].set_title('Housing Distribution (2018)')
# Pie Chart for 2024
sizes_2024 = [df['Houses (%)'][2], df['Deficit (%)'][2], 100 - df['Houses (%)'][2] - df['Deficit (%)'][2]]
labels_2024 = ['Houses (2024)', 'Deficit (2024)', 'Other']
sizes_2024 = [max(size, 0) for size in sizes_2024] # Ensure no negative values
axs[1, 0].pie(sizes_2024, labels=labels_2024, autopct='%1.1f%%', startangle=140, colors=colors)
axs[1, 0].set_title('Housing Distribution (2024)')
# Stacked Bar Chart for Comparison
df_melted = df.melt(id_vars='Year', value_vars=['Houses (%)', 'Deficit (%)'], var_name='Category', value_name='Percentage')
sns.barplot(x='Year', y='Percentage', hue='Category', data=df_melted, ax=axs[1, 1], palette=['skyblue', 'lightcoral'])
axs[1, 1].set_title('Housing Distribution Comparison (2015, 2018, 2024)')
axs[1, 1].set_xlabel('Year')
axs[1, 1].set_ylabel('Percentage')
axs[1, 1].legend(title='Category')
plt.tight_layout()
plt.show()
Click Run or press shift + ENTER to run code