Matplotlib库快速入门与学习

1. 简介

  • 开发2D图表
  • 使用简单且开源
  • 数据可视化,帮助理解数据

2.快速上手简单画图程序

import matplotlib.pyplot as plt
%matplotlib inline	#可不要

plt.figure()	#创建画布
plt.plot([1,0,9],[4,5,6])#横纵坐标
plt.show()	#呈现

Matplotlib库快速入门与学习_第1张图片
其图像可修改的格式如下图:
Matplotlib库快速入门与学习_第2张图片

Matplotlib三层结构

1.容器层
画板层(Canvas):最底层,一般接触不到
画布层(Figure):plt.figure()
绘图区/坐标系(Axes):plt.subplots()
2.辅助显示层
网格等
3.图像层
图表属性和风格

折线图与绘图基础功能

1. 折线图绘制与保存图片

1.matplotlib.pyplot模块

 import matplotlib.pyplot as plt	#包含画图函数

2.折线图绘制与显示

#1.创建画布
plt.figure()
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,12,15,16,14,19])
#3.显示图像
plt.show()

Matplotlib库快速入门与学习_第3张图片
3.设置画布属性与图片保存

import matplotlib.pyplot as plt
#figsize:图的长宽
#dpi:图像清晰度 dot per inch
#返回fig对象
plt.figure(figsize=(20,8),dpi=80)	
	
#保存到指定路径
#注意不能放到plt.show()之后,因为show()会释放figure资源
#显示图像后保存只会保存空图片
plt.savefig("1.png")

2. 完善原始折线图1(辅助显示层)

import matplotlib.pyplot as plt
import random
#准备数据 x,y
x=range(60)
y1=[random.uniform(15,18)for i in x]	

#创建画布
plt.figure(figsize=(20,8),dpi=80)

#绘制图像
plt.plot(x,y1)

#修改x,y刻度
#准备x的刻度说明
x_label=["11h{}min".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))	#0-40,步长5

#添加网格 显示网格 线条风格 透明度
plt.grid(True,linestyle="--",alpha=0.5)	

#添加描述信息
plt.xlabel("Time")
plt.ylabel("Temp")
ply.title("One city")

#显示图像
plt.show()

若出现中文无法显示问题,则需要安装SimHei字体

3. 完善原始折线图2(图像层)

需求:再添加一个城市,改变显示风格

import matplotlib.pyplot as plt
import random

#准备数据 x,y
x=range(60)
y1=[random.uniform(15,18)for i in x]	

#准备新数据
y2=[random.uniform(1,3) for i in x]

#创建画布
plt.figure(figsize=(20,8),dpi=80)

#绘制图像
plt.plot(x,y1,color="r",linestyle="--",label="Y1")
plt.plot(x,y2,color="b",linestyle="-.",label="Y2")

#显示图例
plt.legend()

#修改x,y刻度
#准备x的刻度说明
x_label=["11h{}min".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))	#0-40,步长5

#添加网格 显示网格 线条风格 透明度
plt.grid(True,linestyle="--",alpha=0.5)	

#添加描述信息
plt.xlabel("Time")
plt.ylabel("Temp")
ply.title("Two city")

#显示图像
plt.show()

4. 多坐标系显示(面向对象)

注意:plt.函数名()相对于面向过程的方法,axes.set_方法名()相对于面向对象的方法。相关函数使用可查阅https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes

import matplotlib.pyplot as plt
import random
#准备数据 x,y
x=range(60)
y1=[random.uniform(15,18)for i in x]	
#准备新数据
y2=[random.uniform(1,3) for i in x]

#创建画布
#plt.figure(figsiza=(20,8),dpi=80)
#返回画布和绘图区,1行2列
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

#绘制图像
axes[0].plot(x,y1,color="r",linestyle="--",label="Y1")
axes[1].plot(x,y2,color="b",linestyle="-.",label="Y2")

#显示图例
axes[0].legend()
axes[1].legend()

#修改x,y刻度
#准备x的刻度说明
x_label=["11h{}min".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label[::5])
axes[0].set_yticks(range(0,40,5))	#0-40,步长5
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0,40,5))	#0-40,步长5

#添加网格 显示网格 线条风格 透明度
axes[0].grid(True,linestyle="--",alpha=0.5)	
axes[1].grid(True,linestyle="--",alpha=0.5)	

#添加描述信息
axes[0].set_xlabel("Time")
axes[0].set_ylabel("Temp")
axes[0].set_title("Two city")

axes[1].set_xlabel("Time")
axes[1].set_ylabel("Temp")
axes[1].set_title("Two city")

#显示图像
plt.show()
运行结果:

Matplotlib库快速入门与学习_第4张图片

散点图(Scatter)

plt.scatter(x,y)

柱状图(Bar)

1.简单柱状图

name=['a','b','c']
age=[22,33,44]
x_ticks=range(len(name))
plt.figure()
plt.bar(x_ticks,age,color=['r','g','b'])		#绘制
plt.xticks(x_ticks,name)	#修改x刻度
plt.show()
运行结果

Matplotlib库快速入门与学习_第5张图片

2.对比柱状图

name=['a','b','c','d']
age1=[22,33,44,55]
age2=[66,55,44,33]
x_ticks=range(len(name))
plt.figure()
plt.bar(x_ticks,age1,width=0.2,color='r',label="First")		#绘制
plt.bar([i+0.2 for i in x_ticks],age2,width=0.2,color='b',label="Second")		#绘制
plt.legend()		#显示图例
plt.xticks([i+0.1 for i in x_ticks],name)	#修改x刻度
plt.show()
运行结果:

Matplotlib库快速入门与学习_第6张图片

直方图(histogram)

直方图展示数据分布,柱状图对比数据大小
组数bins=(max-min)//组距
time=[111,120,134,129,134,142,92,134,125,111,120,126,124,125,128,123,127,128,128,124,115,116,116,114,118,116,117,115,119,108,92,93,94,93,95,96,98,97,99]
distance=2
plt.figure(figsize=(20,8),dpi=80)
group_num=int((max(time)-min(time))/distance)
#显示频率plt.hist(time,bins=group_num,normed=True) 
plt.hist(time,bins=group_num)

#修改x刻度 最小值 最大值+2,组距
plt.xticks(range(min(time),max(time)+2,distance))

plt.grid(linestyle="--",alpha=0.5)
plt.xlabel("Move time")
plt.ylabel("Move num")
plt.show()
运行结果

Matplotlib库快速入门与学习_第7张图片

饼图(pie)

#数据准备
move_names=["a","b","c","d","e"]
move_count=[6650,6800,5200,1200,9200]

#创建画布
plt.figure(figsize(20,8),dpi=80)
#绘制饼图 数量 名称 颜色 格式
plt.pie(move_count,labels=move_names,
colors=['r','b','g','b','y'],autopct="%1.2f%%")
plt.axis('equal')
plt.legend()

plt.show()
运行结果:

Matplotlib库快速入门与学习_第8张图片

总结

Matplotlib库快速入门与学习_第9张图片

你可能感兴趣的:(Matplotlib库快速入门与学习)