Python — matplotlib.pyplot 绘图模块及常用函数

import matplotlib.pyplot as plt

1. 基本用法与折线图

pyplot 模块的常用函数

函数描述
figure创建一个空白画布,可以指定画布的大小和像素
figure.add_subplot 方法创建并选中一个子图,可以指定子图所在的行号,列号和标号
subplotsfig,ax = plt.subplots() 同时在 subplots 里建立一个 fig 对象、一个 axis 对象数组
title在当前绘图区中添加标题,可以指定标题的名称、颜色、字体等参数
xlabel在当前绘图区中添加 x x x 轴名称,可以指定名称、颜色、字体等参数
ylabel在当前绘图区中添加 y y y 轴名称,可以指定名称、颜色、字体等参数
xlim指定当前绘图区 x x x 轴的范围
ylim指定当前绘图区 y y y 轴的范围
xticks指定 x x x 轴刻度的数目与取值
yticks指定 y y y 轴刻度的数目与取值
legend指定当前绘图区的图例,可以指定图例的大小、位置、标签
plot绘制点以及点之间的连续线条(折线图)
savefig保存绘制的图形
show在本机显示全部画布 figure 上的图形

折线图函数: matplotlib.pyplot.plot()

matplotlib.pyplot.plot(x, y, format_string, ...)

在当前画布 figure 的当前绘图区 Axes 中根据提供的 x,y 中的数据,在坐标系中一一对应绘制各点,以及上一点与下一点之间的连续线条。(折线图)

返回:由 matplotlib.lines.Line2D 线条组成的列表。

常用参数:

  • x:x 轴数据,以类似数组的数据提供。
  • y:y 轴数据,以类似数组的数据提供。
  • format_string:控制点与线的格式字串 ,由表示色彩、点的形状以及线条线型的字符组合而成。

format_string 数据格式字符串由三项组成,格式为:

format_string = '[颜色][标记形状][线型]'

分别表示绘制的颜色、数据点的标记形状或线型,其中这三项每一项都是可选的,并可前后自由组合搭配。

常用 format_string 参数

颜色缩写说明(颜色全称)点形状说明线型说明
'b'蓝色(blue)'.''-'实线
'g'绿色(green)'o''--'虚线
'r'红色(red)'+'加号'-.'点划线
'y'黄色(yellow)'*'星号':'点构成的虚线
'k'黑色(black)'v'向下三角形
'c'青色(cyan)'^'向上三角形
'm'紫红色(magenta)'<'向左三角形
'w'白色(white)'>'向右三角形

常用函数 grid () 控制各轴网格线的显示状态

matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)

常用参数:

  • b:逻辑值或 None。决定是否显示网格线。如果提供了任何 kwargs,则假定您要打开网格,并且 b 将被设置为 True。如果 bNone 且没有 kwargs,则将切换网格线的可见性。
  • which:哪些层级的刻度上需要网格线。主刻度、次刻度、两者:'major''minor''both'
  • axis:上述网格线出现在哪根轴。'both''x''y'

常用函数 savefig() 保存当前画布内容

matplotlib.pyplot.savefig(fname, dpi=None, quality=None,bbox_inches=None, ...)

常用参数:

  • fname:字符串文件名或者已打开的文件对象。如果 format 参数没有被设置,则输出格式从扩展名中获得(缺省:“PNG”)。
  • 支持的图像文件格式:eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff
  • dpi:分辨率。以每英寸点数为单位。如果为 None,则默认为使用当前画布图像的 dpi 值。
  • quality:图像质量。范围从 1(最差)到 95(最佳)。仅当格式为 jpg 或 jpeg 时适用,否则忽略。如果为 None,则默认为(默认值:95)。应避免超过 95 的值;100 则完全禁用 JPEG 优化。
  • bbox_inches:以英寸为单位的边界框:仅保存图形的给定部分。如果为 'tight',则为当前图像的 tight bbox。(保存矢量图不完整时可在保存时加上 bbox_inches = 'tight'

常用函数 legend() 绘制图例

matplotlib.pyplot.legend(labels, loc, bbox_to_anchor, title, fontsize, ...)
#实用格式:
legend()
legend(labels)
legend(handles, labels)

常用参数:

  • handles:已绘制的各种图形实例。可以用类似列表的方式提供。缺省值为所有已绘制的图形。
  • labels:图例文字。可用类似列表的方式提供。缺省值为绘制图形时在绘制的方法或函数中所提供的 label 参数。
  • loc:相对位置。它和 bbox_to_anchor 参数协同配合决定图例的最终位置。
    • 当不提供 bbox_to_anchor 参数时,loc 决定图例在图形边界中出现的相对位置。
    • loc 为两个元素的元组时,表示图例的左下角的 x,y 坐标(在整个坐标长度中的占比),此时 bbox_to_anchor 参数将失效。
    • 通常可以用字符串或数字来表示在区域中的相对位置 (见下表)。
  • bbox_to_anchor:图例锚定辅助参数:
    • (x, y, width, height):以四个元素的元组给出 bbox(相对区域),x, y 为该区域的左下角,其余两个为区域的宽和高,所有数据都是占比数。此时 loc 参数将被解释成在此区域中的相对位置。
    • (x,y):以两个元素的元组给出的相对坐标,此时 loc 参数将被被解释成为图例本身的“方位点”的坐标占比。
  • title:图例的标题。
  • fontsize:文字大小。数值型或字符串描述: 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'
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

常用函数 text() 添加文字

matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)

向图像中添加文本。

常用参数:

  • x, y: 浮点数, 放置文本的位置。默认情况下,这是在数据坐标中。可以使用 transform 参数更改坐标系。
  • s: 字符串, 要添加的文本。

返回:创建的 Text 实例。

pyplot 的 rc 参数

matplotlib.pyplot.rcParams 是一个字典,其中每个键值对的 “键”,对应以字符串形式表现的 rc 参数名,“值” 对应该参数的值。通过修改字典键值对中的值,即可设定 rc 参数。

中文字符正常显示所需参数设置

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['font.size'] = 14  # 调整字体大小
plt.rcParams['text.usetex'] = False  # 不使用 tex (与中文不能同时使用)

其它常用 rc 参数

rc 参数名称说明取值
lines.linewidth线条宽度0~10,默认值1.5
lines.linestyle线条样式4 种样式:“-”,”–”,”-.”,”:”
lines.marker线条上点的样式可以取”o”,”D”,”+”等
lines.markersize点的大小0~10,默认值1

2. 绘制多个子图

方法一: 先用 figure() 函数创建画布, 再用 figure.add_subplot() 方法创建子图

创建画布

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, ...)

返回:Figure 画布对象
常用参数:

  • num:画布的编号。如为 None,则系统自动提供(从 1 开始)。如为字符串,则作为画布窗口中的标题。
  • figsize:以英寸为单位的画布的尺寸,以 [ 宽, 高 ] 方式提供。缺省值为 [6.4, 4.8]
  • dpi:图像分辨率,设置每英寸的点数。缺省值为 100dpi
  • facecolor:画布的颜色。

创建子图

matplotlib.figure.Figure.add_subplot(nrows, ncols, index, **kwargs)

创建的子图将在具有 nrows 行和 ncols 列的虚拟布局网格上占据索引位置。索引从左上角的 1 位置开始并向右向下逐渐增加。

返回:创建的子图,类型为 axes.SubplotBase 或者其它 Axes 的子类。

一次只能创建一个子图。

常用参数:

  • nrows:在画布中的虚拟布局子图行数。
  • ncols:在画布中的虚拟布局子图列数。
  • index:在虚拟布局中创建的子图的索引号。决定子图的具体位置。

可以提供一个三位的数字,以合并的方式决定 nrowsncolsindex,因为通常行数和列数不会超过 9。
也可以三个参数分开提供。

方法二: 用 plt.subplots() 函数创建画布和子图

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, num=None, ...)

创建一张画布和一组子图。

返回:一个两个元素的元组:

  1. figFigure 画布
  2. axAxes 对象(子图)或 Axes 对象数组(多个子图)

常用参数:

  • nrowsncols:可选,默认值:1。子图网格的行数/列数。
  • sharexsharey:逻辑值或 'none''all''row''col'。控制 x (sharex) 或 y (sharey) 轴之间的属性共享:
    • True"all":x 轴或 y 轴将在所有子图中共享。
    • False"none":每个子图的 x 轴或 y 轴将是独立的。
    • "row":每个子图行将共享一个 x 轴或 y 轴。
    • "col":每个子图列将共享一个 x 轴或 y 轴。
    • 当子图沿列具有共享的 x 轴时,仅创建底部子图的 x 刻度标签。同样,当子图沿行具有共享的 y 轴时,仅创建第一列子图的 y 刻度标签。若要稍后打开其他子图的刻度标签,可使用 tick_params
  • num:指定画布编号。在指定的画布上创建子图。

plt 常用函数 tight_layout()

plt.tight_layout()

调整子图之间和周围的填充。可用于解决子图间轴标签、刻度标签以及标题重合的问题。

3. 散点图与拟合

散点图函数 scatter()

Axes.scatter (x, y, s=None, c=None, marker=None, alpha=None, linewidths=None, edgecolors=None, ... **kwargs)

功能:绘制散点图。

常用参数:

  • x, y:散点图的数据源。类数组数据。
  • s, c:点标记的尺寸(正常标记尺寸的平方)、标记的颜色。
  • marker:标记的风格,
  • alpha:透明度。0 透明,1 不透明。
  • linewidths:标记边缘线的宽度。
  • edgecolors:标记边缘线的颜色。

numpy 补充

多元正态分布矩阵

numpy.random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)

返回:数组
常用参数:

  • mean:是多维分布的均值。
  • cov:协方差矩阵。
  • size:指定生成的正态分布矩阵的大小。

多项式拟合函数

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

返回:通过 y = f ( x ) y=f(x) y=f(x) 关系中大量 x x x y y y 的对应数据,以数组类型返回拟合后的多项式系数。
常用参数:

  • x, y:多项式 y = f ( x ) y=f(x) y=f(x) 中大量实际 x x x 值和 y y y 值,以类似数组方式提供。
  • deg:设定多项式中所希望的最高阶数。

多项式对象

numpy.poly1d(c_or_r, r = False, variable=None)

根据多项式系数,封装并返回多项式对象,以便进一步根据多项式计算更多的 x x x 值所对应的 y y y 值。

返回:多项式对象。如要算出真正的多项式的值,需要将多项式对象当作函数使用,参数可以是多个 x x x 值的序列,可得到多个多项式的结果值。
常用参数:

  • c_or_r :多项式的系数,类数组型。以幂次递减,或者如果 r 参数的值为True,则表示为多项式的根(多项式的值为 0 时 x 的值)。例如:
    • poly1d([1, 2, 3]) 代表 x 2 + 2 x + 3 x^2 + 2x + 3 x2+2x+3
    • poly1d([1, 2, 3], True) 代表 ( x − 1 ) ( x − 2 ) ( x − 3 ) = x 3 − 6 x 2 + 11 x − 6 (x-1)(x-2)(x-3) = x^3 - 6x^2 + 11x -6 (x1)(x2)(x3)=x36x2+11x6
  • r : 布尔型,可选。 如果为 True,则 c_or_r 指定多项式的根。默认值为 False

多项式对象属性:

  • c:多项式的各个系数
  • r:多项式的根(多项式的值为 0 时 x 的值)
  • o:多项式的阶数(最高幂次数)

离散点拟合线绘制

  • 根据数据调用 numpy.polyfit() 函数,获取多项式各项系数。
  • 根据多项式系数调用 numpy.poly1d() 函数构造多项式对象。
  • 通过类似函数调用的手法调用多项式对象,获得直线上各点的数据。(也可用 np.polyval() 得到拟合的预测值,参见 polyfit 进行多项式拟合
  • 根据直线上各个点的数据使用 matplotlib.pyplot.plot() 函数绘制直线。

pandas 的散点矩阵图函数

pandas.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal='hist', marker='.',…… **kwargs)

常用参数:

  • framepandas dataframe 对象。
  • diagonal: 对角线图形类型。‘hist’, ‘kde’ 中选择1个:
    • 'hist':表示直方图 (Histogram plot)
    • 'kde':表示核密度估计 (Kernel Density Estimation)。
    • 默认 'hist'。需要 scipy 模块的支持。

4. 其它统计图

直方图

Axes.hist(x, bins=None, range=None, histtype='bar', label=None, ...**kwargs)

根据数据绘制直方图。

常用参数:

  • x:指定要绘制直方图的数据。
  • bins:指定直方图条形的个数,默认 10。或序列表示的若干个区域边界。
  • range:指定直方图数据的上下界,超出范围的将被忽略。默认包含绘图数据的最大值和最小值。
  • histtype:画图的形状: 'bar', 'barstacked', 'step', 'stepfilled'

返回值:一个三个元素的元组,三个元素分别为:

  • n:表示每一区间的数据个数,并组成序列。
  • bins:区间分界点组成的序列。个数为 n 的长度 + 1 +1 +1
  • patches:各个分区对象组成的序列。

饼图

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, ...)

常用参数:

  • x:每块扇形占总和的百分比数值,如果 sum(x) > 1 >1 >1 会使用 sum(x) 自动计算每块占总的百分比。
  • explode:每块扇形被炸离中心的距离,以相对于半径的比例来指定。
  • labels:每块扇形外侧显示的说明文字(数据标签)
  • colors:每块扇形的默认颜色: ‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’
  • autopct:控制饼图内百分比文字格式设置,可以使用格式化字符串。
  • pctdistance:饼内文字离开中心的距离,以相对于半径的比例来指定 autopct 的位置刻度, 默认值为 0.6
  • shadow:在饼图下面画一个阴影。默认值:False,即不画阴影;
  • labeldistancelabel 标签的绘制位置,类似于 pctdistance,相对于半径的比例,默认值为 1.1, 如 < 1 <1 <1 则绘制在饼图内侧
  • startangle:起始绘制角度,默认图是从 x 轴正方向逆时针画起。

柱状图

(1) 用 plt.bar()

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, yerr, ...**kwargs)

常用参数:

  • x:x 轴数据。通常,每个分类与连续的各个整数对应,给 height 在 x 轴上定位。
  • height:y 轴对应柱的高度。数据个数与 x 的数据个数相同。
  • width:x 轴对应柱的相对宽度(等分宽度中的占比 ),默认 0.8 (保证柱与柱之间留有 0.2 的空隙)。
  • bottom:y 轴基准值,默认为 0。
  • yerr:y 轴误差线数据。

(2) 用 pandas 的绘图功能

DataFrame.plot.bar (x=None, y=None, **kwargs)

常用参数:

  • x:各个分类的名字,如果不指定,则使用 DataFrame 的行索引名作为各个分类名。
  • y:各个分类的数值数据,如果不指定,则使用 DataFrame 的所有数值列数据,列名为图例中的数据名。
  • rot:轴刻度文字的角度。
  • xlabelylabel:x 和 y 轴的轴标签。
  • xlimylim:以2个元素的元组或列表决定 x 或 y 轴的上下限。
  • title:子图标签。
  • grid:逻辑值,表示是否显示网格线(x、y 轴同时控制)

5. 等高线图和三维表面图

等高线图

matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)

绘制等高线。

matplotlib.pyplot.contourf([X, Y,] Z, [levels], **kwargs)

填充等高线轮廓。

contour()contourf() 分别绘制等高线和填充等高线。主要参数和返回值相同。

常用参数:

  • X, Y: 类数组,可选, Z 中的值的坐标。XY 必须都是 2D 且具有与 Z 相同的形状 (例如,通过 numpy.meshgrid() 创建); 或者它们必须都是 1-D 且使得 len(X) = N = N =NZ 的列数, len(Y) = M = M =MZ 的行数。 XY 都必须单调排序。
    如果未给出,则假定它们是整数索引,即 X = range(N)Y = range(M)
  • Z: 形状为 (M, N) 的类数组, 需绘制的高度值。
  • levels: int 或类数组,可选, 确定等高线/区域的数量和位置。如果是 int n n n,则用 MaxNLocatorvminvmax 之间自动选择不超过 n + 1 n+1 n+1 个较好的轮廓级别。如果是类数组,则在指定级别绘制等高线, 这些值必须按升序排列。

返回: matplotlib.contour.QuadContourSet 对象。

三维表面图

首先需要通过将 projection="3d" 关键字参数传递给 Figure.add_subplot 来创建 3D 坐标轴(属于 Axes3D 类)。

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

(3D Axes 中也可以用 plot, scatter 等绘制折线图, 散点图等, 参见官方文档)

绘制三维表面图函数:

Axes3D.plot_surface(X, Y, Z, *args, norm=None, vmin=None, vmax=None, lightsource=None, **kwargs)

参数:

  • X, Y, Z: 二维数组, 数据值。
  • norm: 标准化, 颜色图的规范化。
  • vmin, vmax: float, 规范化的界限。
  • lightsource: 当 shadeTrue 时使用的光源。
  • cmap: Colormap: 如 'viridis', 'gist_rainbow' 等。

示例

import matplotlib.pyplot as plt
import numpy as np
#节点的 x, y, z 坐标
xn=
yn=
zn=
#画等高线图
plt.subplot(121)
contr=plt.contour(xn,yn,zn)
plt.clabel(contr) #在等高线图中标出高度数据
#----------#
#画三维表面图
X,Y=np.meshgrid(xn,yn) #构造网格节点
ax=plt.subplot(122, projection='3d')
ax.plot_surface(X, Y, zn, cmap='viridis') 
  • 2
    点赞
  • 17
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Charle4Leclerc

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值