使用numpy+matplotlib绘制20年内人口数据图

使用numpy+matplotlib绘制20年内人口数据图

最近,做了一个选修课的作业。内容是给出1996-2015年间的人口数据,使用numpy读取数据,并用pyplot对其绘制散点图和折线图。第一次用pyplot,所以新学了一下。记录一下思路。
首先,提供给我们的是一个npz文件。因为我第一次遇见,所以尝试了一下直接读取npz。

#导入需要的库
import numpy as np
import matplotlib.pyplot as plt

#读取数据
data = np.load('/populations.npz')
print(data)

结果输出为
<numpy.lib.npyio.NpzFile object at 0x000001A8DF4CF9B0>
网上搜索了之后,发现需要先解压成npy文件。得到两个文件分别为data.npy和feature_names.npy。

#读取数据
data = np.load("/data.npy")
features = np.load("/feature_names.npy")
print(data)
print(features)

输出为(原始数据年份是含有汉字‘年’的,下图是已经删除汉字之后的数据):
 可以看出是一个二维数组,每个内层数组有六个值
特征名称可见,六个特征分别为上面feature_names的值。
成功读取数据之后,开始进行绘图前的准备。

#创建颜色数组(为了在一个窗口绘制多个图形,便于区分)
col = ['r','y','g','b','purple']

#删除日期里的汉字
for temp in range(19,-1,-1):
    data[temp][0] = data[temp][0][:-1]

原始数据是把每一年的五个人口数据存在同一个数组,不方便显示,我们将每一个人口特征20年的数据存到同一个数组中。

#创建x轴
x = []
for j in range(19,-1,-1):
    x.append(data[j][0])

#总人口
y1 = []
for j in range(19,-1,-1):
    y1.append(data[j][1])

#男性
y2 = []
for j in range(19,-1,-1):
    y2.append(data[j][2])
    
#女性
y3 = []
for j in range(19,-1,-1):
    y3.append(data[j][3])

#城镇人口
y4 = []
for j in range(19,-1,-1):
    y4.append(data[j][4])

#农村人口
y5 = []
for j in range(19,-1,-1):
    y5.append(data[j][5])
    
y = [y1,y2,y3,y4,y5]

然后就可以开始绘图了

#创建一个窗口
fig1 = plt.figure(num=1, figsize=(15, 8),dpi=80)

#创建散点图
for i in range(0,5):
    fig1 = plt.scatter(x,y[i],c = col[i],label = '总人口')
plt.show()

#创建一个窗口      
fig2 = plt.figure(num=1, figsize=(15, 8),dpi=80)

#创建折线图
for i in range(0,5):
    plt.plot(x,y[i],marker = 'x' ,mec = col[i])

散点图

折线图之前尝试过另一种没有把每个特征20年的数据放到同一个数组的方法,也可行,但是感觉不友好。贴上散点图的代码。

#创建一个窗口
fig1 = plt.figure(num=1, figsize=(15, 8),dpi=80)

#创建散点图
 for i in range(1,6):
     for j in range(19,-1,-1):
         fig1 = plt.scatter(data[j][0],data[j][i],c = col[i-1],label = '总人口')
 plt.show()
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值