利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

文章目录

项目任务

利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

项目任务:基于数据,请利用Python中的Matplotlib模块,绘制2000年以来中国人口出生率、死亡率及增长率趋势图,效果入下图所示。(此图仅提供示范。颜色、字体、文字、数据范围等细节不要求和此图完全一样):

利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

; 一、步骤分析

1.下载并导入库

下载库的方法不再赘述,直接导入

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

2.解决中文乱码问题

代码如下:


plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

sns.set(font='SimHei')

有五种seaborn的风格,它们分别是:darkgrid, whitegrid, dark, white, ticks。它们各自适合不同的应用和个人喜好。默认的主题是darkgrid。

3.获取基础数据

数据并不庞大,直接手动输入:


natality = (14.03, 13.38, 12.86, 12.41, 12.29, 12.40, 12.09, 12.10, 12.14, 11.95,
            11.90, 13.27, 14.57, 13.03, 13.83, 11.99, 13.57, 12.64, 10.86, 10.41, 8.52)

mortality = (6.45, 6.43, 6.41, 6.40, 6.42, 6.51, 6.81, 6.93, 7.06, 7.08,
             7.11, 7.14, 7.13, 7.13, 7.12, 7.07, 7.04, 7.06, 7.08, 7.09, 7.07)

natural_growth = [7.58, 6.95, 6.15, 6.01, 5.87, 5.89, 5.28, 5.17, 5.08, 4.87,
                  4.79, 6.13, 7.43, 5.90, 6.71, 4.93, 6.53, 5.58, 3.78, 3.32, 1.45]

4.绘制交错柱状图

首先将出生率 natality 的长度存储到变量 ind 中,用于调整图像的大小及位置;
设置柱状图宽度为0.4 ;
定义标题、标签、字体以及图例;
绘制交错柱状图


ind = np.arange(len(natality))
width = 0.4

fig, ax1 = plt.subplots()

rects1 = ax1.bar(ind - width/2, natality, width,
                 color='SkyBlue', label='出生率')

rects2 = ax1.bar(ind + width/2, mortality, width,
                 color='IndianRed', label='死亡率')

ax1.set_title('2000年以来中国人口出生率、死亡率及增长率变化', fontsize=15)
ax1.set_xticks(ind)

ax1.set_xticklabels(range(2000, 2021, 1), rotation=45)
plt.legend()

需要注意的,上述代码中通过ind – width/2 和 ind + width/2 调整两个柱状图的距离和位置;定义x轴时由于数据密集导致显示杂乱,将x轴字体倾斜45°

5.绘制折线图

组合图必须加入 ax2 = ax1.twinx() 才能保证在一幅图上


ax2 = ax1.twinx()

s = pd.Series(natural_growth, name='自然增长率——')
sns.lineplot(data=s)

plt.show()

6.最终结果

利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

; 二、全部代码

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

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

sns.set(font='SimHei')

natality = (14.03, 13.38, 12.86, 12.41, 12.29, 12.40, 12.09, 12.10, 12.14, 11.95,
            11.90, 13.27, 14.57, 13.03, 13.83, 11.99, 13.57, 12.64, 10.86, 10.41, 8.52)

mortality = (6.45, 6.43, 6.41, 6.40, 6.42, 6.51, 6.81, 6.93, 7.06, 7.08,
             7.11, 7.14, 7.13, 7.13, 7.12, 7.07, 7.04, 7.06, 7.08, 7.09, 7.07)

natural_growth = [7.58, 6.95, 6.15, 6.01, 5.87, 5.89, 5.28, 5.17, 5.08, 4.87,
                  4.79, 6.13, 7.43, 5.90, 6.71, 4.93, 6.53, 5.58, 3.78, 3.32, 1.45]

ind = np.arange(len(natality))
width = 0.4

fig, ax1 = plt.subplots()

rects1 = ax1.bar(ind - width/2, natality, width,
                 color='SkyBlue', label='出生率')

rects2 = ax1.bar(ind + width/2, mortality, width,
                 color='IndianRed', label='死亡率')

ax1.set_title('2000年以来中国人口出生率、死亡率及增长率变化', fontsize=15)
ax1.set_xticks(ind)

ax1.set_xticklabels(range(2000, 2021, 1), rotation=45)
plt.legend()

ax2 = ax1.twinx()

s = pd.Series(natural_growth, name='自然增长率——')
sns.lineplot(data=s)

plt.show()

Original: https://blog.csdn.net/Thecarnage/article/details/123762179
Author: 不吃青菜的兔爷
Title: 利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694967/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球