利用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']
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.最终结果
; 二、全部代码
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/
转载文章受原作者版权保护。转载请注明原作者出处!