[Python]Numpy读取npz文件并且使用matplotlib绘制散点图和折线图
2020-02-17 04:29
399 查看
分析1996- -2015年人口数据特征间的关系以及各个特征的分布与分散状况
需求说明
人口数据总共拥有6个特征,分别为年末总人口、男性人口、女性人口、城镇人口、乡村人口和年份。在看各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例、城乡人口变化的方向。通过绘制各年份男女人口数目及城乡人口数目的柱状图,男女人口比例及城乡人口比例的饼图可以发现人口结构的变化。而绘制每个特征的箱线图则可以发现不同特征增长成者减少的速率是否变得级慢。
训练要点
掌握pyplot基础语法,掌握子图的绘制方法。
掌握散点图、折线图、柱状图、饼图、箱线图的绘制方法。
具体实现
打开npz文件
因为npz是压缩的格式,里面会包含npy格式的文件,不可直接访问npz,numpy提供了方法可以访问
import numpy as np import matplotlib.pyplot as plt # allow_pickle = True后才可打开,因为numpy版本过高 Alldata = np.load('populations.npz',allow_pickle = True)
Run
然后在终端上输入
Alldata.files
即可看见此npz文件下的所有npy文件
此项目里包含“data”和“feature_names”两个文件
完整代码
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei'# 设置中文显示 plt.rcParams['axes.unicode_minus'] = False # 读取数据文件 Alldata = np.load('populations.npz',allow_pickle = True)# allow_pickle = True后才可打开,因为numpy版本过高 data = Alldata['data'] features = Alldata['feature_names'] # 颜色数组,用于区分 col = ['y','r','b','g','purple'] ex=[0.01,0.01]#饼图:设定各项距离圆心n个半径 label1=['男性','女性']# 标签 label2=['城镇','乡村']# 标签 labelAll=['年末总人口','男性人口','女性人口','城镇人口','乡村人口']# 标签 # 删除日期里的汉字,使图片看起来简洁 for i in range(19,-1,-1): data[i][0] = data[i][0][:-1] # 创建x轴,即年份 x = [] for i in range(19,-1,-1): x.append(data[i][0]) # 总人口 y1 = [] for i in range(19,-1,-1): y1.append(data[i][1]) # 男性人口 y2 = [] for i in range(19,-1,-1): y2.append(data[i][2]) # 女性人口 y3 = [] for i in range(19,-1,-1): y3.append(data[i][3]) # 城镇人口 y4 = [] for i in range(19,-1,-1): y4.append(data[i][4]) # 农村人口 y5 = [] for i in range(19,-1,-1): y5.append(data[i][5]) y = [y1,y2,y3,y4,y5] # 设置画布1:散点图和折线图a p1 = plt.figure(figsize=(12,12)) # 子图1 a1 = p1.add_subplot(2,1,1) for i in range(0,5): plt.scatter(x,y[i],c = col[i]) plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.title('散点图') # 子图1题目 plt.legend(['年末总人口','男性人口','女性人口','城镇人口','乡村人口'])# 添加图例 # 子图2 a2 = p1.add_subplot(2,1,2) for i in range(0,5): plt.plot(x,y[i],marker = 'x',mec = col[i]) plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.title('折线图') # 子图2题目 plt.legend(['年末总人口','男性人口','女性人口','城镇人口','乡村人口'])# 添加图例 plt.savefig('散点及折线图.png')# 保存图片 # 设置画布2:直方图b p2 = plt.figure(figsize=(24,12)) # 子图1 b1 = p2.add_subplot(2,2,1) plt.bar(range(20),y2,width=0.5)# 绘制直方图 plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.xticks(range(20),x)# x轴刻度以及取值 plt.title('男性人口数量直方图') # 子图题目 # 子图2 b2 = p2.add_subplot(2,2,2) plt.bar(range(20),y3,width=0.5)# 绘制直方图 plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.xticks(range(20),x)# x轴刻度以及取值 plt.title('女性人口数量直方图') # 子图题目 # 子图3 b3 = p2.add_subplot(2,2,3) plt.bar(range(20),y4,width=0.5)# 绘制直方图 plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.xticks(range(20),x)# x轴刻度以及取值 plt.title('城镇人口数量直方图') # 子图题目 # 子图4 b4 = p2.add_subplot(2,2,4) plt.bar(range(20),y5,width=0.5)# 绘制直方图 plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.xticks(range(20),x)# x轴刻度以及取值 plt.title('乡村人口数量直方图') # 子图题目 plt.savefig('各类人口直方图.png') # 设置画布3:饼图c p3 = plt.figure(figsize=(8,8)) # 子图1 c1 = p3.add_subplot(2,2,1) plt.pie(data[19,2:4],explode=ex,labels=label1,colors=['pink','crimson'],autopct='%1.1f%%') plt.title('1996年男、女人口数饼图') # 子图2 c2 = p3.add_subplot(2,2,2) plt.pie(data[0,2:4],explode=ex,labels=label1,colors=['PeachPuff','skyblue'],autopct='%1.1f%%') plt.title('2015年男、女人口数饼图') # 子图3 c3 = p3.add_subplot(2,2,3) plt.pie(data[19,4:6],explode=ex,labels=label2,colors=['pink','crimson'],autopct='%1.1f%%') plt.title('1996年城、乡人口数饼图') # 子图4 c4 = p3.add_subplot(2,2,4) plt.pie(data[0,4:6],explode=ex,labels=label2,colors=['PeachPuff','skyblue'],autopct='%1.1f%%') plt.title('2015年城、乡人口数饼图') plt.savefig('1996、2015年各类人口饼图.png') # 设置画布4:箱线图d p4 = plt.figure(figsize=(8,8)) plt.boxplot(data[0:20,1:6],notch=True,labels=labelAll,meanline=True) plt.xlabel('年份') # x轴标签 plt.ylabel('人口数量(万人)') # y轴标签 plt.title('1996~2015年各特征人口箱线图') # 箱线图题目 plt.savefig('箱线图.png') plt.show()# 显示在终端上
最终结果
散点图和折线图
直方图:
饼图
箱线图
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- python中的lambda函数用法
- ubuntu18.04中sudo python路径修改
- 自学python之Django遇到的坑(一)
- 利用极简入门级Python代码实现任意区域OCR工具,文本显示形式可控
- 用stanfordcorenlp在python下的评论抽取和分析
- python append 和 extend 的区别
- python3中的 __new__() 与 __init__()
- python函数修饰器
- cenos上面python3及mysql的安装
- 《Python3程序开发指南(第二版)》例题之多线程文件查找关键词
- python导入模块
- python实现用户好友推荐
- python基于item-item filtering实现话题推荐
- 用python爬取高考网历年高考分数线将数据放入MySQL并绘制图表
- 软件测试基础+测试开发+python+测试工具免费领取
- python自学中的我
- ZZULI 1015: 计算时间间隔 Python
- python起步——可变对象和不可变对象
- Gvim —— win 7 下 vim 环境配置 及python开发常用设置
- 使用python脚本提取OC中写死的字符串方便国际化