一.常用的API:
1.绘图类型
函数名称 | 作用 |
---|---|
Bar | 绘制条形图 |
Barh | 绘制水平条形图 |
Boxplot | 绘制箱型图 |
Hist | 绘制直方图 |
his2d | 绘制2D直方图 |
Pie | 绘制饼状图 |
Plot | 在坐标轴上画线或者标记 |
Polar | 绘制极坐标图 |
Scatter | 绘制x与y的散点图 |
Stackplot | 绘制堆叠图 |
Stem | 用来绘制二维离散数据绘制(又称为火柴图) |
Step | 绘制阶梯图 |
Quiver | 绘制一个二维按箭头 |
2.Image函数
函数名称 | 作用 |
Imread | 从文件中读取图像的数据并形成数组 |
Imsave | 将数组另存为图像文件 |
Imshow | 在数轴区域内显示图像 |
3.Axis函数
函数名称 | 作用 |
Axes | 在画布(Figure)中添加轴 |
Text | 向轴添加文本 |
Title | 设置当前轴的标题 |
Xlabel | 设置x轴标签 |
Xlim | 获取或者设置x轴区间大小 |
Xscale | 设置x轴缩放比例 |
Xticks | 获取或设置x轴刻标和相应标签 |
Ylabel | 设置y轴的标签 |
Ylim | 获取或设置y轴的区间大小 |
Yscale | 设置y轴的缩放比例 |
Yticks | 获取或设置y轴的刻标和相应标签 |
4.Figure 函数
函数名称 | 作用 |
Figtext | 在画布上添加文本 |
Figure | 创建一个新画布 |
Show | 显示数字 |
Savefig | 保存当前画布 |
Close | 关闭画布窗口 |
二.pylab模块
pylab
是 matplotlib
库中的一个子模块,提供了许多用于绘图和数值计算的功能。它将 matplotlib
的绘图功能和 numpy
数值计算功能进行了整合。pylab
的设计理念是模仿 MATLAB(Matlab 是一个数学软件,广泛用于数值计算和绘图),因此它提供了类似于 MATLAB 的接口
通常,pylab
被用作 matplotlib
的一个简化接口,但是现代的 matplotlib
和 numpy
推荐直接使用它们的具体模块,因为 pylab
会导入所有内容(包括 matplotlib
和 numpy
的大量功能),这可能导致命名冲突。
1.导入模块
import pylab
或是:
from pylab import *
这将导入 matplotlib
和 numpy
的常用功能,例如 plot
、sin
、linspace
等,使得代码书写更加简洁。
2.常用的一些功能
1.绘制图形:
from pylab import *
#创建数据
x = linspace(0, 10, 100)
y = sin(x)
# 绘制图形
plot(x, y)
# 显示图形
show()
pylab.linspace(0, 10, 100)
等价于numpy.linspace(0, 10, 100)
,它生成了从 0 到 10 的 100 个均匀分布的点。pylab.sin(x)
计算了x
中每个值的正弦值,等价于numpy.sin(x)
。pylab.plot(x, y)
绘制了x
和y
的图像。pylab.show()
显示绘制的图形。
2.绘制多个图形
from pylab import *
# 创建数据
x = linspace(0, 10, 100)
y1 = sin(x)
y2 = cos(x)
# 绘制两个图形
plot(x, y1, label='sin(x)')
plot(x, y2, label='cos(x)')
# 添加图例
legend()
# 显示图形
show()
3. 子图(Subplot):
from pylab import *
# 创建数据
x = linspace(0, 10, 100)
y1 = sin(x)
y2 = cos(x)
# 创建 1 行 2 列的子图
subplot(1, 2, 1)
plot(x, y1, label='sin(x)')
title('Sine Function')
subplot(1, 2, 2)
plot(x, y2, label='cos(x)')
title('Cosine Function')
# 显示图形
show()
4.直方图
from pylab import *
# 创建数据
data = randn(1000)
# 绘制直方图
hist(data, bins=30)
# 显示图形
show()
3.pylab存在的一些问题
pylab
曾经是 matplotlib
的常见用法,但随着时间的推移,越来越多人建议直接使用 matplotlib
和 numpy
的具体模块。这是因为 pylab
会将很多功能一次性导入到当前的命名空间,这样容易造成命名冲突,尤其是在复杂项目中。
4.更为推荐使用现代用法
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图形
plt.plot(x, y)
# 显示图形
plt.show()
之后的讲解都将围绕现代用法展开
三.常用函数
1.plot函数
plot()
函数是 matplotlib
库中最常用的绘图函数之一,它用于创建二维线图(即将数据点连接成一条线)。这个函数非常灵活,能够支持不同类型的图形,如线图、散点图等。
(1)使用语法
pylab.plot(x, y, format_string=None, **kwargs)
(2)参数解释
-
x: x 轴数据,可以是一个数组或列表。
-
y: y 轴数据,可以是一个数组或列表。
-
format_strifng: 格式字符串,用于指定线条样式、颜色等。例如:
'r-'
(红色实线),'b:'
(蓝色虚线),'g--'
(绿色虚线),'o'
(圆点)。可以包含颜色、线型和标记类型等信息 -
**kwargs: 其他关键字参数,用于指定线条的属性。如
label
(标签)、linewidth
(线宽)、markersize
(标记大小)等
plot 函数可以接受一个或两个数组作为参数,分别代表 x 和 y 坐标。如果你只提供一个数组,它将默认用作 y 坐标,而 x 坐标将默认为数组的索引。
(3)格式字符串
颜色: 'b':蓝色 'g':绿色 'r':红色 'c':青色 'm':洋红色 'y':黄色 'k':黑色 'w':白色
标记:
'.':点标记 | '.':点标记 |
'o':圆圈标记 | 'v':向下三角标记 |
'^':向上三角标记 | '<':向左三角标记 |
'>':向右三角标记 | 's':方形标记 |
'p':五边形标记 | '*':星形标记 |
'h':六边形标记1 | 'H':六边形标记2 |
'+':加号标记 | 'x':叉号标记 |
'D':菱形标记 | 'd':细菱形标记 |
'|':竖线标记 | '_':横线标记 |
线条样式: '-':实线 '--':虚线 '-.':点划线 ':':点线
(4)plot()基本用法
1.基本线条
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100) # 生成从 0 到 10 的 100 个点
y = np.sin(x) # 计算每个 x 对应的 sin(x)
# 绘制图形
plt.plot(x, y)
# 显示图形
plt.show()
这会生成一条从 (0, 0)
到 (10, sin(10))
的曲线。
2.使用不同的线型和颜色
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
# 绘制红色虚线
plt.plot(x, y, 'r--') # 'r--' 表示红色虚线
plt.show()
'r'
表示红色。'--'
表示虚线。
3.绘制多个图形
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制两个图形
plt.plot(x, y1, label='sin(x)', color='r')
plt.plot(x, y2, label='cos(x)', color='b')
# 添加图例
plt.legend()
# 显示图形
plt.show()
label
参数用于给图形添加标签,plt.legend()
用于显示图例。
label也可以在legend中添加,但不推荐
# 绘制两条曲线
line1 = ax.plot(x, y1, 'r:') # 红色虚线
line2 = ax.plot(x, y2, 'b:') # 蓝色虚线
# 通过 line1[0] 和 line2[0] 获取 Line2D 对象,传递给 legend
#添加图例,
#参数:
# handles:包含曲线的实例
# labels:设置标签
# loc:是指定图例位置的参数,其参数值可以用字符串或整数来表示
ax.legend(handles=[line1[0], line2[0]], labels=['sin(x)', 'cos(x)'], loc='best')
4.使用标记和线条
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制带有圆点标记的实线
plt.plot(x, y, 'b-o') # 'b-o' 表示蓝色线条,并且每个数据点用圆点标记
plt.show()
'o'
表示使用圆点标记每个数据点。'b'
表示蓝色的线。
5. 设置线宽和标记大小
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 设置线宽和标记大小
plt.plot(x, y, linewidth=2, markersize=5, marker='o', label='sin(x)')
# 添加标签
plt.legend()
plt.show()
linewidth=2
设置线宽为 2。markersize=5
设置标记的大小。marker='o'
设置标记类型为圆形。
6. 将多个数据绘制在同一图中
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制两个不同的图形
plt.plot(x, y1, label='sin(x)', color='r', linestyle='-') # 红色实线
plt.plot(x, y2, label='cos(x)', color='b', linestyle='--') # 蓝色虚线
# 添加图例
plt.legend()
plt.show()
(5)其他常用参数:
linewidth
:控制线条宽度。markersize
:控制标记的大小。alpha
:控制图形的透明度,取值范围是 [0, 1],0 表示完全透明,1 表示完全不透明。
2.figure 函数
figure()
是 matplotlib
库中的一个非常重要的函数,它用于创建一个新的 图形窗口。在 matplotlib
中,图形窗口是指用于展示图形的容器。使用 figure()
可以创建一个新的图形对象,并对其进行自定义设置。
(1)参数说明
num
:图形窗口的编号或名称。如果设置为整数,表示图形的编号;如果设置为字符串,则表示图形的名称。如果未指定,matplotlib
会自动为图形分配一个编号。figsize
:设置图形的大小,接受一个元组(宽度, 高度)
,单位为英寸。例如(8, 6)
表示 8 英寸宽,6 英寸高。dpi
:每英寸点数(dots per inch),用于设置图形的分辨率。默认值通常是 100。facecolor
:设置图形的背景颜色,可以使用颜色名(如'white'
或'blue'
)或 RGB/RGBA 值。edgecolor
:设置图形边框的颜色。frameon
:是否显示图形的边框,默认为True
。clear
:如果为True
,则在创建图形之前会清空当前图形的内容。默认为False
。
(2)figure.add_axes()
Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
参数说明:
是一个包含四个元素的列表或元组,格式为 [left, bottom, width, height],其中:
left 和 bottom 是轴域左下角的坐标,范围从 0 到 1。
width 和 height 是轴域的宽度和高度,范围从 0 到 1。
使用实例:
# 创建图形和坐标轴
fig = plt.figure(figsize=(10, 5), facecolor='grey')
ax = fig.add_axes([0.1, 0.1, 0.6, 0.6])
# 数据生成
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制两条曲线
ax.plot(x, y1, label='sin(x)函数') # 红色虚线
ax.plot(x, y2, label='cos(x)函数')
ax.legend(loc=10)
plt.show()
(3)axes.legend()
legend 函数用于添加图例,以便识别图中的不同数据系列。图例会自动显示每条线或数据集的标签。
参数说明:
-
abels 是一个字符串序列,用来指定标签的名称
-
loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示
-
handles 参数,它也是一个序列,它包含了所有线型的实例
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 |
3.subplot 函数
subplot()
是 matplotlib
中用于在一个图形窗口中创建多个子图的函数。它允许用户在一个图形区域内,按照指定的网格布局来展示多个子图。每个子图可以包含不同的绘图内容,并且它们共享同一个图形窗口。
使用语法:
fig.add_subplot(nrows, ncols, index, **kwargs)
**kwargs表示其他的一些参数,他不是一个参数
nrows
:子图的行数。ncols
:子图的列数。index
:当前子图的位置,从 1 开始,按照行优先顺序排列。例如,index=1
表示第一行第一列的位置,index=2
表示第一行第二列的位置,以此类推。**kwargs
:额外的可选参数,如sharex
、sharey
(用于共享坐标轴),或者是图形的标题、标签等。
使用实例:
1. 创建 2x2 子图
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)
# 创建 2x2 子图
plt.subplot(2, 2, 1) # 第一行第一列
plt.plot(x, y1)
plt.title('Sine')
plt.subplot(2, 2, 2) # 第一行第二列
plt.plot(x, y2)
plt.title('Cosine')
plt.subplot(2, 2, 3) # 第二行第一列
plt.plot(x, y3)
plt.title('Tangent')
plt.subplot(2, 2, 4) # 第二行第二列
plt.plot(x, y4)
plt.title('Exponential')
# 调整子图间距,避免重叠
plt.tight_layout()
# 显示图形
plt.show()
plt.subplot(2, 2, 1)
表示创建一个 2x2 网格的第一个子图(第一行第一列)。plt.subplot(2, 2, 2)
表示第二个子图(第一行第二列),依此类推。
2. 共享坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建 2x1 的子图,两个子图共享 y 轴
plt.subplot(2, 1, 1, sharex=True, sharey=True)
plt.plot(x, y1)
plt.title('Sine')
plt.subplot(2, 1, 2, sharex=True, sharey=True)
plt.plot(x, y2)
plt.title('Cosine')
# 显示图形
plt.tight_layout()
plt.show()
sharex=True, sharey=True
表示两个子图共享相同的 x 轴和 y 轴。
3. 使用 subplot()
在同一位置绘制多个图形
subplot()
可以在同一位置绘制多个图形,但通常这种做法不推荐,因为会覆盖之前的图形。如果需要多个图形重叠在一起,可以使用 plt.plot()
的不同参数进行区分,或者使用 ax
对象来更精细地控制每个子图。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建一个 1x1 网格并绘制多个图形
plt.subplot(1, 1, 1)
plt.plot(x, y1, label='sin(x)', color='r')
plt.plot(x, y2, label='cos(x)', color='b')
plt.legend()
plt.title('Sine and Cosine')
plt.show()
4.subplots 函数
subplots 是 matplotlib.pyplot 模块中的一个函数,用于创建一个包含多个子图(subplots)的图形窗口。subplots 函数返回一个包含所有子图的数组,这使得你可以更方便地对每个子图进行操作。
使用语法:
fig, axs = plt.subplots(nrows, ncols, figsize=(width, height))
1.subplot()
与 subplots()
的区别
subplot()
:用于在一个图形窗口中按指定的网格位置(行列)安排多个子图,每次调用subplot()
都是切换到指定位置的子图。subplots()
:返回一个包含多个子图的Figure
对象和一个axes
数组,可以在其中同时管理多个子图,更适用于处理多个子图的场景,尤其是当子图数量较多时。
参数说明:
-
nrows: 子图的行数。
-
ncols: 子图的列数。
-
figsize: 图形的尺寸,以英寸为单位。
2.使用 subplots()
创建多个子图
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 使用 subplots 创建 2x1 的网格布局
fig, axs = plt.subplots(2, 1)
# 绘制子图
axs[0].plot(x, y1)
axs[0].set_title('Sine')
axs[1].plot(x, y2)
axs[1].set_title('Cosine')
plt.tight_layout()
plt.show()
5.subplot2gird 函数
subplot2grid()
是 matplotlib
中一个功能强大的函数,用于在一个图形窗口中创建不规则布局的子图。与 subplot()
不同,subplot2grid()
允许你定义一个更为灵活的网格布局,并指定每个子图的占据区域,而不是强制要求按行列索引排列。
使用语法:
ax = plt.subplot2grid(shape, loc, rowspan=1, colspan=1)
参数说明:
shape
:定义整个网格的大小,通常是一个二元组(nrows, ncols)
,表示总共有多少行和多少列。loc
:指定当前子图的位置,通常是一个二元组(row, col)
,表示子图的起始位置(从 0 开始)。rowspan
:指定当前子图占据的行数(默认为 1),如果需要跨越多行,可以设置为大于 1 的值。colspan
:指定当前子图占据的列数(默认为 1),如果需要跨越多列,可以设置为大于 1 的值。**kwargs
:额外的可选参数,用于设置子图的属性,例如图形标题、坐标轴标签等。
使用实例:
1. 创建一个简单的 3x3 网格,并将子图设置为跨越多个行和列
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 创建 3x3 网格
plt.figure(figsize=(8, 6))
# 第一个子图,位置为 (0, 0),占用 1 行 1 列
plt.subplot2grid((3, 3), (0, 0))
plt.plot(x, y1)
plt.title('Sine')
# 第二个子图,位置为 (0, 1),占用 1 行 1 列
plt.subplot2grid((3, 3), (0, 1))
plt.plot(x, y2)
plt.title('Cosine')
# 第三个子图,位置为 (1, 0),占用 2 行 1 列(跨越第二行)
plt.subplot2grid((3, 3), (1, 0), rowspan=2)
plt.plot(x, y3)
plt.title('Tangent')
# 调整布局,避免重叠
plt.tight_layout()
plt.show()
plt.subplot2grid((3, 3), (0, 0))
创建了一个 3x3 网格中的第一个子图,位于第一行第一列。plt.subplot2grid((3, 3), (0, 1))
创建了第二个子图,位于第一行第二列。plt.subplot2grid((3, 3), (1, 0), rowspan=2)
创建了第三个子图,位于第二列,并且跨越了第二行和第三行。
2. 自定义网格布局,创建复杂的子图排列
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 创建一个 4x4 的网格
plt.figure(figsize=(10, 8))
# 第一个子图,位于位置 (0, 0)
plt.subplot2grid((4, 4), (0, 0))
plt.plot(x, y1)
plt.title('Sine')
# 第二个子图,位于位置 (0, 1),跨越 2 列
plt.subplot2grid((4, 4), (0, 1), colspan=2)
plt.plot(x, y2)
plt.title('Cosine')
# 第三个子图,位于位置 (1, 0),占 2 行 1 列
plt.subplot2grid((4, 4), (1, 0), rowspan=2)
plt.plot(x, y3)
plt.title('Tangent')
# 第四个子图,位于位置 (3, 3)
plt.subplot2grid((4, 4), (3, 3))
plt.plot(x, y1)
plt.title('Sine Again')
plt.tight_layout()
plt.show()
plt.subplot2grid((4, 4), (0, 0))
创建了一个 4x4 网格中的第一个子图。plt.subplot2grid((4, 4), (0, 1), colspan=2)
创建了第二个子图,它跨越了第二列和第三列。plt.subplot2grid((4, 4), (1, 0), rowspan=2)
创建了第三个子图,它跨越了第二行和第三行。plt.subplot2grid((4, 4), (3, 3))
创建了第四个子图,它位于最后一个位置。
3. 共享坐标轴的子图布局
使用 subplot2grid()
时,可以通过手动设置坐标轴共享来使多个子图共享 x 轴或 y 轴。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建一个 2x2 的网格
plt.figure(figsize=(8, 6))
# 第一个子图,位置为 (0, 0)
ax1 = plt.subplot2grid((2, 2), (0, 0))
ax1.plot(x, y1)
ax1.set_title('Sine')
# 第二个子图,位置为 (0, 1),共享 y 轴
ax2 = plt.subplot2grid((2, 2), (0, 1), sharey=ax1)
ax2.plot(x, y2)
ax2.set_title('Cosine')
plt.tight_layout()
plt.show()
- 第一个子图
ax1
绘制了y1
(正弦)。 - 第二个子图
ax2
绘制了y2
(余弦),并且共享了ax1
的 y 轴(sharey=ax1
)。
6.grid 函数
在 matplotlib
中,grid()
函数用于控制图形中的网格线显示。网格线是为了使得图形中的数据更易于读取,它帮助我们定位坐标轴上的数据值。
使用语法:
ax.grid(b=None, which='major', axis='both', **kwargs)
参数说明:
-
b
:布尔值,表示是否显示网格。如果为True
,显示网格;如果为False
,隐藏网格;如果为None
(默认值),则自动设置网格的显示。 -
which
:指定网格的显示范围,取值包括:'major'
:只显示主网格线(默认值)。'minor'
:只显示次网格线。'both'
:显示主网格线和次网格线。
-
axis
:指定显示网格的坐标轴,取值包括:'both'
:显示 x 和 y 轴的网格线(默认值)。'x'
:仅显示 x 轴的网格线。'y'
:仅显示 y 轴的网格线。
-
color
:网格线的颜色,可以使用颜色名称(如'k'
,表示黑色),或者 RGB/RGBA 值。 -
linestyle
:网格线的样式,可以是:'-'
(实线,默认值)'--'
(虚线)':'
(点线)'-.'
(点划线)
-
linewidth
:网格线的宽度,默认值为0.5
,可以通过此参数调整网格线的粗细。 -
**kwargs
:其他额外的参数,用于设置网格线的属性(例如透明度alpha
、线型dashes
等)。
使用实例:
1.显示网格线
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
# 开启网格线
plt.grid(True)
plt.show()
2.仅显示 x 轴的网格线
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.plot(x, y)
# 仅显示 x 轴的网格线
plt.grid(True, axis='x')
plt.show()
axis='x'
只显示 x 轴上的网格线。
3.仅显示 y 轴的网格线
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.tan(x)
plt.plot(x, y)
# 仅显示 y 轴的网格线
plt.grid(True, axis='y')
plt.show()
4.显示主网格线和次网格线
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
# 开启主网格线和次网格线
plt.grid(True, which='both')
# 显示次刻度
plt.minorticks_on()
plt.show()
plt.grid(True, which='both')
启用了主网格线和次网格线。plt.minorticks_on()
显示了次刻度线,进而显示次网格线。
7.xscale 和 yscale 函数
在 matplotlib
中,xscale()
和 yscale()
函数用于设置坐标轴的缩放方式,即控制 x 轴和 y 轴的刻度类型。通过这些函数,你可以设置坐标轴为线性(linear
)、对数(log
)、对数平方(symlog
)等不同的缩放方式。
基本语法
ax.set_xscale(value)
ax.set_yscale(value)
参数说明
value: 刻度类型,可以是 'linear'(线性刻度)、'log'(对数刻度)、'symlog'(对称对数刻度)、'logit'(对数几率刻度)等。
使用实例:
1.对数缩放
import matplotlib.pyplot as plt
import numpy as np
x = np.logspace(0.1, 2, 100) # 创建对数分布的数据
y = np.sqrt(x)
plt.plot(x, y)
plt.xscale('log') # 设置 x 轴为对数缩放
plt.show()
2.其他的可自行尝试
xscale()
和 yscale()
的其他可选缩放类型
除了线性和对数缩放,matplotlib
还支持一些特殊的坐标轴类型,比如:
logit
:适用于显示概率数据,常用于机器学习中的概率值展示。symlog
:对数平方缩放,允许显示负数,适用于值跨越零的情况。
8.set_xlim 和 set_ylim 函数
set_xlim()
和 set_ylim()
函数用于设置坐标轴的显示范围,即控制 x 轴和 y 轴的数值区间。通过这些函数,你可以精确地控制坐标轴的最小值和最大值,从而调整图形的显示区域,突出显示特定的数据范围。
使用语法:
ax.set_xlim(left, right)
ax.set_ylim(bottom, top)
参数说明:
left
:x 轴的最小值。如果未指定,matplotlib
将自动决定。right
:x 轴的最大值。如果未指定,matplotlib
将自动决定。**kwargs
:额外的可选参数,用于设置 x 轴的其他属性,例如linear
、log
等。
使用实例:
1.设置x轴范围
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
# 设置 x 轴的范围
plt.xlim(2, 8) # 设置 x 轴范围为 [2, 8]
plt.show()
2.设置y轴的范围
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.plot(x, y)
# 设置 y 轴的范围
plt.ylim(-0.5, 0.5) # 设置 y 轴范围为 [-0.5, 0.5]
plt.show()
3.也可以给各个子图设置
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, axs = plt.subplots(2)
# 绘制第一个子图
axs[0].plot(x, y1)
axs[0].set_xlim(0, 5) # 设置第一个子图的 x 轴范围
axs[0].set_ylim(-1, 1) # 设置第一个子图的 y 轴范围
# 绘制第二个子图
axs[1].plot(x, y2)
axs[1].set_xlim(5, 10) # 设置第二个子图的 x 轴范围
axs[1].set_ylim(-1, 1) # 设置第二个子图的 y 轴范围
plt.show()
9.set_xticks 和 set_yticks 函数
Matplotlib 可以自动根据因变量和自变量设置坐标轴范围,也可以通过 set_xticks() 和 set_yticks() 函数手动指定刻度,接收一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。
使用语法:
ax.set_xticks(ticks)
ax.set_yticks(ticks)
参数说明:
ticks: 一个包含刻度位置的列表或数组
使用实例:
设置x轴刻度
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
# 设置 x 轴的刻度位置
plt.xticks([0, 2, 4, 6, 8, 10]) # 设置 x 轴刻度线的位置
plt.show()
次刻度线(Minor Ticks)
你也可以通过设置 minor=True
来控制次刻度线的位置。次刻度线通常用于显示更加细致的数据间隔。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
# 设置 x 轴的主刻度
plt.xticks([0, 2, 4, 6, 8, 10])
# 设置 x 轴的次刻度
plt.gca().set_xticks(np.arange(0, 10, 0.5), minor=True)
# 显示次刻度
plt.minorticks_on()
plt.show()
plt.xticks([0, 2, 4, 6, 8, 10])
设置了主刻度。plt.gca().set_xticks(np.arange(0, 10, 0.5), minor=True)
设置了次刻度,间隔为0.5
。plt.minorticks_on()
启用了次刻度的显示。
10.twinx 和 twiny 函数
twinx()
和 twiny()
函数用于创建具有共享 x 轴或 y 轴的多个坐标轴。它们使得在一个图形中绘制两个具有不同 y 轴(或 x 轴)刻度的图表成为可能。具体来说:
twinx()
用于创建共享 x 轴,但有独立 y 轴的第二个坐标轴。twiny()
用于创建共享 y 轴,但有独立 x 轴的第二个坐标轴。
这些函数非常有用,尤其是在需要在同一张图表上展示具有不同尺度的数据时。
使用语法:
ax2 = ax.twinx()
ax
是原始坐标轴对象,调用twinx()
会创建一个新的坐标轴ax2
,该坐标轴共享ax
的 x 轴,但具有独立的 y 轴。
使用实例:
1.使用 twinx()
创建共享 x 轴的两个 y 轴
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.exp(x / 3)
fig, ax1 = plt.subplots()
# 绘制第一个 y 轴的图形
ax1.plot(x, y1, 'g-', label='sin(x)')
ax1.set_xlabel('x')
ax1.set_ylabel('sin(x)', color='g')
ax1.tick_params(axis='y', labelcolor='g')
# 创建共享 x 轴的第二个 y 轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b-', label='exp(x/3)')
ax2.set_ylabel('exp(x/3)', color='b')
ax2.tick_params(axis='y', labelcolor='b')
plt.show()
ax1
是第一个坐标轴,它绘制了sin(x)
数据,并且 y 轴的刻度是绿色的。ax2
是通过ax1.twinx()
创建的共享 x 轴的新坐标轴,它绘制了exp(x/3)
数据,y 轴刻度是蓝色的。
2.使用 twiny()
创建共享 y 轴的两个 x 轴
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x1 = np.linspace(0, 10, 100)
y = np.log(x1 + 1)
x2 = np.linspace(0, 100, 100)
fig, ax1 = plt.subplots()
# 绘制第一个 x 轴的图形
ax1.plot(x1, y, 'r-', label='log(x + 1)')
ax1.set_xlabel('x1')
ax1.set_ylabel('log(x + 1)', color='r')
ax1.tick_params(axis='y', labelcolor='r')
# 创建共享 y 轴的第二个 x 轴
ax2 = ax1.twiny()
ax2.plot(x2, y, 'g-', label='linear scale')
ax2.set_xlabel('x2')
ax2.tick_params(axis='x', labelcolor='g')
plt.show()
ax1
是第一个坐标轴,绘制了log(x + 1)
数据,并且 x 轴的刻度是红色的。ax2
是通过ax1.twiny()
创建的共享 y 轴的新坐标轴,它绘制了一个不同的数据集(线性数据),并且 x 轴刻度是绿色的。
3. 在同一张图中使用 twinx()
和 twiny()
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x1 = np.linspace(0, 10, 100)
y1 = np.sin(x1)
y2 = np.log(x1 + 1)
x2 = np.linspace(0, 100, 100)
fig, ax1 = plt.subplots()
# 绘制第一个 y 轴的图形
ax1.plot(x1, y1, 'r-', label='sin(x)')
ax1.set_xlabel('x1')
ax1.set_ylabel('sin(x)', color='r')
ax1.tick_params(axis='y', labelcolor='r')
# 创建共享 x 轴的第二个 y 轴
ax2 = ax1.twinx()
ax2.plot(x1, y2, 'b-', label='log(x + 1)')
ax2.set_ylabel('log(x + 1)', color='b')
ax2.tick_params(axis='y', labelcolor='b')
# 创建共享 y 轴的第二个 x 轴
ax3 = ax1.twiny()
ax3.plot(x2, y1, 'g-', label='sin(x) on a different scale')
ax3.set_xlabel('x2')
ax3.tick_params(axis='x', labelcolor='g')
plt.show()
ax1
和ax2
使用twinx()
共享 x 轴,并分别显示sin(x)
和log(x + 1)
数据。ax3
使用twiny()
创建一个新的坐标轴,且它共享 y 轴,显示了不同的数据(sin(x)
)。
11.柱状图
柱状图(Bar Chart)是一种常用的数据可视化工具,用于展示分类数据的分布情况。
使用语法:
ax.bar(x, height, width=0.8, bottom=None, align='center', **kwargs)
参数说明:
-
x: 柱状图的 X 轴位置。
-
height: 柱状图的高度。
-
width: 柱状图的宽度,默认为 0.8。
-
bottom: 柱状图的底部位置,默认为 0。
-
align: 柱状图的对齐方式,可以是 'center'(居中对齐)或 'edge'(边缘对齐)。
-
**kwargs: 其他可选参数,用于定制柱状图的外观,如 color、edgecolor、linewidth 等。
使用实例:
1.基本柱状图
import matplotlib.pyplot as plt
# 类别和对应的值
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 10]
plt.bar(categories, values) # 绘制柱状图
plt.xlabel('Categories') # x 轴标签
plt.ylabel('Values') # y 轴标签
plt.title('Basic Bar Chart') # 图表标题
plt.show()
2.设置颜色等
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 10]
# 设置柱子颜色
plt.bar(categories, values, color='skyblue')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart with Custom Colors')
plt.show()
3.水平柱状图
通过 barh()
函数,可以绘制水平的柱状图。
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 10]
# 绘制水平柱状图
plt.barh(categories, values, color='lightgreen')
plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Horizontal Bar Chart')
plt.show()
4.堆叠柱状图 (Stacked Bar Chart)
堆叠柱状图通过将多个数据系列“堆叠”在同一个柱子上,以显示每个类别的多个值。
import matplotlib.pyplot as plt
import numpy as np
# 类别和不同数据系列
categories = ['A', 'B', 'C', 'D']
values1 = [3, 7, 5, 10]
values2 = [1, 4, 2, 6]
# 创建堆叠柱状图
plt.bar(categories, values1, label='Series 1', color='skyblue')
plt.bar(categories, values2, bottom=values1, label='Series 2', color='lightcoral')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Stacked Bar Chart')
plt.legend()
plt.show()
5.分组柱状图 (Grouped Bar Chart)
分组柱状图适用于展示每个类别下多个系列数据的比较,每个类别内会有多个并排的柱子。
import matplotlib.pyplot as plt
import numpy as np
# 类别和不同数据系列
categories = ['A', 'B', 'C', 'D']
values1 = [3, 7, 5, 10]
values2 = [1, 4, 2, 6]
# 设置柱子宽度
bar_width = 0.35
index = np.arange(len(categories))
# 绘制第一个系列
plt.bar(index, values1, bar_width, label='Series 1', color='skyblue')
# 绘制第二个系列
plt.bar(index + bar_width, values2, bar_width, label='Series 2', color='lightcoral')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Grouped Bar Chart')
plt.xticks(index + bar_width / 2, categories) # 设置 x 轴的标签位置
plt.legend()
plt.show()
12.直方图
直方图(Histogram)是一种常用的数据可视化工具,用于展示数值数据的分布情况。
使用语法:
ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, **kwargs)
使用实例:
from matplotlib import pyplot as plt
import numpy as np
# 生成随机数据,生成均值为 0,标准差为 1 的标准正态分布的随机样本
data = np.random.randn(1000)
# 创建图形和子图
fig, ax = plt.subplots()
# 绘制直方图
ax.hist(data, bins=30, color='skyblue', edgecolor='black')
# 设置标题和标签
ax.set_title('Simple Histogram')
ax.set_xlabel('Value')
ax.set_ylabel('Frequency')
# 显示图形
plt.show()
13.饼图
饼图是一种常见的可视化图表,用于展示各部分占总体的比例,适用于类别数据的可视化。matplotlib
提供了 pie()
函数来绘制饼图。饼图将一个圆形分成若干扇形,每个扇形的面积与该类别的数值成比例。
使用语法:
ax.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)
参数说明:
x
:各部分的数值或比例,必须是一个列表或数组。labels
:对应每个部分的标签,通常是类别名。colors
:为每个部分指定颜色,可以传递颜色名称、RGB值、或颜色列表。explode
:用于突出显示某个部分,传递一个与x
长度相同的数组,指定每个部分的“爆炸”程度。autopct
:显示百分比的格式,可以是'%1.1f%%'
或自定义格式化字符串。startangle
:饼图起始角度,控制第一个扇形的位置。radius
:饼图的半径,控制饼图的大小。wedgeprops
:字典,控制扇形的外观,例如边框颜色、宽度等。
使用实例:
1.基本饼图
import matplotlib.pyplot as plt
# 数据
sizes = [15, 30, 45, 10] # 各部分的数值
labels = ['A', 'B', 'C', 'D'] # 各部分的标签
# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Basic Pie Chart')
plt.show()
sizes
:表示每个部分的大小。labels
:为每个部分指定标签。autopct='%1.1f%%'
:显示每个部分所占的百分比,并保留一位小数。
2.指定颜色
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'] # 自定义颜色
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%')
plt.title('Pie Chart with Custom Colors')
plt.show()
3. 突出显示某一部分(explode
)
通过 explode
参数,你可以将某一部分突出显示,常用于突出重要的类别。
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
explode = (0.1, 0, 0, 0) # 让第一个部分('A')突出显示
plt.pie(sizes, labels=labels, autopct='%1.1f%%', explode=explode)
plt.title('Pie Chart with Exploded Section')
plt.show()
explode
的值(0.1, 0, 0, 0)
表示第一个部分'A'
被“爆炸”出来,其他部分保持原位。
4. 调整起始角度(startangle
)
你可以通过 startangle
参数旋转饼图,控制第一个扇形的起始位置。
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Pie Chart with Custom Start Angle')
plt.show()
startangle=90
将饼图的第一个扇形旋转到 90 度的位置。
5.圆形饼图和椭圆形饼图
通过设置 radius
参数,可以调整饼图的大小
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
# 设置 radius 参数
plt.pie(sizes, labels=labels, autopct='%1.1f%%', radius=1.2)
plt.title('Pie Chart with Custom Radius')
plt.show()
6.带有百分比的自定义格式:
如果你希望显示特定格式的百分比,可以使用 autopct
参数。常用的格式化字符串有:
'%1.1f%%'
:保留 1 位小数的百分比。'%d%%'
:显示整数百分比。lambda x: f'{x:.2f}%'
:使用自定义格式。
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
# 自定义百分比格式
plt.pie(sizes, labels=labels, autopct=lambda x: f'{x:.2f}%')
plt.title('Pie Chart with Custom Percentage Format')
plt.show()
7.显示百分比之外的更多信息:
你也可以在 autopct
中显示除了百分比之外的其他信息。
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
# 自定义百分比格式
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90,
wedgeprops={'edgecolor': 'black'}) # 为每个扇形添加边框
plt.title('Pie Chart with Edge Borders')
plt.show()
8.显示饼图的中心
为了让饼图看起来更美观,通常会将饼图的中心设置为空白区域,通过绘制一个白色圆圈覆盖住中央部分。
import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
# 绘制中心圆,白色覆盖饼图中心
centre_circle = plt.Circle((0, 0), 0.70, color='white', fc='white', linewidth=1)
plt.gca().add_artist(centre_circle)
plt.title('Donut Chart (Pie Chart with Center Cut Out)')
plt.show()
14.散点图
散点图(Scatter Plot)是一种常用的数据可视化工具,用于展示两个变量之间的关系。
使用语法:
ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)
参数说明:
-
x: X 轴数据。
-
y: Y 轴数据。
-
s: 点的大小,可以是标量或数组。
-
c: 点的颜色,可以是标量、数组或颜色列表。
-
marker: 点的形状,默认为 'o'(圆圈)。
-
cmap: 颜色映射,用于将颜色映射到数据。
-
norm: 归一化对象,用于将数据映射到颜色映射。
-
vmin, vmax: 颜色映射的最小值和最大值。
-
alpha: 点的透明度,取值范围为 0 到 1。
-
linewidths: 点的边框宽度。
-
edgecolors: 点的边框颜色。
-
**kwargs: 其他可选参数,用于定制散点图的外观。
使用实例:
1.基本
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 绘制散点图
plt.scatter(x, y)
plt.xlabel('X Axis') # x 轴标签
plt.ylabel('Y Axis') # y 轴标签
plt.title('Basic Scatter Plot') # 图表标题
plt.show()
x
和y
是我们要绘制的两个变量。scatter()
函数根据x
和y
的值绘制出散点图。
2.设置点的颜色和大小
你可以通过 c
参数设置每个点的颜色,通过 s
参数设置每个点的大小。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
sizes = [20, 50, 100, 200, 500] # 设置点的大小
colors = [0, 1, 2, 3, 4] # 设置点的颜色,数字会映射为不同的颜色
plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.7)
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Scatter Plot with Custom Colors and Sizes')
plt.colorbar() # 显示颜色条,映射到 `c` 的值
plt.show()
sizes
列表决定了每个点的大小。colors
列表决定了每个点的颜色,cmap
用于定义颜色的映射。alpha=0.7
设置透明度,使得点稍微透明。colorbar()
添加一个颜色条,帮助我们理解颜色和数值的对应关系。
2.设置点的形状和透明度
你可以通过 marker
参数设置散点的形状,并通过 alpha
控制透明度。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.scatter(x, y, marker='^', color='red', alpha=0.5)
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Scatter Plot with Custom Marker and Transparency')
plt.show()
marker='^'
设置每个数据点为三角形。color='red'
设置所有点的颜色为红色。alpha=0.5
设置透明度为 50%。
3.不同颜色、大小和形状的多个类别
如果数据分为多个类别,可以使用不同的颜色、大小或形状来区分不同的类别
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11, 8, 6, 7, 10, 12]
categories = ['A', 'A', 'B', 'B', 'A', 'B', 'B', 'A', 'A', 'B']
# 为不同类别设置颜色和大小
colors = ['red' if cat == 'A' else 'blue' for cat in categories]
sizes = [50 if cat == 'A' else 100 for cat in categories]
plt.scatter(x, y, c=colors, s=sizes, alpha=0.6)
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Scatter Plot with Different Categories')
plt.show()
- 根据
categories
列表的内容,将点的颜色和大小分为两类。 red
表示类别 A,blue
表示类别 B。- 点的大小根据类别分别为 50 和 100。
4.带有回归线的散点图
散点图常常用来查看两个变量之间是否存在某种关系。如果你希望在散点图中添加回归线(如线性拟合线),可以使用 numpy
来计算回归线的参数。
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 计算回归线
m, b = np.polyfit(x, y, 1) # 线性拟合
# 绘制散点图
plt.scatter(x, y, color='blue')
# 绘制回归线
plt.plot(x, [m*i + b for i in x], color='red', linestyle='--')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Scatter Plot with Regression Line')
plt.show()
np.polyfit(x, y, 1)
计算线性回归的斜率和截距,1
表示拟合一次方程(线性关系)。plt.plot()
绘制回归线,color='red'
设置回归线的颜色为红色。
5.散点图的自定义样式
调整坐标轴的范围:
使用 xlim()
和 ylim()
来设置 x 和 y 轴的范围。
plt.xlim(0, 6)
plt.ylim(0, 12)
设置网格线:
使用 grid(True)
来显示网格。
plt.grid(True)
添加数据标签:
可以通过循环在每个点上添加标签,便于理解数据点的意义。
for i in range(len(x)):
plt.text(x[i], y[i], f'({x[i]}, {y[i]})')
标签:plot,plt,回顾,子图,基础,Matplotlib,matplotlib,np,import
From: https://blog.csdn.net/ETH_escober/article/details/144747438