matplotlib的简单练习

本篇博文请在学习以下两篇博文之后再进行阅读(本文实际上是对以下两篇博文中所讲知识点的简单应用,并简单回顾以下知识点。)

matplotlib简单绘制不同类型的表格_wolfwalker的博客-CSDN博客_matplotlib 表格

matplotlib的简单使用(数据可视化)_wolfwalker的博客-CSDN博客 

目录

任务1:绘制人口统计图 

任务2:绘制经济统计图

第一种形式

第二种形式

第三种形式

第四种形式 

第五种形式


任务1:绘制人口统计图 

1.从 populations.npz 中读取数据

2.提取总人口、男性人口、女性人口、城镇人口、乡村人口等数据,绘制折线图

链接: https://pan.baidu.com/s/1CNlDRT9G8I_ewtoSpTBYAw 提取码: ra1j

简要来说,我们需要绘制如下的图表。

 

import numpy as np
import matplotlib.pyplot as plt
#为了能够使我们的matplotlib正常使用中文,我们需要写下面两行代码,当前博主测试的环境为mac,
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
#Windows的话需要使用以下两句代码
# plt.rcParams["font.family"] = ["sans-serif"]
# plt.rcParams["font.sans-serif"] = ['SimHei']

#将我们的文件放到我们Python文件的同级目录下,然后使用我们下面的代码读取我们population.npz文件中的具体数据。,
data=np.load('populations.npz',allow_pickle=True)
#设置我们的画布大小为30,8,其大小的单位为英寸
fig=plt.figure(figsize=(30,8))
#在我们的画布上创建一行一列的一张图表(也就是整张画布上我们只创建一张图表。)
ax=fig.add_subplot(1,1,1)
#使用切片的代码,从我们已经读取到数据的data数据中获取数据到my_data中,但是我们的数据中最后两行的数据为NAN,只有前面的0-19行有数据,
#此时我们需要数据清洗,将我们最后两行的数据进行删除
my_data=data['data'][0:20,:]
#当然我们也可以使用data['colunms']来查看我们列表中的字段名称是什么

#将我们第一条折线的数据从我们my_data的大数据表中读取出来,如果查看过我们的columns之后,我们知道我们所需要的第一组数据为my_data中的第2列(下标从0开始)的数据
data1=my_data[0:20,1]
#但是当我们查看具体的数据之后,我们发现数据的年份和我们需要的年份是相反的,所以我们需要将取出的数据表首尾倒转
data1=np.fliplr([data1])[0]
#给我们第一组数据用折线图绘制,其标签名为total
ax.plot(data1,label='total')

#以下为第二条折线图的创建,其原理与第一张图类似
data2=my_data[0:20,2]
data2=np.fliplr([data2])[0]
ax.plot(data2,label='man')

#第三张折线图
data3=my_data[0:20,3]
data3=np.fliplr([data3])[0]
ax.plot(data3,label='women')

#第四张折线图
data4=my_data[0:20,4]
data4=np.fliplr([data4])[0]
ax.plot(data4,label='city')

#第五章折线图
data5=my_data[0:20,5]
data5=np.fliplr([data5])[0]
ax.plot(data5,label='urban')

#设置我们图标的xy轴范围
ax.set_ylim(36000,140000)
ax.set_xticks(np.arange(20))

#在我们图标的特定位置打上箭头和注释
ax.annotate('total',xy=(6,128000),xytext=(5,120000),arrowprops=dict(facecolor='b', shrink=0.05))

#在我们图标的最适合的位置放置我们的示例图
ax.legend(loc='best')

#将我们的整张图标的标题命名为“人口统计图”)
ax.set_title('人口统计示例')

#将我们横轴的标签全部替换为具体的年份
ax.set_xticklabels(['1996年','1997年','1998年','1999年','2000年','2001年','2002年','2003年','2004年','2005年','2006年','2007年','2008年','2009年','2010年','2011年','2012年','2013年','2014年','2015年'])
#生成我们的图标
plt.show()

任务2:绘制经济统计图

从 gdp.npz 中读取数据

提取国内生产总值、第一产业增加值、第二产业增加值_当季值、第三产业增加值等数据,绘制折线图

链接: https://pan.baidu.com/s/1CNlDRT9G8I_ewtoSpTBYAw 提取码: ra1j

简要来说,我们需要绘制如下的图表。

第一种形式

 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
data=np.load("gdp.npz",allow_pickle=True)
my_data=data['values']
#设置画布的尺寸为10,,8,单位为英寸
fig=plt.figure(figsize=(10,8))
#创建两行一列的图标,ax1为第一张图标
ax1=fig.add_subplot(2,1,1)

#第一张图
#从我们的my_data的总数据表中分别取出我们第一产业,第二产业,第三产业的数据
first=my_data[:,3]
second=my_data[:,4]
third=my_data[:,5]
#分别绘制我们第一、二、三、产业的折线图,并设置不同的折线类型来使我们的图标有所区别,并给我们的不同的折线打上标签
ax1.plot(first,label='第一产业')
ax1.plot(second,'-.',label='第二产业',)
ax1.plot(third,'--',label='第三产业')
#设置我们y轴的标签
ax1.set_ylabel('生产总值(亿元)')
#设置我们第一张图标的标题
ax1.set_title('2000-2017年各产业季度生产总值折线图')
#将我们的图例显示
ax1.legend(loc='best')


#第二张图
#ax2为我们两行两列的第二张图
ax2=fig.add_subplot(2,1,2)
#分别提取我们不同的行业的数据
farm=my_data[:,6]
industry=my_data[:,7]
architecture=my_data[:,8]
sell=my_data[:,9]
transport=my_data[:,10]
eating=my_data[:,11]
money=my_data[:,12]
house=my_data[:,13]
other=my_data[:,14]
#设置我们纵轴的标签
ax2.set_ylabel('生产总值(亿元)')
#设置我们纵轴的范围
ax2.set_ylim(0,70000)
#分别绘制我们不同产业的折线图,并设置不同的折线类型加以区分并打上标签
ax2.plot(farm,label='农业')
ax2.plot(industry,'-.',label='工业')
ax2.plot(architecture,label='建筑业')
ax2.plot(sell,label='零售业')
ax2.plot(transport,label='运输业')
ax2.plot(eating,label='餐饮业')
ax2.plot(money,label='金融业')
ax2.plot(house,label='房地产')
ax2.plot(other,label='其他')
#打上示例
ax2.legend(loc='best')
#在我们的x轴的特定的位置打上我们的数字,为下面替换为具体的文字做准备
ax2.set_xticks(np.arange(18)*4)

#将我们的a的列表设置为从2000到2017年+第一季度的形式
a=[]
for i in range(2000,2018):
    a.append((str(i)+"年第一季度"))
#为了避免我们的横轴的列表之间的重叠,我们将我们横轴的每个标签都旋转30度。
ax2.set_xticklabels(a,rotation=30)
plt.show()

第二种形式

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
data=np.load("gdp.npz",allow_pickle=True)
my_data=data['values']
fig=plt.figure(figsize=(10,8))
ax1=fig.add_subplot(2,1,1)

#当前的我们的图表中一共有69个数据,我们的点状图需要具体的x轴和y轴,所以我们需要创建一个0-68的数组来作为我们的x轴
s=np.arange(69)

#第一张图
#分别提取第一产业、第二产业、第三产业的数据
first=my_data[:,3]
second=my_data[:,4]
third=my_data[:,5]
#分别绘制第一产业,第二产业,第三产业的点状图,并为我们不同的点状图设置不同的样式来进行区分
ax1.scatter(s,first,label='第一产业',color='r')
ax1.scatter(s,second,label='第二产业',marker='*')
ax1.scatter(s,third,label='第三产业',marker='d')
#给我们的y轴打上标签
ax1.set_ylabel('生产总值(亿元)')
#给我们的图表打上标题
ax1.set_title('2000-2017年各产业季度生产总值折线图')
#给我们的图表创建示例
ax1.legend(loc='best')


#第二张图
#在我们的两行一列的数据表的第二个位置创建我们的第二张图表(ax2)
ax2=fig.add_subplot(2,1,2)
#分别提取出我们不同行业的数据
farm=my_data[:,6]
industry=my_data[:,7]
architecture=my_data[:,8]
sell=my_data[:,9]
transport=my_data[:,10]
eating=my_data[:,11]
money=my_data[:,12]
house=my_data[:,13]
other=my_data[:,14]
#给我们y轴打上标签
ax2.set_ylabel('生产总值(亿元)')
#限制我们y轴的范围
ax2.set_ylim(0,70000)

#给我们不同行业绘制具体的点状图,注意点状图需要具体的坐标,就是说scatter函数会从第一个列表中提取x轴,从第二个列表中提取我们的y轴,然后我们也可以根据自己的喜好来给我们的图表设置不同的样式
ax2.scatter(s,farm,label='农业')
ax2.scatter(s,industry,label='工业',marker='d')
ax2.scatter(s,architecture,label='建筑业',marker='*')
ax2.scatter(s,sell,label='零售业',marker='s')
ax2.scatter(s,transport,label='运输业',marker='h')
ax2.scatter(s,eating,label='餐饮业',marker='p')
ax2.scatter(s,money,label='金融业',marker='>')
ax2.scatter(s,house,label='房地产',marker='<')
ax2.scatter(s,other,label='其他',marker='^')
#给我们图标打上示例
ax2.legend(loc='best')
#给我们图表的x轴的一定位置打上数字(一共有18个数据,然后我们*4来让我们数据标签分散一些)
ax2.set_xticks(np.arange(18)*4)
#创建我们标签列表,使我们的标签中的每一个都是2000年-2017年+第一季度的形式
a=[]
for i in range(2000,2018):
    a.append((str(i)+"年第一季度"))
#为了方式我们的x坐标重叠,我们将我们的坐标旋转30度
ax2.set_xticklabels(a,rotation=30)
#将我们的x轴打上标签
ax2.set_xlabel('年份')
plt.show()

第三种形式

 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
data=np.load("gdp.npz",allow_pickle=True)
my_data=data['values']
x=data['columns']
fig=plt.figure(figsize=(10,8))

#第一张图
#在我们两行两列的第一张图的位置绘制我们的第一张图表
ax1=fig.add_subplot(2,2,1)
#分别提取出我们第一产业,第二产业,第三产业的数据
first=my_data[0,3]
second=my_data[0,4]
third=my_data[0,5]
#将我们具体数据组合成一个列表
all=[first,second,third]
#将我们的具体的横坐标和纵坐标的数据来绘制我们的柱状图
ax1.bar([1,2,3],all,label='第一产业')
#在我们的横坐标的1,2,3的位置打上刻度,为我们下面替换为第几产业做准备
ax1.set_xticks([1,2,3])
#将我们1,2,3的位置替换为具体的第几产业
ax1.set_xticklabels(['第一产业','第二产业','第三产业'])
#给我们的图表打上标题
ax1.set_title('2000年第一季度国民生产总值产业构成分布直方图')
#给我们的图标的y轴打上标签
ax1.set_ylabel('生产总值(亿元)')
#给我们图标的X轴打上标签
ax1.set_xlabel('产业')

#第二张图
#(第二张图的创建方式与第一张图类似,不再解释)
ax2=fig.add_subplot(2,2,2)
first2=my_data[68,3]
second2=my_data[68,4]
third2=my_data[68,5]
all2=[first2,second2,third2]
ax2.bar([1,2,3],all2,label='第一产业')
ax2.set_xticks([1,2,3])
ax2.set_xticklabels(['第一产业','第二产业','第三产业'])
ax2.set_title('2017年第一季度国民生产总值产业构成分布直方图')
ax2.set_ylabel('生产总值(亿元)')
ax2.set_xlabel('产业')

#第三张图
#我们在两行两列的画布的第三张图的位置绘图
ax3=fig.add_subplot(2,2,3)
#获取我们的数据
z=my_data[0,6:]
#提取我们的标签。x为我们的字段名,对x进行切片处理,就可以得到我们所需要的标签
biaoqian=x[6:]
#由于提取出来的标签太长了,我们将对我们的标签进行简短化处理,只取前两个字,但是房地产需要单独判断,取三个字
biaoqian2=[]
for i in biaoqian:
    if i=='房地产业增加值_当季值(亿元)':
        biaoqian2.append(i[0:3])
        continue
    biaoqian2.append(i[0:2])
#给我们的第三张图打上标签
ax3.set_title('2000年第一季度国民生产总值行业构成分布直方图')
#设置一条从0-8的数据作为我们的x轴
b=np.arange(9)
#生成我们的条形图
ax3.barh(b,z)
#给我们的y轴打上0-8的刻度
ax3.set_yticks([0,1,2,3,4,5,6,7,8])
#将我们y轴上的刻度替换为具体的标签名称
ax3.set_yticklabels(biaoqian2)
#分别给我们的xy轴打上标签
ax3.set_xlabel('生产总值(亿元)')
ax3.set_ylabel('行业')

#第四张图
#第四张图与第三张图类似,我们在此处不再做解释
ax4=fig.add_subplot(2,2,4)
z=my_data[68,6:]
biaoqian=x[6:]
biaoqian2=[]
for i in biaoqian:
    if i=='房地产业增加值_当季值(亿元)':
        biaoqian2.append(i[0:3])
        continue
    biaoqian2.append(i[0:2])

b=np.arange(9)
ax4.set_title('2017年第一季度国民生产总值行业构成分布直方图')
ax4.barh(b,z)
ax4.set_yticks([0,1,2,3,4,5,6,7,8])
ax4.set_yticklabels(biaoqian2)
ax4.set_xlabel('生产总值(亿元)')
ax4.set_ylabel('行业')
#因为我们的图标存在一定的重叠情况,所以我们使用下面的代码将我们的图标的位置分开
plt.subplots_adjust(wspace=0.3, hspace=0.3)
plt.show()

第四种形式 

 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
data=np.load("gdp.npz",allow_pickle=True)
my_data=data['values']
x=data['columns']
fig=plt.figure(figsize=(10,8))
ax1=fig.add_subplot(2,2,1)

#第一张图
#分别获取我们第一产业,第二产业,第三产业的数据
first=my_data[0,3]
second=my_data[0,4]
third=my_data[0,5]
#将我们具体的数据组合为一个列表
all=[first,second,third]
#创建我们的饼图,all为数据,并用labels为我们的不同的饼块打上标签,autopct指的是给我们的饼图的数据保留一维小数的百分数,explode能够设置我们不同的饼块之间的距离
ax1.pie(all,labels=['第一产业','第二产业','第三产业'],autopct='%1.1f%%',explode=(0.03,0.03,0.03))
#为我们的饼图打上标签
ax1.set_title('2000年第一季度国民生产总值产业构成分布饼图')



#第二张图
#第二张图与第一张图类似,此处不再做出解释
ax2=fig.add_subplot(2,2,2)
first2=my_data[68,3]
second2=my_data[68,4]
third2=my_data[68,5]
all2=[first2,second2,third2]
ax2.pie(all2,labels=['第一产业','第二产业','第三产业'],autopct='%1.1f%%',explode=(0.03,0.03,0.03))
ax2.set_title('2017年第一季度国民生产总值产业构成分布饼图')

#第三张图
ax3=fig.add_subplot(2,2,3)
z=my_data[0,6:]
#创建我们具体的标签列表
biaoqian=x[6:]
biaoqian2=[]
for i in biaoqian:
    if i=='房地产业增加值_当季值(亿元)':
        biaoqian2.append(i[0:3])
        continue
    biaoqian2.append(i[0:2])
ax3.set_title('2000年第一季度国民生产总值行业构成分布饼图')
b=np.arange(9)
#创建我们的饼图
ax3.pie(z,labels=biaoqian2,autopct='%1.1f%%',explode=(0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01))

#第四张图
ax4=fig.add_subplot(2,2,4)
z=my_data[68,6:]
biaoqian=x[6:]
biaoqian2=[]
for i in biaoqian:
    if i=='房地产业增加值_当季值(亿元)':
        biaoqian2.append(i[0:3])
        continue
    biaoqian2.append(i[0:2])

b=np.arange(9)
ax4.set_title('2017年第一季度国民生产总值行业构成分布饼图')
ax4.pie(z,labels=biaoqian2,autopct='%1.1f%%',explode=(0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01))
#将我们的图标的位置分开
plt.subplots_adjust(wspace=0.3, hspace=0.3)
plt.show()

第五种形式

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
data=np.load("gdp.npz",allow_pickle=True)
my_data=data['values']
x=data['columns']
fig=plt.figure(figsize=(8,8))
ax1=fig.add_subplot(2,1,1)

#第一张图
first=my_data[:,3]
second=my_data[:,4]
third=my_data[:,5]
#创建我们的箱线图
ax1.boxplot((first,second,third),labels=['第一产业','第二产业','第三产业'])
#给我们的第一张图表打上标签
ax1.set_title('2000-2017年第一季度国民生产总值产业构成分布箱线图')

#第二张图
ax2=fig.add_subplot(2,1,2)
#分别获取各个产业的数据
z1=my_data[:,6]
z2=my_data[:,7]
z3=my_data[:,8]
z4=my_data[:,9]
z5=my_data[:,10]
z6=my_data[:,11]
z7=my_data[:,12]
z8=my_data[:,13]
z9=my_data[:,14]
#制作标签列表
biaoqian=x[6:]
biaoqian2=[]
for i in biaoqian:
    if i=='房地产业增加值_当季值(亿元)':
        biaoqian2.append(i[0:3])
        continue
    biaoqian2.append(i[0:2])
ax2.set_title('2000-2017年第一季度国民生产总值行业构成分布箱线图')
#创建我们的箱线图
ax2.boxplot((z1,z2,z3,z4,z5,z6,z7,z8,z9),labels=biaoqian2)
plt.show()


  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值