【Python】实训3:Matplotlib数据可视化(绘制散点图、折线图、直方图、饼状图、箱线图)

题目来源:
《Python数据分析与应用》第3章 Matplotlib数据可视化基础
【 黄红梅、张良均主编 中国工信出版集团和人民邮电出版社】

本博客题目内容来自:QQ组合键“ctrl+alt+o”截取书本PDF文件获取的

数据集下载链接(下载后找到第3章->实训数据)

实训1分析 1996~ 2015年人口数据特征间的关系

1.训练要点
(1)掌握pyplot基础语法。
(2)掌握子图的绘制方法。
(3)掌握散点图、折线图的绘制方法。
2.需求说明
人口数据总共拥有6个特征,分别为年末总人口、男性人口、女性人口、城镇人口、乡村人口和年份。查看各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例、城乡人口变化的方向。
3.实现步骤
(1)使用NumPy库读取人口数据。
(2)创建画布,并添加子图。
(3)在两个子图.上分别绘制散点图和折线图。
(4)保存,显示图片。
(5)分析未来人口变化趋势。

1)实验源代码 :
①数据分析:
②数据获取与准备阶段:
③绘制散点图子图:
④绘制折线图子图

#实训1 分析1996~2015年人口数据特征间的关系
import numpy as np
import matplotlib.pyplot as plt

data=np.load('./任务和实训数据/populations.npz')
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
name=data['feature_names']#提取其中的feature_names数组,视为数据的标签
values=data['data']#提取其中的data数组,视为数据的存在位置
p=plt.figure(figsize=(10,10))#确定画布大小

#散点图
#在数据集中年份是从大到小的,所以在读取的时候应该倒序读取
p1=p.add_subplot(2,1,1)
plt.scatter(values[-3::-1,0],values[-3::-1,1],marker='8',color='red')
plt.scatter(values[-3::-1,0],values[-3::-1,2],marker='o',color='black')
plt.scatter(values[-3::-1,0],values[-3::-1,3],marker='D',color='green')
plt.scatter(values[-3::-1,0],values[-3::-1,4],marker='h',color='blue')
plt.scatter(values[-3::-1,0],values[-3::-1,5],marker='.',color='yellow')
plt.xticks(values[-3::-1,0])
plt.xlabel('时间')
plt.ylabel('总人口')
plt.title('1996~2015年末人口分布特征散点图')
plt.legend(['总人口','男性','女性','城镇','乡村'])

#折线图
p2=p.add_subplot(2,1,2)
plt.plot(values[-3::-1,0],values[-3::-1,1],'r-')
plt.plot(values[-3::-1,0],values[-3::-1,2],'k-')
plt.plot(values[-3::-1,0],values[-3::-1,3],'g-.')
plt.plot(values[-3::-1,0],values[-3::-1,4],'b-')
plt.plot(values[-3::-1,0],values[-3::-1,5],'y-')
plt.xticks(values[0:20,0])
plt.xlabel('时间')
plt.ylabel('总人口')
plt.title('1996~2015年末人口分布特征折线图')
plt.legend(['总人口','男性','女性','城镇','乡村'])
plt.savefig('./pictures/1996~2015年末人口分布特征散点图和折线图.png')#保存图片
plt.show()

2) 编译代码并执行
①数据分析
在这里插入图片描述
②绘制散点图和折线图
在这里插入图片描述

3)结果分析与小结
1996~2015年,城镇人口持续上升,乡村人口持续下降;男性人口与女性人口呈增长态势,增速平缓。

实训2分析1996~2015年人口数据各个特征的分布与分散状况

1.训练要点
(1)掌握直方图绘制。
(2)掌握饼图绘制。
(3)掌握箱线图绘制。
2.需求说明
通过绘制各年份男女人口数目及城乡人口数目的直方图,男女人口比例及城乡人口比例的饼图可以发现人口结构的变化。而绘制每个特征的箱线图则可以发现不同特征增长或者减少的速率是否变得缓慢。
3.实现步骤
(1)创建3幅画布并添加对应数目的子图。
(2)在每一幅子图上绘制对应的图形。
(3)保存和显示图形。
(4)根据图形,分析我国人口结构变化情况以及变化速率的增减状况。

1)实验源代码 :
①导入数据与准备阶段
②绘制直方图
③绘制饼状图
④绘制箱线图

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']='SimHei' #中文显示
plt.rcParams['axes.unicode_minus']=False #特殊符号显示(这里是为了显示负号)
data=np.load('./任务和实训数据/populations.npz')#读取数据
values = data['data'][-3::-1,:] #从倒数第三行开始倒序获取数据
label=data['feature_names']

#直方图画布:
p1 = plt.figure(figsize=(15,15)) #设置画布
p1.add_subplot(2,1,1)
plt.bar(range(4),values[0,2:6],width=0.6)
plt.xlabel('类别'),plt.ylabel('人口数(万人)')
plt.xticks(range(4),label[2:6])
plt.title('1996年人口数据特征间的关系直方图')
p1.add_subplot(2,1,2)
plt.bar(range(4),values[-1,2:6],width=0.6)
plt.xlabel('类别'),plt.ylabel('人口数(万人)')
plt.xticks(range(4),label[2:6])
plt.title('2015年人口数据特征间的关系直方图')
plt.savefig('./pictures/1996与2015年人口数据特征间关系直方图.png')
plt.show()

#饼状图画布
p2=plt.figure(figsize=(15,15)) #设置画布
explode=np.linspace(0.01,0.01,4)
p2.add_subplot(2,1,1)
plt.title('1996年人口数据特征间的关系饼图')
plt.pie(values[0,2:6],explode=explode,labels=label[2:6],autopct='%1.1f%%')
p2.add_subplot(2,1,2)
plt.title('2005年人口数据特征间的关系饼图')
plt.pie(values[-1,2:6],explode=explode,labels=label[2:6],autopct='%1.1f%%')
plt.savefig('./pictures/1996与2015年人口数据特征间关系饼状图.png')
plt.show()

#箱线图画布
p2=plt.figure(figsize=(8,8)) #设置画布
plt.title('1996-2015年人口数据特征间的关系箱线图')
gdp=(list(values[:,2]),list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.boxplot(gdp,notch=True,labels=label[2:6],meanline=True)
plt.savefig('./pictures/1996~2015年人口数据特征间关系箱线图.png')
plt.show()


2) 编译代码并执行
①直方图显示结果:
在这里插入图片描述
②饼状图显示结果:
在这里插入图片描述
③箱线图绘制结果:
在这里插入图片描述
3)结果分析与小结
通过分析上述绘制图形,可以得知,1996~2015年城镇人口所占比例明显上升,乡村人口明显减少,该地区城市化率持续上涨。男女人口比例变化不大,但仍然呈现男多女少的局面。


实验报告中内容草草整理后发布的文章,希望对你有帮助!

发布了86 篇原创文章 · 获赞 83 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41856733/article/details/103836804