How to Create a Population Pyramid Using Plotly in Python?

A population pyramid is a graphical representation of the age and gender distribution of a population. It consists of two back-to-back bar charts, one showing the distribution of males and the other showing the distribution of females across different age groups. The population pyramid is a powerful visualization tool that can help us understand the demographic composition of a population and identify trends and patterns.

In this article, we will explore how to create a population pyramid using Plotly in Python. Plotly is a powerful visualization library that allows us to create interactive and dynamic plots in Python.

We will use Plotly to create a population pyramid that shows the age and gender distribution of a population. We will start by creating sample data and then use Plotly to create the population pyramid.

Using Plotly Express

Plotly Express is a high-level API for Plotly that makes it easy to create many types of plots, including population pyramids. We can use the px.bar() function to create the two back-to-back bar charts that make up the population pyramid.

Example

import plotly.express as px
import pandas as pd

# Create sample population data
age_groups = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70+']
male_counts = [1200, 1500, 1800, 1600, 1400, 1200, 800, 400]
female_counts = [1100, 1400, 1700, 1550, 1350, 1150, 850, 500]

# Create DataFrame
df = pd.DataFrame({
    'age': age_groups + age_groups,
    'count': male_counts + female_counts,
    'gender': ['Male'] * len(age_groups) + ['Female'] * len(age_groups)
})

# Adjust female counts to negative for pyramid effect
df.loc[df['gender'] == 'Female', 'count'] *= -1

# Create the population pyramid using Plotly Express
fig = px.bar(df, x="count", y="age", orientation="h", color="gender",
             barmode="relative", 
             title="Population Pyramid",
             labels={'count': 'Population Count', 'age': 'Age Group'})

# Update layout for better visualization
fig.update_layout(xaxis_title="Population Count")

# Show the plot
fig.show()

Explanation

  • We start by importing the libraries, including plotly.express for creating the plot and pandas for creating the DataFrame.

  • We create sample population data with age groups and corresponding counts for males and females.

  • We construct a DataFrame with age groups, counts, and gender information.

  • Female counts are multiplied by -1 to create the pyramid effect where females appear on the left side.

  • The px.bar() function creates the pyramid with horizontal orientation and relative bar mode.

  • Finally, we display the plot using the show() method.

Using Plotly Graph Objects

Plotly Graph Objects is a lower-level API for Plotly that provides more flexibility and control over the plot layout and styling. We can use Plotly Graph Objects to create a population pyramid by creating two bar traces, one for males and the other for females, and then combining them into a single figure.

Example

import plotly.graph_objs as go
import pandas as pd

# Create sample population data
age_groups = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70+']
male_counts = [1200, 1500, 1800, 1600, 1400, 1200, 800, 400]
female_counts = [1100, 1400, 1700, 1550, 1350, 1150, 850, 500]

# Create the male bar trace
trace_male = go.Bar(x=male_counts,
                    y=age_groups,
                    orientation="h",
                    name="Male",
                    marker=dict(color="#1f77b4"))

# Create the female bar trace (negative values for left side)
trace_female = go.Bar(x=[-count for count in female_counts],
                      y=age_groups,
                      orientation="h",
                      name="Female",
                      marker=dict(color="#d62728"))

# Create the layout
layout = go.Layout(title="Population Pyramid",
                   xaxis=dict(title="Population Count"),
                   yaxis=dict(title="Age Group"),
                   barmode="overlay",
                   bargap=0.1)

# Create the figure
fig = go.Figure(data=[trace_male, trace_female], layout=layout)

# Show the plot
fig.show()

Explanation

  • We import plotly.graph_objs and pandas for creating the plot and handling data.

  • Sample population data is created with age groups and counts for both genders.

  • Two bar chart traces are created using go.Bar() - one for males and one for females.

  • Female counts are converted to negative values to create the left side of the pyramid.

  • A layout is created with title and axis labels using go.Layout().

  • The figure is created by combining both traces with the layout using go.Figure().

  • Finally, the plot is displayed using fig.show().

Comparison

Method Complexity Customization Best For
Plotly Express Low Limited Quick prototypes
Graph Objects Medium High Custom styling

Conclusion

Population pyramids are effective tools for visualizing demographic data. Plotly Express offers a quick solution for basic pyramids, while Graph Objects provides more control for custom styling and advanced features.

Updated on: 2026-03-27T11:15:18+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements