栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

文章目录
  • 利用Python中的Matplotlib,绘制2000年以来中国人口出生率、死亡率及增长率趋势图
  • 项目任务
  • 一、步骤分析
    • 1.下载并导入库
    • 2.解决中文乱码问题
    • 3.获取基础数据
    • 4.绘制交错柱状图
    • 5.绘制折线图
    • 6.最终结果
  • 二、全部代码


项目任务

项目任务:基于数据,请利用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']

# 解决Seaborn中文显示问题,字体为黑体,使用seaborn默认主题
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  # 设置柱状图宽度为 0.4

fig, ax1 = plt.subplots()
# 绘制交错的柱状图(通过ind +- width/2)
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() 才能保证在一幅图上

# twinx共享x轴(类似的语法,如共享y轴twiny)
ax2 = ax1.twinx()

# 绘制折线图
s = pd.Series(natural_growth, name='自然增长率——')
sns.lineplot(data=s)

# 显示图像
plt.show()
6.最终结果

二、全部代码
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd


# 处理中文乱码为 微软雅黑
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 解决Seaborn中文显示问题,字体为黑体,使用seaborn默认主题
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  # 设置柱状图宽度为 0.4

fig, ax1 = plt.subplots()
# 绘制交错的柱状图(通过ind +- width/2)
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()

# twinx共享x轴(类似的语法,如共享y轴twiny)
ax2 = ax1.twinx()

# 绘制折线图
s = pd.Series(natural_growth, name='自然增长率——')
sns.lineplot(data=s)

# 显示图像
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840981.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号