【Matplotlib学习笔记(学习地址:阿里云Python学习路线 – 阶段3)】
1、什么是Matplotlib:
(1)Matplotlib:
mat - matrix(矩阵)
plot - 画图
lib - library 库
(2)专门用于开发2D图表(包括3D图表);
(3)使用起来极其简单;
(4)以渐进、交互式方式实现数据可视化
2、画图:
(1)简单尝试绘制一幅图:
import matplotlib.pyplot as plt #导包
%matplotlib inline
plt.figure() #创建画布
plt.plot([1,0,9],[4,5,6]) #传入横、纵坐标,连线
plt.show()
(2)matplotlib图像结构:
3、Matplotlib三层结构(容器层、辅助显示层、图像层)
(1)容器层Canvas
1)画板层Figure
2)画布层
3)绘图区 / 坐标系
x 、y轴张成的区域
(2)辅助显示层(图例、网格这些的东西)
(3)图像层(就是图表)
容器层:
辅助显示层:
图像层:
图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。
4、折线图绘制与保存图片
(1)matplotlib.pyplot模块
import matplotlib.pyplot as plt
matplotlib.pyplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形(figure)的当前坐标系(axes)。
(2)折线图绘制与显示
展示上海一周的天气:
# 1、创建画布(容器层)
plt.figure()
# 2、绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7] , [17,17,18,15,11,11,13])
# 3、显示图像
plt.show()
(3)设置画布属性与图片保存
plt.figure(figsize=(), dpi=)
figsize:指定图的长宽
dpi:图像的清晰度
返回fig对象
plt.savefig(path)
# 1、创建画布(容器层)
plt.figure(figsize=(20,8), dpi=80)
# 2、绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7] , [17,17,18,15,11,11,13])
# 3、显示图像
plt.show()
注意:要先保存图像、再显示图像
(4)完善原始折线图1(辅助显示层)
1)原始图像:
需求:画出某城市11点到12点 1h内 每分钟的温度变化折线图,温度范围再15° - 18°
原始代码及图像:
# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)
# 3、绘制图像
plt.plot(x,y_shanghai)
# 4、显示图像
plt.show()
2)添加自定义x、y刻度
# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)
# 3、绘制图像
plt.plot(x,y_shanghai)
# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))
# 4、显示图像
plt.show()
3)添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
True : 是否添加网格(是)
linestyle : 线条风格
alpha :透明度
4)添加描述信息(x轴、y轴描述信息 及 标题)
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')
# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)
# 3、绘制图像
plt.plot(x,y_shanghai)
# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))
# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 添加描述信息
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')
# 4、显示图像
plt.show()
(5)完善原始折线图2(图像层) 【再添加一个城市的温度变化】
1)图形风格:
2)图例位置:
plt.legend(loc = 'best')
3)修改代码如下:
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)
# 3、绘制图像
plt.plot(x,y_shanghai, color = 'r' , linestyle = '--' , label = 'shanghai')
plt.plot(x,y_beijing , color = 'b' , label = 'beijing')
# 显示图例
plt.legend()
# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))
# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 添加描述信息
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')
# 4、显示图像
plt.show()
(6)多个坐标系显示-plt.subplots(面向对象的画图方法)
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 2、创建画布
# plt.figure(figsize=(10,8),dpi=80)
figure , axes = plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=80)
# 3、绘制图像
axes[0].plot(x,y_shanghai, color = 'r' , linestyle = '--' , label = 'shanghai')
axes[1].plot(x,y_beijing , color = 'b' , label = 'beijing')
# 显示图例
axes[0].legend()
axes[1].legend()
# 修改x、y刻度
# 准备x的刻度说明
x_label = ['11.{}'.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))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(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('temperature')
axes[0].set_title('Temperature variation diagram of shanghai')
axes[1].set_xlabel('time')
axes[1].set_ylabel('temperature')
axes[1].set_title('Temperature variation diagram of beijing')
# 4、显示图像
plt.show()
(7)折线图的应用场景
某事物、某指标随时间的变化状况;也可以画数学函数图像
5、散点图(scatter)
(1)散点图应用场景
判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
(2)散点图绘制
# 1、准备数据
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,9,8,7,6,5,4,3,2,1]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制图形
plt.scatter(x,y)
# 4、显示图像
plt.show()
6、柱状图(bar)
(1)柱状图应用场景
绘制离散的数据,能一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
(2)柱状图绘制
1)单纯的统计:
# 1、准备数据
name = ['AAA' , 'BBB' , 'CCC' , 'DDD' , 'EEE']
nums = [123 , 136 , 129 , 101 , 121]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制柱状图
x_ticks = range(len(name))
plt.bar(x_ticks,nums,color=['b','r','g','c','m'])
# 修改x刻度
plt.xticks(x_ticks,name)
# 添加标题
plt.title('Film revenue')
# 添加网格
plt.grid(linestyle='--',alpha=0.5)
# 4、显示图像
plt.show()
2)对比:
# 1、准备数据
movie_name = ['AAA' , 'BBB' , 'CCC']
first_day = [10000,15000,20000]
first_weekend = [30000,35000,40000]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制柱状图
plt.bar(range(3),first_day,width=0.2,label='首日票房')
plt.bar([0.2,1.2,2.2],first_weekend,width=0.2,label='首周票房')
# 显示图例
plt.legend()
# 4、修改刻度
plt.xticks([0.1,1.1,2.1],movie_name)
# 4、显示图像
plt.show()
7、直方图(histogram)
(1)直方图应用场景
绘制连续性的数据展示一组或者多组数据的分布情况。(统计)
(2)相关概念
组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数;
组距:每一组两个端点的差;
直方图是连着的,柱状图是分开的;
直方图展示数据的分布,柱状图比较数据的大小;
直方图x轴位定量数据,柱状图x轴为分类数据;
直方图柱子宽度可不一,柱状图柱子宽度必须一致;
(3)直方图绘制
组数 = 极差 // 组距
y轴的变量,可以是频数,也可以是频率
plt.hist(time,bins=group_num,density=True)
# 需求:电影时长分布状况
# 1、准备数据
time = [131,98,125,131,124,139,131,117,128,108 ]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制直方图
distance = 2
group_num = (max(time) - min(time)) // distance
plt.hist(time,bins=group_num)
# 修改x轴刻度
plt.xticks(range(min(time),max(time),distance))
# 添加网格
plt.grid(linestyle='--',alpha=0.5)
# 4、显示图像
plt.show()
8、饼图(pie)
(1)饼图应用场景
分类数据的占比情况。(占比)
(2)绘制饼图
# 1、准备数据
movie_name = ['A','B','C','D']
place_count = [10,20,30,40]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制饼图
plt.pie(place_count,labels=movie_name,colors = ['r','m','b','g'],autopct='%1.2f%%')
# 显示图例
plt.legend()
plt.axis('equal')
# 4、显示图像
plt.show()
9、总结