matplotlib 是一个用于创建静态、动态和交云图的 Python 绘图库。它可以用于 Python 脚本、Python 和 IPython shell、Jupyter 笔记本、web 应用服务器以及四个图形用户界面工具包中。matplotlib 尝试让简单的事情更简单,让困难的事情成为可能。你可以生成线图、柱状图、误差线图、散点图、直方图等许多不同格式的图表。
import matplotlib.pyplot as plt
import numpy as np
plt.plot 折线图
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
*args:可以是一个或多个表达 x, y 值的数组。也可以通过提供 x, y, ‘format’ 的组合来控制线型和颜色。‘format’ 是一个字符串,用于指定颜色和线型,例如 ‘ro-’ 表示红色实线带圆点标记。
scalex, scaley:布尔值,用于确定是否自动缩放 x 轴或 y 轴的范围以适应数据的范围。
data:可选参数,如果提供,它是一个字典,用于指定通过字符串选择的变量来绘图。
**kwargs:关键字参数,用于指定绘图属性,如线条颜色(color)、线型(linestyle)、线宽(linewidth)、标记(marker)、标记大小(markersize)、标记颜色(markerfacecolor)等。
常用参数和示例
- 颜色(color):设置线的颜色,例如 color=‘green’ 或 color=‘#006400’。
- 线型(linestyle):设置线的样式,如实线(‘-’)、虚线(‘–’)、点线(‘-.’)、点虚线(‘:’)等。
- 标记(marker):在每个数据点上设置标记,例如圆形(‘o’)、方形(‘s’)、星形(‘*’)等。
- 线宽(linewidth):设置线的宽度,浮点数表示。 标签(label):设置图例的标签文本。
plt.plot(x, y, color='red', linestyle='--', marker='o', label='Data 1')
plt.legend()
plt.title('Custom Plot')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.show()
plt.scatter 散点图
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, alpha=None, linewidths=None, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
x, y:长度相同的数组,分别表示散点的 x 坐标和 y 坐标。
s:标量或数组形式,可选。表示点的大小。如果是数组,每个点的大小根据数组中的值来确定。
c:颜色,可选。可以是单个颜色格式的字符串,也可以是一系列颜色。
marker:标记样式,可选。matplotlib 支持多种点的标记样式,例如 'o' 表示圆圈,'s' 表示正方形等。
cmap:Colormap,可选。当 c 是一个浮点数数组时,cmap 将用于映射到颜色。
norm:Normalize 实例,可选。用于在数据和颜色映射之间进行归一化。
alpha:标量,可选。点的透明度。
linewidths:标量或数组形式,可选。点的边缘宽度。
edgecolors:颜色或颜色序列,可选。点的边缘颜色。
plotnonfinite:布尔值,可选。是否绘制非有限数(NaN、INF、-INF)的点。
data:字典形式的 data 参数,可选。如果给定,x 和 y 的值可以通过字符串键从中提取。
**kwargs:其他关键字参数,可以用于设置更多的属性(如边缘颜色、点的形状等)。
常用参数和示例
import numpy as np# 生成数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50) # 颜色数组
sizes = 1000 * np.random.rand(50) # 点的大小数组# 创建散点图,自定义颜色和大小
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')# 添加颜色条
plt.colorbar()# 设定标题和坐标轴标签
plt.title('Customized Scatter Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')# 显示图形
plt.show()
在这个示例中,c 参数控制点的颜色,s 参数控制点的大小,而 alpha 参数控制点的透明度。cmap 参数定义了一个颜色映射,plt.colorbar() 添加了一个颜色条以解释颜色的含义。
plt.xlabel 和 plt.ylabel
这两个函数分别用来设置 x 轴和 y 轴的标签。
plt.xlabel(label, fontdict=None, labelpad=None, loc=None, **kwargs)
plt.ylabel(label, fontdict=None, labelpad=None, loc=None, **kwargs)
plt.xlabel('X Axis Label') # 设置 x 轴的标签
plt.ylabel('Y Axis Label') # 设置 y 轴的标签
label:字符串,即坐标轴的标签文本。
fontdict:字典,可用于自定义标签的字体样式。这可以包括字体大小 (‘fontsize’)、字体颜色 (‘color’)、字体粗细 (‘fontweight’) 等。
labelpad:数值,指定标签与坐标轴之间的距离(以点为单位)。
loc:字符串,指定标签的位置。对于 xlabel,可选值包括 ‘left’、‘center’、‘right’。对于 ylabel,可选值包括 ‘bottom’、‘center’、‘top’。这个参数在较新版本的 Matplotlib 中引入,可能在一些旧版本中不可用。
**kwargs:其他关键字参数,可以用来设置文本属性,如 rotation(文本旋转角度)。
import matplotlib.pyplot as plt# 绘制一个简单的图形
plt.plot([1, 2, 3], [4, 5, 6])# 设置 x 轴和 y 轴标签,自定义样式
plt.xlabel('X Axis Label', fontdict={'fontsize': 14, 'fontweight': 'bold', 'color': 'blue'}, labelpad=15, loc='right')
plt.ylabel('Y Axis Label', fontdict={'fontsize': 14, 'fontweight': 'bold', 'color': 'green'}, labelpad=20, loc='top')plt.show()
plt.xlim 和 plt.ylim
这两个函数用来设置图表的 x 轴和 y 轴的显示范围。
plt.xlim(left, right)
plt.ylim(bottom, top)
left:x 轴的最小值。
right:x 轴的最大值。
bottom:y 轴的最小值。
top:y 轴的最大值。
这些参数可以是数字,表示具体的数值范围。如果你想要自动确定某一端的范围(例如,只设置最小值),你可以将相应的参数留空或设置为 None
。
plt.xlim(0, 10) # 设置 x 轴的范围从 0 到 10
plt.ylim(-1, 1) # 设置 y 轴的范围从 -1 到 1
在设置轴限之前,你可能想知道当前的轴限是什么。plt.xlim() 和 plt.ylim() 在没有任何参数的情况下可以返回当前的轴限:
current_xlim = plt.xlim()
current_ylim = plt.ylim()
如果你只想设置轴的一端(比如,只设置最小值),可以这样做:
plt.xlim(None, 6) # 只设置 x 轴的最大值
plt.ylim(0, None) # 只设置 y 轴的最小值
plt.title
此函数用来设置整个图表的标题。
plt.title('Chart Title') # 设置图表的标题
常用参数
label (或第一个位置参数)
说明:标题的文本内容。
类型:字符串。
fontdict
说明:一个字典,用于控制标题的字体样式。可以包括诸如 'fontsize'、'fontweight'、'color' 等关键字来自定义标题文本的外观。
类型:字典。
loc
说明:标题的位置。默认值是 'center',表示标题居中。其他可选值包括 'left' 和 'right'。
类型:字符串。
pad
说明:标题与图表顶部边缘之间的间距,单位是点(pt)。
类型:数值。
plt.legend
用于添加图例,区分图中的不同数据集。
plt.legend(handles=None, labels=None, loc='best', title=None, frameon=True, shadow=False, fancybox=False, framealpha=1.0, bbox_to_anchor=None, borderaxespad=0.5, **kwargs)
常用参数说明
handles:一组用于添加图例项的艺术家(如线条、条形图等),通常不需要手动设置,因为当你在绘图命令(如 plt.plot())中使用 label 参数时,Matplotlib 会自动处理。
labels:一组字符串,用于指定每个图例项的标签。如果 handles 被指定,则 labels 也需要明确设置以匹配。
loc:指定图例的位置。可以是字符串(如 ‘upper right’、‘lower left’、‘center’ 等)或一个包含两个浮点数的元组,表示图例左下角的相对坐标(在轴坐标系中)。‘best’ 位置(默认)会自动选择最不碍事的位置。
title:字符串,用于给图例添加标题。
frameon:布尔值,指定是否显示图例边框。
shadow:布尔值,当设置为 True 时,图例会有阴影效果。
fancybox:布尔值,当设置为 True 时,会使用圆角边框绘制图例框。
framealpha:数值,控制图例框的透明度。
bbox_to_anchor:元组或 BboxBase 实例,用于确定图例框的位置。这在将图例放在轴的外部特别有用。
borderaxespad:数值,控制图例框与轴的边界之间的填充。
import matplotlib.pyplot as plt# 绘制两组数据
plt.plot([1, 2, 3], [4, 5, 6], label='Line A')
plt.plot([1, 2, 3], [6, 5, 4], label='Line B')# 添加图例
plt.legend(title='Legend Title', loc='upper left', frameon=False, shadow=True, fancybox=True, framealpha=0.5)plt.show()
plt.grid
用于添加或调整图表中的网格线,这有助于估计数据点位置。
plt.grid(visible=None, which='major', axis='both', **kwargs)
常用参数说明
visible:布尔值,用于控制网格线的显示与否。如果设置为 False,将隐藏网格线。
which:指定是添加主要的网格线 (‘major’)、次要的网格线 (‘minor’),还是两者都添加 (‘both’)。默认值是 ‘major’。
axis:指定添加网格线的轴。可以是 ‘x’、‘y’ 或 ‘both’。默认值是 ‘both’,即在 x 轴和 y 轴上都添加网格线。
**kwargs:提供额外的关键字参数来自定义网格线的样式,例如颜色 (color)、线型 (linestyle)、线宽 (linewidth) 等。
import matplotlib.pyplot as plt# 绘制一个简单的图形
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])# 添加并自定义网格线
plt.grid(True, which='both', axis='both', color='gray', linestyle='--', linewidth=0.5)plt.show()
plt.figure
创建一个新的图形或激活一个现有图形。
常用参数:
figsize:元组,指定图形的宽度和高度,单位为英寸。
dpi:整数,指定图形的分辨率,即每英寸点数。较高的 DPI 提供更高的图形质量。
facecolor:图形的背景颜色。
edgecolor:图形边缘的颜色。
num:图形的编号或名称。如果指定了编号,plt.figure 将激活现有图形;否则,将创建一个新图形。
import matplotlib.pyplot as pltplt.figure(figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
plt.text
用于在图形中的任意位置添加文本。
常用参数:
x, y:浮点数,表示文本在图形中的位置(基于数据的坐标系)。
s:字符串,你想在图形中显示的文本内容。
fontdict:字典,可用于控制文本的外观,如字体大小 (‘fontsize’)、字体颜色 (‘color’) 和字体风格 (‘fontstyle’) 等。
horizontalalignment, verticalalignment:字符串,控制文本的对齐方式。水平对齐方式可为 ‘left’, ‘center’, ‘right’;垂直对齐方式可为 ‘top’, ‘center’, ‘bottom’,
‘baseline’。
rotation:数值或字符串,控制文本的旋转角度。
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.text(2, 8, 'Example Text', fontsize=12, color='red', horizontalalignment='center', verticalalignment='bottom', rotation=45)
plt.show()