如何用python构建人口金字塔 [英] How to build a population pyramid with python

查看:71
本文介绍了如何用python构建人口金字塔的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 seaborn 从熊猫 df 构建人口金字塔.问题是一些数据没有显示.从我创建的图中可以看出,有一些缺失的数据.Y 轴刻度为 21,df 的年龄等级为 21,为什么它们不匹配?我错过了什么?

I'm trying to build a population pyramid from a pandas df using seaborn. The problem is that some data isn't displayed. As you can see from the plot I created there's some missing data. The Y-axis ticks are 21 and the df's age classes are 21 so why don't they match? What am I missing?

这是我写的代码:

 import pandas as pd
 import matplotlib.pyplot as plt
 import numpy as np
 import seaborn as sns

 df = pd.DataFrame({'Age': ['0-4','5-9','10-14','15-19','20-24','25-29','30-34','35-39','40-44','45-49','50-54','55-59','60-64','65-69','70-74','75-79','80-84','85-89','90-94','95-99','100+'], 
                    'Male': [-49228000, -61283000, -64391000, -52437000, -42955000, -44667000, -31570000, -23887000, -22390000, -20971000, -17685000, -15450000, -13932000, -11020000, -7611000, -4653000, -1952000, -625000, -116000, -14000, -1000], 
                    'Female': [52367000, 64959000, 67161000, 55388000, 45448000, 47129000, 33436000, 26710000, 25627000, 23612000, 20075000, 16368000, 14220000, 10125000, 5984000, 3131000, 1151000, 312000, 49000, 4000, 0]})


AgeClass = ['100+','95-99','90-94','85-89','80-84','75-79','70-74','65-69','60-64','55-59','50-54','45-49','40-44','35-39','30-34','25-29','20-24','15-19','10-14','5-9','0-4']

bar_plot = sns.barplot(x='Male', y='Age', data=df, order=AgeClass)

bar_plot = sns.barplot(x='Female', y='Age', data=df, order=AgeClass)

bar_plot.set(xlabel="Population (hundreds of millions)", ylabel="Age-Group", title = "Population Pyramid")

推荐答案

正如 JohanC 所解释的,数据并没有丢失,只是与其他条形相比非常小.另一个因素是您的每个条形周围似乎都有一个白色边框,它隐藏了顶部的非常小的条形.尝试将 lw=0 放在对 barplot 的调用中.这就是我得到的:

As explained by JohanC, the data is not missing, it's just very small compared to the other bars. Another factor is that you seem to have a white border around each of your bars, which hides the very small bars at the top. Try putting lw=0 in your call to barplot. This is what I am getting:

bar_plot = sns.barplot(x='Male', y='Age', data=df, order=AgeClass, lw=0)
bar_plot = sns.barplot(x='Female', y='Age', data=df, order=AgeClass, lw=0)

这篇关于如何用python构建人口金字塔的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆