快速学会使用Matplotlib绘图
- 使用Matplotlib的基本功能实现图形显示
- 使用Matplotlib实现多图显示
- 使用Matplotlib实现不同画图种类
1. Matplotlib之HelloWorld
1.1 什么是Matplotlib
- Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
- Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
- Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
- Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
总言而之:Matplotlib是专门用于开发2D图表(包括3D图表)和以渐进、交互式方式实现数据可视化的科学计算库
2. 为什么要学习Matplotlib
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
Matplotlib能将数据进行可视化,更直观的呈现
使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:
3. Pyplot介绍
3.1 什么是Pyplot
Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。Pyplot 是Matplotlib中常用的绘图模块,能很方便让用户绘制 2D 图表。
Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。
3.2 Pyplot子库的使用
在使用的时候,我们使用 import 导入 pyplot 库,并习惯设置一个别名 :plt
例如
import matplotlib.pyplot as plt
这样我们就可以通过使用 plt 来引用 Pyplot 包的方法来进行绘图
4. 以折线图为例-用Matplotlib画一个简单的图
4.1 图形的绘制流程
1).创建画布 – plt.figure()
plt.figure(figsize=(), dpi=)
参数:
figsize:指定图的长宽
dpi:图像的清晰度
返回fig对象
2).绘制图像 – plt.plot(x, y)
# 画单条线
plot([x], y,[fmt],*, data=None,**kwargs)
参数说明:
- x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
- fmt:可选,定义基本格式(如颜色、标记和线条样式)。
- **kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
3).显示图像 – plt.show()
4).保存图像 – plt.savefig()
注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
4.2 折线图绘制与显示
举例:展现深圳一周的天气,比如从星期一到星期日的天气温度如下
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(20,8), dpi=100)# 2.绘制折线图
plt.plot([1,2,3,4,5,6,7],[31,32,18,25,29,31,18])# 3.显示图像
plt.show()# 4.保存图片到指定路径
plt.savefig("test.png")
以上实例中我们使用了 Pyplot 的 plot() 函数, plot() 函数是绘制二维图形的最基本函数。
5. Matplotlib图像结构
6. 给图形添加辅助功能
首先准备数据画出一个基本的折线图
import matplotlib.pyplot as plt
import random
# 画出温度变化图# 0.准备x, y坐标的数据
x =range(60)
y_s =[random.uniform(15,18)for i in x]# 1.创建画布
plt.figure(figsize=(20,8), dpi=80)# 2.绘制折线图
plt.plot(x, y_s)# 3.显示图像
plt.show()
1)添加自定义x,y刻度
我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签
- plt.xticks(x, **kwargs)x:要显示的刻度值
- plt.yticks(y, **kwargs)y:要显示的刻度值
增加以下两行代码
# 构造x轴刻度标签
x_ticks_label =["11点{}分".format(i)for i in x]# 构造y轴刻度
y_ticks =range(40)# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
2)添加标题
使用 title() 函数来设置
增加以下代码
plt.title("某城市温度变化图")
3)添加网格显示
为了更加清楚地观察图形对应的值,使用 pyplot 中的 grid() 方法来设置图表中的网格线
语法如下
grid(color ='color', linestyle ='linestyle', linewidth = number)
参数说明
- color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。
- linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
- linewidth:设置线的宽度,可以设置一个数字。
增加以下代码
plt.grid(True, linestyle='--', alpha=0.5)
4)添加描述信息
添加x轴、y轴描述信息及标题
# 通过fontsize参数可以修改图像中字体的大小
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
以上功能的完整代码
import random
# 画出温度变化图# 0.准备x, y坐标的数据
x =range(60)
y_s =[random.uniform(15,18)for i in x]# 1.创建画布
plt.figure(figsize=(20,8), dpi=80)# 2.绘制折线图
plt.plot(x, y_s)# 增加以下两行代码# 构造x轴刻度标签
x_ticks_label =["11点{}分".format(i)for i in x]# 构造y轴刻度
y_ticks =range(40)# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])#3.添加标题
plt.title("某城市温度变化图")#4.添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.grid(color ='r', linestyle='--', alpha=0.7)# 4.显示图像
plt.show()
7. 在一个坐标系中绘制多个图像
1)多次plot
plot() 方法中可以包含多对 x,y 值来绘制多条线
# 增加北京的温度数据
y_beijing =[random.uniform(1,3)for i in x]# 绘制折线图
plt.plot(x, y_shanghai)# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')
效果:
2)设置图形风格
3) 显示图例
# 绘制折线图
plt.plot(x, y_shanghai, label="上海")# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")# 显示图例
plt.legend(loc="best")
注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来
8.多个坐标系显示— plt.subplots
可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可
创建一个带有多个axes(坐标系/绘图区)的图
matplotlib.pyplot.subplots(nrows=1, ncols=1,**fig_kw)
参数说明:
nrows, ncols : 设置有几行几列坐标系
int, optional, default: 1, Number of rows/columns of the subplot grid.
Returns:
fig : 图对象
axes : 返回相应数量的坐标系
设置标题等方法不同:
set_xticks
set_yticks
set_xlabel
set_ylabel
注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。
# 0.准备数据
x =range(60)
y_shanghai =[random.uniform(15,18)for i in x]
y_beijing =[random.uniform(1,5)for i in x]# 1.创建画布# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20,8), dpi=100)# 2.绘制图像# plt.plot(x, y_shanghai, label="上海")# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")# 2.1 添加x,y轴刻度# 构造x,y轴刻度标签
x_ticks_label =["11点{}分".format(i)for i in x]
y_ticks =range(40)# 刻度显示# plt.xticks(x[::5], x_ticks_label[::5])# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])# 2.2 添加网格显示# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)# 2.3 添加描述信息# plt.xlabel("时间")# plt.ylabel("温度")# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)# # 2.4 图像保存
plt.savefig("./test.png")# # 2.5 添加图例# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)# 3.图像显示
plt.show()
9.常见图形的API
1)折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
api:plt.plot(x, y)
2)散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
api:plt.scatter(x, y)
3) 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
api:plt.bar(x, width, align='center', **kwargs)
参数说明:
x : 需要传递的数据
width : 柱状图的宽度
align : 每个柱状图的位置对齐方式
{‘center’, ‘edge’}, optional, default: ‘center’
**kwargs :
color:选择柱状图的颜色
4) 直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)
api:matplotlib.pyplot.hist(x, bins=None)
参数说明:
x : 需要传递的数据
bins : 组距
5) 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况(占比)
api:plt.pie(x, labels=,autopct=,colors)
参数说明:
x:数量,自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色
参考
版权归原作者 Blue Hole 所有, 如有侵权,请联系我们删除。