matplotlib 画图总结

写在前面:好久没用到matplotlib,最近用到的时候发现有些点已经忘了还得查资料,所以趁此机会把matplotlib中常用到的画图方法总结一下!
matplotlib 官网
matplotlib是python中非常实用的一个模块,可以使用matplotlib绘制各种各样的图形,比如折线图、散点图、直方图、条形图、饼图、雷达图等。在python中安装和导入matplotlib包如下:

# 安装
pip install matplotlib
# 导入
import matplotlib.pyplot as plt
# 查看安装包的版本
matplotlib.__version__

一、matplotlib的图形构成

在这里插入图片描述

Figure:是指整个图形,也就是一张画布,包括了所有的元素,如标题,轴线等;
Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
Axis:是指图形的水平轴和垂直轴,包括轴的长度、轴的标签和轴的刻度等;
Artist:在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

Q:在画图时会经常遇到plt.plot 和ax.plot ,这两者的效果都是一样的,那么这两者有什么区别呢?
A:
figure 是上图中红色的外框,可以理解为一整张画布,而axes是蓝色的框,是画布中的一块子图,当需要画一张图形时,既可以用plt.plot()也可以用ax.plot()实现。
在这里插入图片描述
再比如上图,figure就是上图中的一整张画布,而Axes就是其中的子图,所以画图其实是在Axes上进行的。上图可以用一下代码来实现:

plt.figure()
plt.gcf.subplots(2,2)

.gcf() 就是获取当前的figure,即get current figure,另外 .gca() ,是获取当前的Axes,即get current axes.

另外 比如plt.plot()、plt.bar() 等,本质上还是在Axes上画图,可以理解为:现在figure上获取一个当前要操作的Axes,如果没有则自动创建一个并将其设置为当前的Axes,然后在这个Axes上执行当前的绘图操作,plt.xxx() 就相当于 plt.gca().xxx

二、绘制图形的各种要素

下面就从折线图说起,来了解绘制图形的各种要素

1、plt.figure()

在绘制图形时,首先用 plt.figure() 绘制一张画布 figure,可以将此figure命名为fig,此时的figure是空白的,后面可以在figure上绘制一个或者多个子图像。
用ax = fig.add_subplot() 向figure中添加Axes,并命名为ax,此后绘制子图就在ax中,就可以给子图ax设置各种属性。
例如:

# create data
A1 = np.arange(1, 6)  # x ∈ [1,5]
A2 = np.arange(1, 11) # x ∈ [1,10]
B = A1 ** 2
C = A1 ** 3
D = A2 ** 2

# create figure and axes
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(212)

# plot data
ax1.bar(A1, B)
ax2.scatter(A1, C)
ax3.plot(A2, D)

plt.show()

在这里插入图片描述

不过更好用的方法是 fig, axes = plt.subplots(),在创建画板的同时也将画布赋给了 axes,比上面的 add_subplot 要方便不少。

plt.figure() 调用方法:

plt.figure(num=None, figsize=None, dpi=None, 
		   facecolor=None, edgecolor=None, frameon=True, 
		   FigureClass=<class 'matplotlib.figure.Figure'>, 
		   clear=False, **kwargs)

文档:链接
参数说明:
num:当给一个数字时,相当于figure的编号,相当于ID,当是字符串时,就作为figure的名称;
figsize:指定画布的大小,(宽度,高度),单位为英寸;
dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80;
facecolor:背景颜色;
edgecolor:边框颜色;
frameon:是否显示边框;
例如:

# 创建一个名为panel的figure,大小是3*2英寸,背景颜色时灰色
plt.figure(num='panel', figsize=(3,2),facecolor='gray')
plt.show()

在这里插入图片描述

2、plt.subplot()

当有一个空白画布时,可以用 subplot 划分多个子区域进行绘图。将画布整个区域分为 nrows 行,ncols 列,subplot 的 index 参数将指示当前绘制在第几个区域。区域编号的顺序从上之下,从左至右。

plt.subplot(nrows, ncols, index, **kwargs)

文档:链接

plt.figure(num='panel', figsize=(8,4),facecolor='gray')
# 划分三个小区域,绘制出第一个和第三个区域
plt.subplot(1,3,1)  # 划分1行3列,第1个子区域
plt.subplot(1,3,3)  # 划分1行3列,第3个子区域
plt.show()

在这里插入图片描述
有时候需要绘制的子图大小是不一样的,这时就需要对figure进行多次划分,每一次划分后将子图安置在合适的位置即可。注意!前一次的划分是不影响后一次的划分,比如前一次将figure划分为22,不影响下一次将figure划分为21,只需要将子图安置在划分后的空白区域即可。
例如:

plt.figure(num='panel', figsize=(8,4),facecolor='gray')
plt.subplot(2,2,1)  # 划分2行2列,第1个子区域
plt.subplot(2,1,2)  # 划分2行1列,第2个子区域
plt.show()

在这里插入图片描述

4、plt.subplots()

最常用的就是 subplots,便于绘图时精调细节信息。如果用 subplots 创建了多个子图,那么 axes 就是一个 list,用索引列表元素的方法就能获取到每一个 axes。

# create data
A = np.arange(1,5)
B = A**2
C = A**3

# create figure and axes
fig, axes = plt.subplots(1, 2, figsize=(6,3))

# plot data
axes[0].plot(A,B)
axes[1].scatter(A,C)
plt.show()

在这里插入图片描述
由于axes是list,可以通过索引,因此也可以在循环中使用。

4、使用matplotlib的两种方法

通过上面的了解,可看出对matplotlib的使用有两种基本的方法:
1⃣️创建figure和axes,并在其上面调用方法(面向对象方法 object-oriented (OO) style);
2⃣️通过pyplot创建和管理图形和轴,并使用pyplot函数进行绘图;

下面来通过一个栗子来说明一下:

# 使用OO模式绘图
x = np.linspace(2, 50, 100)
fig, ax = plt.subplots(figsize=(6, 5))
ax.plot(x, x, label='linear')  
ax.plot(x, x**2, label='quadratic')  
ax.plot(x, x**3, label='cubic')
# 设置x,y轴的标签  
ax.set_xlabel('x label')  
ax.set_ylabel('y label') 
# 设置ax的标签 
ax.set_title("Simple Plot")  
ax.legend()
# 使用pyplot函数绘图
x = np.linspace(2, 50, 100)
plt.figure(figsize=(6, 5)) 
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')

# 设置x,y轴的标签
plt.xlabel('x label')
plt.ylabel('y label')

# 设置标签
plt.title('Simple Plot')
# 设置标签的位置
plt.legend()
plt.show()

输出结果如下:
在这里插入图片描述

5、润色绘制的图表

绘制的图表为了更加的通俗易懂以及美观,需要在绘制的图表上添加一些配置;以折线图为例,可是设置图片的大小,x、y轴的描述信息,调整x、y轴的刻度,线条的样式(颜色、透明度),标记出特殊的点,将绘制的图片保存到本地,给图片添加一个水印等。下面依次来看一下这些方法要如何实现。
设置图片的大小和保存图片

# 绘制数据
x = np.arange(2, 26, 2)
y 
  • 14
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值