Author:龙箬
数据科学与大数据技术专业
用数据改变世界!
优快云@weixin_43975035
“我可以怀疑一切,但我却不能怀疑我正在怀疑。”
Matplotlib数据可视化基础
绘图基础语法与常用参数
pyplot基础语法
pyplot中的基础绘图语法:
import numpy as np
import matplotlib.pyplot as plt
# %matplotlib inline表示在行中显示图片,在命令行运行报错
data=np.arange(0,1.1,0.01)
plt.title('lines')#添加标题
plt.xlabel('x')#添加x轴名称
plt.ylabel('y')#添加y轴名称
plt.xlim((0,1))#确定x轴范围
plt.ylim((0,1))#确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1])#规定x轴刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1])#q确定y轴刻度
plt.plot(data,data**2)#添加y=x^2曲线
plt.plot(data,data**4)#添加y=x^4曲线
plt.legend(['y=x^2','y=x^4'])
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\y=x^2及y=x^4.jpg')
plt.show()
包含子图绘制的基础语法:
rad=np.arange(0,np.pi*2,0.01)
#第一幅子图
p1=plt.figure(figsize=(8,6),dpi=80)#确定画布大小
ax1=p1.add_subplot(2,1,1)#创建一个2行1列的子图,并开始绘制第一幅
plt.title('lines')#添加标题
plt.xlabel('x')#添加x轴名称
plt.ylabel('y')#添加y轴名称
plt.xlim((0,1))#确定x轴范围
plt.ylim((0,1))#确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1])#规定x轴刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1])#确定y轴刻度
plt.plot(rad,rad**2)#添加y=x^2曲线
plt.plot(rad,rad**4)#添加y=x^4曲线
plt.legend(['y=x^2','y=x^4'])
#第二幅子图
ax2=p1.add_subplot(2,1,2)#开始绘制第二幅
plt.title('sin/cos')#添加标题
plt.xlabel('rad')#添加x轴名称
plt.ylabel('value')#添加y轴名称
plt.xlim((0,np.pi*2))#确定x轴范围
plt.ylim((-1,1))#确定y轴范围
plt.xticks([0,np.pi/2,np.pi,np.pi*1.5,np.pi*2])#规定x轴刻度
plt.yticks([-1,-0.5,0,0.5,1])#确定y轴刻度
plt.plot(rad,np.sin(rad))#添加sin曲线
plt.plot(rad,np.cos(rad))#添加cos曲线
plt.legend(['sin','cos'])
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\sin和cos.png')
plt.show()
设置pyplot的动态rc参数
调节线条的rc参数:
#原图
x=np.linspace(0,4*np.pi)#生成x轴数据
y=np.sin(x)#生成y轴数据
plt.plot(x,y,label="$sin(x)$")#绘制sin曲线图
plt.title('sin')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\默认sin曲线.png')
plt.show()
#修改rc参数后的图
plt.rcParams['lines.linestyle']='-.'
plt.rcParams['lines.linewidth']=3
plt.plot(x,y,label="$sin(x)$")#绘制三角函数
plt.title('sin')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\修改rc参数后sinqu曲线.png')
plt.show()
调节字体的rc参数:
#无法显示中文标题
plt.plot(x,y,label="$sin(x)$")#绘制三角函数
plt.title('sin曲线')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\无法显示中文标题的sin曲线.png')
plt.show()
#设置rc参数显示中文标题
#设置字体为SimHei显示中文
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False#设置正常显示符号
plt.plot(x,y,label="$sin(x)$")#绘制三角函数
plt.title('sin曲线')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\显示中文标题的sin曲线.png')
plt.show()
分析特征间的关系
绘制散点图
绘制2000-2017年各产业季度国民生产总值散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的colums数组,视为数据的标签
values=data['values']#提取其中的values数组,视为数据的存在位置
plt.figure(figsize=(8,7))#设置画布
plt.scatter(values[:,0],values[:,2],marker='o')#绘制散点图
plt.xlabel('年份');
plt.ylabel('生产总值(亿元)');
plt.ylim((0,225000))#设置y轴的范围
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017各季度国民生产总值散点图.png')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各产业季度国民生产总值散点图.png')
plt.show()
绘制2000-2017年间各产业各季度国民生产总值散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,7))#设置画布
#绘制散点图1
plt.scatter(values[:,0],values[:,3],marker='o',c='red')
#绘制散点图2
plt.scatter(values[:,0],values[:,4],marker='o',c='blue')
#绘制散点图3
plt.scatter(values[:,0],values[:,5],marker='o',c='yellow')
plt.xlabel('年份')#添加纵轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业各季度国民生产总值散点图')#添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])#添加图例
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各产业季度国民生产总值散点图.png')
plt.show()
绘制折线图
绘制2000-2017年各季度国民生产总值折线图:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,7))#设置画布
plt.plot(values[:,0],values[:,2],color='r',linestyle='--')
plt.xlabel('年份')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加y轴名称
plt.ylim((0,225000))
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各季度国民生产总值折线图')#添加图表标题
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各季度国民生产总值折线图.png')
plt.show()
绘制点线图:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,7))#设置画布
plt.plot(values[:,0],values[:,2],color='r',linestyle='--',marker='o')#绘制点线图
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
plt.ylim((0,225000))
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各季度国民生产总值点线图')#添加图表标题
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各季度国民生产总值点线图.jpg')
plt.show()
绘制2000-2017年各产业各季度国民生产总值折线散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,7))#设置画布
plt.plot(values[:,0],values[:,3],'bs-',
values[:,0],values[:,4],'ro-.',
values[:,0],values[:,5],'gH--')#绘制折线图
plt.xlabel('年份')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业各季度国民生产总值折线图')#添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各产业各季度国民生产总值折线散点图.jpg')
plt.show()
任务实现
绘制2000-2017年各产业与行业的国民生产总值散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的values数组,视为数据的存在位置
p=plt.figure(figsize=(12,12))#设置画布
#子图1
ax1=p.add_subplot(2,1,1)
plt.scatter(values[:,0],values[:,3],marker='o',c='r')#绘制散点图
plt.scatter(values[:,0],values[:,4],marker='D',c='b')#绘制散点图
plt.scatter(values[:,0],values[:,5],marker='v',c='y')#绘制散点图
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.title('2000-2017年各产业与行业各季度国民生产总值散点图')#添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])#添加图例
#子图2
ax2=p.add_subplot(2,1,2)
plt.scatter(values[:,0],values[:,6],marker='o',c='r')#绘制散点图
plt.scatter(values[:,0],values[:,7],marker='D',c='b')#绘制散点图
plt.scatter(values[:,0],values[:,8],marker='v',c='y')#绘制散点图
plt.scatter(values[:,0],values[:,9],marker='8',c='g')#绘制散点图
plt.scatter(values[:,0],values[:,10],marker='p',c='c')#绘制散点图
plt.scatter(values[:,0],values[:,11],marker='+',c='m')#绘制散点图
plt.scatter(values[:,0],values[:,12],marker='s',c='k')#绘制散点图
plt.scatter(values[:,0],values[:,13],marker='*',c='purple')#绘制散点图
plt.scatter(values[:,0],values[:,14],marker='d',c='brown')#绘制散点图
plt.legend(['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他'])
plt.xlabel('年份')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各产业与行业各季度国民生产总值散点子图.jpg')
plt.show()
绘制2000-2017年各产业与行业的国民生产总值折线图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的values数组,视为数据的存在位置
p=plt.figure(figsize=(12,12))#设置画布
#子图1
ax3=p.add_subplot(2,1,1)
plt.plot(values[:,0],values[:,3],'b-',
values[:,0],values[:,4],'r-.',
values[:,0],values[:,5],'g--')#绘制折线图
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.title('2000-2017年各产业与行业各季度国民生产总值折线图')#添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])#添加图例
#子图2
ax2=p.add_subplot(2,1,2)
plt.plot(values[:,0],values[:,6],'r-',#绘制折线图
values[:,0],values[:,7],'b-.',#绘制折线图
values[:,0],values[:,8],'y--',#绘制折线图
values[:,0],values[:,9],'g:',#绘制折线图
values[:,0],values[:,10],'c-',#绘制折线图
values[:,0],values[:,11],'m-.',#绘制折线图
values[:,0],values[:,12],'k--',#绘制折线图
values[:,0],values[:,13],'r:',#绘制折线图
values[:,0],values[:,14],'b-')#绘制折线图
plt.legend(['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他'])
plt.xlabel('年份')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017各产业与行业各季度国民生产总值折线子图.jpg')
plt.show()
分析特征内部数据分布与分散状况
绘制直方图
绘制2017年第一季度各产业国民生产总值直方图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的valus数组,视为数据的存在位置
label=['第一产业','第二产业','第三产业']#刻度标签
plt.figure(figsize=(6,5))#设置画布
plt.bar(range(3),values[-1,3:6],width=0.5)#绘制直方图
plt.xlabel('产业')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加y轴名称
plt.xticks(range(3),label)
plt.title('2017年第一季度各产业国民生产总值直方图')#添加图表标题
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2017年第一季度各产业国民生产总值直方图.jpg')
plt.show()
绘制饼图
绘制2017年第一季度各产业国民生产总值饼图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
plt.figure(figsize=(6,6))#将画布设定为正方形,则绘制的饼图是正圆
values=data['values']#提取其中的valus数组,视为数据的存在位置
label=['第一产业','第二产业','第三产业']#定义饼图的标签,标签是列表
explode=[0.01,0.01,0.01]#设定各项距离圆心n个半径
plt.pie(values[-1,3:6],explode=explode,labels=label,autopct='%1.1f%%')#绘制饼图
plt.title('2017年第一季度各产业国民生产总值饼图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2017年第一季度各产业国民生产总值饼图.jpg')
plt.show()
绘制箱线图
绘制2017年第一季度各产业国民生产总值箱线图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
plt.figure(figsize=(8,6))
values=data['values']#提取其中的valus数组,视为数据的存在位置
label=['第一产业','第二产业','第三产业']#定义饼图的标签,标签是列表
gdp=(list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.boxplot(gdp,notch=True,labels=label,meanline=True)
plt.title('2000-2017年各产业国民生产总值箱线图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\2000-2017年各产业国民生产总值箱线图.jpg')
plt.show()
任务实现
绘制国民生产总值构成分布直方图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的valus数组,视为数据的存在位置b
label1=['第一产业','第二产业','第三产业']#刻度标签1
label2=['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他']#刻度标签2
p=plt.figure(figsize=(12,12))
#子图1
ax1=p.add_subplot(2,2,1)
plt.bar(range(3),values[0,3:6],width=0.5)#绘制直方图
plt.xlabel('产业')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(3),label1)
plt.title('2000年第一季度国民生产总值产业构成分布直方图')
#子图2
ax2=p.add_subplot(2,2,2)
plt.bar(range(3),values[-1,3:6],width=0.5)#绘制直方图
plt.xlabel('产业')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(3),label1)
plt.title('2017年第一季度国民生产总值产业构成分布直方图')
#子图3
ax3=p.add_subplot(2,2,3)
plt.bar(range(9),values[0,6:],width=0.5)#绘制直方图
plt.xlabel('行业')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(9),label2)
plt.title('2000年第一季度国民生产总值产业构成分布直方图')
#子图4
ax4=p.add_subplot(2,2,4)
plt.bar(range(9),values[-1,6:],width=0.5)#绘制直方图
plt.xlabel('行业')#添加横轴标签
plt.ylabel('生产总值(亿元)')#添加纵轴标签
plt.xticks(range(9),label2)
plt.title('2017年第一季度国民生产总值产业构成分布直方图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\国民生产总值构成分布直方图.jpg')
plt.show()
绘制国民生产总值构成分布饼图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的valus数组,视为数据的存在位置b
label1=['第一产业','第二产业','第三产业']#刻度标签1
label2=['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他']#刻度标签2
explode1=[0.01,0.01,0.01]
explode2=[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]
p=plt.figure(figsize=(12,12))
#子图1
ax1=p.add_subplot(2,2,1)
plt.pie(values[0,3:6],explode=explode1,labels=label1,autopct='%1.1f%%')#绘制饼图
plt.title('2000年第一季度国民生产总值产业构成分布饼图')
#子图2
ax2=p.add_subplot(2,2,2)
plt.pie(values[-1,3:6],explode=explode1,labels=label1,autopct='%1.1f%%')#绘制饼图
plt.title('2017年第一季度国民生产总值产业构成分布饼图')#添加图表标题
#子图3
ax3=p.add_subplot(2,2,3)
plt.pie(values[0,6:],explode=explode2,labels=label2,autopct='%1.1f%%')#绘制饼图
plt.title('2000年第一季度国民生产总值行业构成分布饼图')#添加图表标题
#子图4
ax4=p.add_subplot(2,2,4)
plt.pie(values[-1,6:],explode=explode2,labels=label2,autopct='%1.1f%%')#绘制饼图
plt.title('2017年第一季度国民生产总值行业构成分布饼图')#添加图表标题
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\国民生产总值构成分布饼图.jpg')
plt.show()
绘制国民生产总值分散情况箱线图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\国民经济核算季度数据.npz',allow_pickle=True)
name=data['columns']#提取其中的columns数组,视为数据的标签
values=data['values']#提取其中的valus数组,视为数据的存在位置b
label1=['第一产业','第二产业','第三产业']#刻度标签1
label2=['农业','工业','建筑','批发','交通','餐饮','金融','房地产','其他']#刻度标签2
gdp1=(list(values[:,3]),list(values[:,4]),list(values[:,5]))
gdp2=([list(values[:,i])for i in range(6,15)])
p=plt.figure(figsize=(8,8))
#子图1
ax1=p.add_subplot(2,1,1)
#绘制箱线图
plt.boxplot(gdp1,notch=True,labels=label1,meanline=True)
plt.title('2000-2017年各产业国民生产总值箱线图')
plt.ylabel('生产总值(亿元)')#添加y轴名称
#子图1
ax2=p.add_subplot(2,1,2)
#绘制箱线图
plt.boxplot(gdp2,notch=True,labels=label2,meanline=True)
plt.title('2000-2017年各行业国民生产总值箱线图')
plt.ylabel('生产总值(亿元)')#添加y轴名称
#保存并显示图形
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\国民生产总值构成分布箱线图.jpg')
plt.show()
实训及操作
分析1996~2015年人口数据特征间的关系
import numpy as np
import matplotlib.pyplot as plt
#实训1 分析1996~2015年人口数据特征间的关系
#使用numpy库读取人口数据
data=np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\populations.npz',allow_pickle=True)
print(data.files)#查看文件中的数组
print(data['data'])
print(data['feature_names'])
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
name=data['feature_names']#提取其中的feature_names数组,视为数据的标签
values=data['data']#提取其中的data数组,视为数据的存在位置
p1=plt.figure(figsize=(12,12))#确定画布大小
pip1=p1.add_subplot(2,1,1)#创建一个两行一列的子图并开始绘制
#在子图上绘制散点图
plt.scatter(values[0:20,0],values[0:20,1],marker='8',color='red')
plt.ylabel('总人口(万人)')
plt.legend('年末')
plt.title('1996~2015年末与各类人口散点图')
pip2=p1.add_subplot(2,1,2)#绘制子图2
plt.scatter(values[0:20,0],values[0:20,2],marker='o',color='yellow')
plt.scatter(values[0:20,0],values[0:20,3],marker='D',color='green')
plt.scatter(values[0:20,0],values[0:20,4],marker='p',color='blue')
plt.scatter(values[0:20,0],values[0:20,5],marker='s',color='purple')
plt.xlabel('时间')
plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.legend(['男性','女性','城镇','乡村'])
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\1996-2015人口数据特征分布散点图.jpg')
#在子图上绘制折线图
p2=plt.figure(figsize=(12,12))
p1=p2.add_subplot(2,1,1)
plt.plot(values[0:20,0],values[0:20,1],color='r',linestyle='--',marker='8')
plt.ylabel('总人口(万人)')
plt.xticks(range(0,20,1),values[range(0,20,1),0],rotation=45)#rotation设置倾斜度
plt.legend('年末')
plt.title('1996~2015年末总与各类人口折线图')
p2=p2.add_subplot(2,1,2)
plt.plot(values[0:20,0],values[0:20,2],'y-')
plt.plot(values[0:20,0],values[0:20,3],'g-.')
plt.plot(values[0:20,0],values[0:20,4],'b-')
plt.plot(values[0:20,0],values[0:20,5],'p-')
plt.xlabel('时间')
plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.legend(['男性','女性','城镇','乡村'])
#保存并显示图形
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\1996-2015人口数据特征分布折线图.jpg')
plt.show()
分析1996~2015年人口数据各个特征的分布与分散状况
import numpy as np
import matplotlib.pyplot as plt
data = np.load('C:\\Users\\lenovo\\Desktop\\数据分析\\populations.npz', allow_pickle=True) # 读入数据
values = data['data'] # 提取其中的data数组,视为数据的存在位置
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
label1 = ['男性', '女性'] # 标签
label2 = ['城镇', '乡村']
ex = [0.01, 0.01] # 饼图:设定各项距离圆心n个半径
# 1.直方图
p1 = plt.figure(figsize=(12, 12)) # 设置画布大小
# 子图1
a1 = p1.add_subplot(2, 2, 1)
plt.bar(range(2), values[19, 2:4], width=0.5, color='orange')
plt.ylabel('人口(万人)')
plt.ylim(0, 80000) # 设置当前图形y轴的范围
plt.xticks(range(2), label1) # 指定x轴刻度的数目与取值
plt.title('1996年男、女人口数直方图')
# 子图2
b1 = p1.add_subplot(2, 2, 2)
plt.bar(range(2), values[0, 2:4], width=0.5, color='red')
plt.ylabel('人口(万人)')
plt.ylim(0, 80000)
plt.xticks(range(2), label1)
plt.title('2015年男、女人口数直方图')
# 子图3
c1 = p1.add_subplot(2, 2, 3)
plt.bar(range(2), values[19, 4:6], width=0.5, color='orange')
plt.xlabel('类别')
plt.ylabel('人口(万人)')
plt.ylim(0, 90000)
plt.xticks(range(2), label2)
plt.title('1996年城、乡人口数直方图')
# 子图4
d1 = p1.add_subplot(2, 2, 4)
plt.bar(range(2), values[0, 4:6], width=0.5, color='red')
plt.xlabel('类别')
plt.ylabel('人口(万人)')
plt.ylim(0, 90000)
plt.xticks(range(2), label2)
plt.title('2015年城、乡人口数直方图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\1996、2015年各类人口直方图.png')
# 2.饼图
p2 = plt.figure(figsize=(8, 8))
# 子图1
a2 = p2.add_subplot(2, 2, 1)
plt.pie(values[19, 2:4], explode=ex, labels=label1, colors=['pink', 'crimson'], autopct='%1.1f%%')
plt.title('1996年男、女人口数饼图')
# 子图2
b2 = p2.add_subplot(2, 2, 2)
plt.pie(values[0, 2:4], explode=ex, labels=label1, colors=['PeachPuff', 'skyblue'], autopct='%1.1f%%')
plt.title('2015年男、女人口数饼图')
# 子图3
c2 = p2.add_subplot(2, 2, 3)
plt.pie(values[19, 4:6], explode=ex, labels=label2, colors=['pink', 'crimson'], autopct='%1.1f%%')
plt.title('1996年城、乡人口数饼图')
# 子图4
d2 = p2.add_subplot(2, 2, 4)
plt.pie(values[0, 4:6], explode=ex, labels=label2, colors=['PeachPuff', 'skyblue'], autopct='%1.1f%%')
plt.title('2015年城、乡人口数饼图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\1996`2015年各类人口饼图.png')
# 3.箱线图
p3 = plt.figure(figsize=(8, 8))
plt.boxplot(values[0:20, 1:6], notch=True, labels=['年末', '男性', '女性', '城镇', '乡村'], meanline=True)
plt.xlabel('类别')
plt.ylabel('人口(万人)')
plt.title('1996~2015年各特征人口箱线图')
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\1996`2015年各特征人口箱线图.png')
# 显示
plt.show()
读取鸢尾花数据集,使用循环和子图绘制各个特征之间的散点图
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
iris = np.load('C:/Users/lenovo/Desktop/数据分析/iris.npz',allow_pickle=True)['data'][:,:-1]
name = np.load('C:/Users/lenovo/Desktop/数据分析/iris.npz',allow_pickle=True)['features_name']
print(iris)
print(name)
plt.rcParams['font.sans-serif'] = 'SimHei'
p = plt.figure(figsize=(16,16)) ##设置画布
plt.title('iris散点图矩阵')
for i in range(4):
for j in range(4):
p.add_subplot(4,4,(i*4)+(j+1))
plt.scatter(iris[:,i],iris[:,j])## 绘制散点图
plt.xlabel(name[i])
plt.ylabel(name[j])
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\鸢尾花各特征点散点图.png')
plt.show()
绘制各个特征的箱线图,查看是否存在异常值
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
plt.rcParams['axes.unicode_minus']=False
data = np.random.normal(size =100,loc = 0 ,scale = 1)
plt.boxplot(data,notch=True,sym='o',whis=0.05,meanline=True)
print(data)
plt.savefig('C:\\Users\\lenovo\\Desktop\\数据分析\\第3章课后习题操作题2图.png')
plt.show()
本代码来自于《Python数据分析与应用》
如有侵权,请联系侵删
需要本实验源数据的小伙伴请联系作者或联系QQ:2225872659