6.Matplotlib函数
6.1 plot 函数
pylab.plot 是一个用于绘制二维图形的函数。它可以根据提供的 x 和 y 数据点绘制线条和/或标记。
语法:
pylab.plot(x, y, format_string=None, **kwargs)
参数:
-
x: x 轴数据,可以是一个数组或列表。
-
y: y 轴数据,可以是一个数组或列表。
-
format_string: 格式字符串,用于指定线条样式、颜色等。
-
**kwargs: 其他关键字参数,用于指定线条的属性。
plot 函数可以接受一个或两个数组作为参数,分别代表 x 和 y 坐标。如果你只提供一个数组,它将默认用作 y 坐标,而 x 坐标将默认为数组的索引。
格式字符串:
格式字符串由颜色、标记和线条样式组成。例如:
颜色:'b':蓝色 'g':绿色 'r':红色 'c':青色 'm':洋红色 'y':黄色 'k':黑色 'w':白色
标记:
'.':点标记
',':像素标记
'o':圆圈标记
'v':向下三角标记
'^':向上三角标记
'<':向左三角标记
'>':向右三角标记
's':方形标记
'p':五边形标记
'*':星形标记
'h':六边形标记1
'H':六边形标记2
'+':加号标记
'x':叉号标记
'D':菱形标记
'd':细菱形标记
'|':竖线标记
'_':横线标记
线条样式:'-':实线 '--':虚线 '-.':点划线 ':':点线
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图形
plt.plot(x, y, 'r:')
# 显示图形
plt.show()
6.2 figure 函数
figure() 函数来实例化 figure 对象,即绘制图形的对象,可以通过这个对象,来设置图形的样式等
参数:
-
figsize:指定画布的大小,(宽度,高度),单位为英寸
-
dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80
-
facecolor:背景颜色
-
dgecolor:边框颜色
-
frameon:是否显示边框
6.2.1 figure.add_axes()
Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
参数:
是一个包含四个元素的列表或元组,格式为 [left, bottom, width, height],其中:
left 和 bottom 是轴域左下角的坐标,范围从 0 到 1。
width 和 height 是轴域的宽度和高度,范围从 0 到 1。
# figure():生成画布
# 参数:
# figsize: 设置画布的宽和高,数据格式为元组
fig = plt.figure(figsize=(12, 8))
# add_axes:画布生成绘图区域
# 参数
# left,bottom,width,height:取值范围都是0-1之间
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = np.linspace(-10, 10, 100)
y = x ** 2
# 通过绘图区域对象绘制图形,使图形绘制在绘图区域中
ax.plot(x, y)
plt.show()
6.2.2 axes.legend()
legend 函数用于添加图例,以便识别图中的不同数据系列。图例会自动显示每条线或数据集的标签。
参数:
-
labels 是一个字符串序列,用来指定标签的名称
-
loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示
-
handles 参数,它也是一个序列,它包含了所有线型的实例
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = np.linspace(-10, 10, 100)
y = x ** 2
# legend():设置图形的图例
# 参数:
# handles:设置图形实例,数据格式是列表
# labels:设置图形实例的标签说明,数据格式是列标
# loc:设置图例显示的位置
# plot:返回对象是一个列表
# line = ax.plot(x, y)
# ax.legend(handles=line, labels=['x^2'], loc='best')
# 图例设置的第二种方式:(常用)
# 在plot方法中添加label参数,设置图例说明
# 调用legend方法使图例生效,legend方法可以不设置handles和labels
ax.plot(x, y, label='x^2 大胆')
ax.legend(loc='upper center')
plt.show()
legend() 函数 loc 参数:
位置 | 字符串表示 | 整数数字表示 |
---|---|---|
自适应 | Best | 0 |
右上方 | upper right | 1 |
左上方 | upper left | 2 |
左下 | lower left | 3 |
右下 | lower right | 4 |
右侧 | right | 5 |
居中靠左 | center left | 6 |
居中靠右 | center right | 7 |
底部居中 | lower center | 8 |
上部居中 | upper center | 9 |
中部 | center | 10 |
6.3 标题中文乱码
如果标题设置的是中文,会出现乱码
局部处理:
plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False
全局处理:
首先,找到 matplotlibrc 文件的位置,可以使用以下代码:
import matplotlib print(matplotlib.matplotlib_fname())
然后,修改 matplotlibrc 文件,找到 font.family 和 font.sans-serif 项,设置为支持中文的字体,如 SimHei。
同时,设置 axes.unicode_minus 为 False 以正常显示负号。
修改完成后,重启pyCharm。如果不能解决,尝试运行以下代码来实现:
from matplotlib.font_manager import _rebuild
_rebuild()
6.4 subplot 函数
subplot 是一个较早的函数,用于创建并返回一个子图对象。它的使用比较简单,通常用于创建网格状的子图布局。subplot 的参数通常是一个三位数的整数,其中每个数字代表子图的行数、列数和子图的索引。
add_subplot 是一个更灵活的函数,它是 Figure类的一个方法,用于向图形容器中添加子图。推荐使用 add_subplot,因为它提供了更好的灵活性和控制。
语法:
fig.add_subplot(nrows, ncols, index)
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 生成figure画布
fig = plt.figure(figsize=(12, 4))
# 添加第一个绘图区域
ax1 = fig.add_subplot(1, 3, 1)
ax1.plot(x, y1, label='sin(x)')
plt.legend()
# 添加第二个子图区域
ax2 = fig.add_subplot(1, 3, 2)
ax2.plot(x, y2, label='cos(x)')
plt.legend()
# 添加第三个子图区域
ax3 = fig.add_subplot(1, 3, 3)
ax3.plot(x, y3, label='tan(x)')
# 使图例生效
plt.legend()
plt.show()
6.5 subplots 函数
subplots 是 matplotlib.pyplot 模块中的一个函数,用于创建一个包含多个子图(subplots)的图形窗口。subplots 函数返回一个包含所有子图的数组,这使得你可以更方便地对每个子图进行操作。
语法:
fig, axs = plt.subplots(nrows, ncols, figsize=(width, height))
参数:
-
nrows: 子图的行数。
-
ncols: 子图的列数。
-
figsize: 图形的尺寸,以英寸为单位。
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# fig, axs = plt.subplots(1, 3, figsize=(12, 4))
fig, axs = plt.subplots(1, 3)
axs[0].plot(x, y1)
axs[1].plot(x, y2)
axs[2].plot(x, y3)
plt.show()
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 生成一个子图区域,在一个区域绘制多个图形
fig, axs = plt.subplots()
axs.plot(x, y1, 'r')
axs.plot(x, y2, 'g')
axs.plot(x, y3, 'b')
plt.show()
6.6 subplot2gird 函数
subplot2grid 是 matplotlib.pyplot 模块中的一个函数,用于在网格中创建子图。subplot2grid 允许你更灵活地指定子图的位置和大小,以非等分的形式对画布进行切分,使得你可以创建复杂的布局。
语法:
ax = plt.subplot2grid(shape, loc, rowspan=1, colspan=1)
参数:
-
shape: 网格的形状,格式为 (rows, cols),表示网格的行数和列数,在figure中式全局设置。
-
loc: 子图的起始位置,格式为 (row, col),表示子图在网格中的起始行和列。
-
rowspan: 子图占据的行数,默认为 1。
-
colspan: 子图占据的列数,默认为 1。
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=1)
ax2 = plt.subplot2grid((3, 3), (0, 2))
ax3 = plt.subplot2grid((3, 3), (2, 0))
ax4 = plt.subplot2grid((3, 3), (2, 2))
ax1.plot(x, y1)
ax2.plot(x, y2)
ax3.plot(x, y3)
ax4.plot(x, y4)
plt.show()
6.7 grid 函数
grid 是用于在图形中添加网格线的函数。网格线可以帮助读者更清晰地理解数据的分布和趋势。grid 函数可以应用于 Axes 对象,用于在子图中添加网格线。
语法:
ax.grid(b=None, which='major', axis='both', **kwargs)
参数:
-
b: 是否显示网格线,默认为 None,表示根据当前设置显示或隐藏网格线。
-
which: 指定要显示的网格线类型,可以是 'major'(主刻度)、'minor'(次刻度)或 'both'(主刻度和次刻度)。
-
axis: 指定要显示网格线的轴,可以是 'both'(两个轴)、'x'(X 轴)或 'y'(Y 轴)。
-
**kwargs: 其他可选参数,用于定制网格线的外观,如 color、linestyle、linewidth 等。
# grid():在图形中添加网格线
# 参数:
# b:是否显示网格线
# which:网格线类型,可以是'major'(主刻度)、'minor'(次刻度)或'both'(主刻度和次刻度)
# axis:显示哪些的网格线,可以是'x'、'y'、'both'
# **kwargs:可以设置color(网格线颜色)、linestyle(线条样式)、linewidth(线条粗细)
plt.grid(True, which='major', axis='x', color='red', linestyle='--', linewidth=0.5)
6.8 xscale 和 yscale 函数
xscale 和 yscale 函数用于设置坐标轴的刻度类型。默认情况下,坐标轴的刻度类型是线性的,但你可以使用 xscale 和 yscale 函数将其更改为对数刻度或其他类型的刻度。
# xscale、yscale:设置x、y轴的刻度类型
plt.xscale('linear')
plt.yscale('linear')
6.9 set_xlim 和 set_ylim 函数
set_xlim 和 set_ylim 函数用于设置坐标轴的范围。
语法:
ax.set_xlim(left, right)
ax.set_ylim(bottom, top)
参数:
-
left 和 right: X 轴的范围,left 是 X 轴的最小值,right 是 X 轴的最大值。
-
bottom 和 top: Y 轴的范围,bottom 是 Y 轴的最小值,top 是 Y 轴的最大值。
# set_xlim、set_ylim:设置x、y轴的取值范围
axs.set_xlim(0, 5)
axs.set_ylim(0, 1)
6.10 set_xticks 和 set_yticks 函数
Matplotlib 可以自动根据因变量和自变量设置坐标轴范围,也可以通过 set_xticks() 和 set_yticks() 函数手动指定刻度,接收一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。
语法:
ax.set_xticks(ticks)
ax.set_yticks(ticks)
参数:
ticks: 一个包含刻度位置的列表或数组。
# set_xticks、set_yticks:手动设置x、y轴的刻度列表
axs.set_xticks([0, 2, 4, 6])
6.11 twinx 和 twiny 函数
twinx 和 twiny 函数用于在同一个图形中创建共享 X 轴或 Y 轴的多个子图。twinx 函数用于创建共享 X 轴的子图,twiny 函数用于创建共享 Y 轴的子图。
语法:
ax2 = ax.twinx()
ax2 = ax.twiny()
说明:
-
ax: 原始的 Axes 对象。
-
ax2: 新的 Axes 对象,共享原始 Axes 对象的 X 轴或 Y 轴。
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, axs = plt.subplots()
axs.plot(x, y1)
# axs1 = axs.twinx()
# axs1.plot(x, y2,'r')
axs2 = axs.twiny()
axs2.plot(x, y2, 'g')