如何在Python使用 Plotly 创建人口金字塔?
人口金字塔是数据的图形表示,其中包含两个实体,即特定人口的年龄和性别。它通常被人口学家用来研究人口。年龄值分为子类别,性别列包含属于该年龄组的该特定性别的人口。
它被称为人口金字塔,因为它的图形形状类似于金字塔。其中最年轻的年龄组的人保留在图表的底部,年龄最大的人保留在图表的顶部。
在本文中,我们将研究如何在Python创建人口金字塔。为了实现我们的目的,我们将使用两个额外的库Pandas和Plotly来绘制我们的图形。如果你没有安装这些库,你可以通过 pip 命令安装它们。
pip install plotly
让我们看看如何使用Python的 Plotly 库制作人口金字塔
第 1 步:我们将首先在我们的代码中导入库。
Python
# Importing libraries
import pandas as pd
import plotly.graph_objects as gp
Python
data = pd.read_csv('India-2019.csv')
display(data)
Python
y_age = data['Age']
x_M = data['M']
x_F = data['F'] * -1
Python
# Creating instance of the figure
fig = gp.Figure()
# Adding Male data to the figure
fig.add_trace(gp.Bar(y= y_age, x = x_M,
name = 'Male',
orientation = 'h'))
# Adding Female data to the figure
fig.add_trace(gp.Bar(y = y_age, x = x_F,
name = 'Female', orientation = 'h'))
# Updating the layout for our graph
fig.update_layout(title = 'Population Pyramid of India-2019',
title_font_size = 22, barmode = 'relative',
bargap = 0.0, bargroupgap = 0,
xaxis = dict(tickvals = [-60000000, -40000000, -20000000,
0, 20000000, 40000000, 60000000],
ticktext = ['6M', '4M', '2M', '0',
'2M', '4M', '6M'],
title = 'Population in Millions',
title_font_size = 14)
)
fig.show()
第 2 步:读取包含我们数据的 CSV 文件。
Python
data = pd.read_csv('India-2019.csv')
display(data)
输出:
我们可以注意到我们的数据集包含三列,第一列是包含不同年龄范围的“年龄”,第二列和第三列包含属于这些年龄组的男性和女性性别类别的人数。
第 3 步:数据准备
在 y 轴上,我们将绘制年龄,在 x 轴上,我们将绘制男性和女性数字
Python
y_age = data['Age']
x_M = data['M']
x_F = data['F'] * -1
第 4 步:绘制图形
我们将创建一个我们已经导入的 graph_object 模块的实例,并使用这个实例,我们将使用 add_trace() 方法将男性和女性数据一一添加到图形中。
如果您注意到我为我的图表放置了标题并将 bargap 设置为 0,我们甚至可以根据我们的要求自定义绘图布局,以便我们的条形没有任何间距。对于 X 轴上的值,我们可以自定义图形以及在 X 轴上设置标题和刻度值。
Python
# Creating instance of the figure
fig = gp.Figure()
# Adding Male data to the figure
fig.add_trace(gp.Bar(y= y_age, x = x_M,
name = 'Male',
orientation = 'h'))
# Adding Female data to the figure
fig.add_trace(gp.Bar(y = y_age, x = x_F,
name = 'Female', orientation = 'h'))
# Updating the layout for our graph
fig.update_layout(title = 'Population Pyramid of India-2019',
title_font_size = 22, barmode = 'relative',
bargap = 0.0, bargroupgap = 0,
xaxis = dict(tickvals = [-60000000, -40000000, -20000000,
0, 20000000, 40000000, 60000000],
ticktext = ['6M', '4M', '2M', '0',
'2M', '4M', '6M'],
title = 'Population in Millions',
title_font_size = 14)
)
fig.show()
输出: