Matplotlib
概念
Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂
- Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等 - Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区 - Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签 - Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等 - Matplotlib 功能扩展包:许多第三方工具包都对 Matplotlib 进行了功能扩展,其中有些安装包需要单独安装,也有一些允许与 Matplotlib 一起安装。常见的工具包如下: - Basemap:这是一个地图绘制工具包,其中包含多个地图投影,海岸线和国界线 - Cartopy:这是一个映射库,包含面向对象的映射投影定义,以及任意点、线、面的图像转换能力 - Excel tools: 这是 Matplotlib 为了实现与 Microsoft Excel 交换数据而提供的工具 - Mplot3d:它用于 3D 绘图 - Natgrid:这是 Natgrid 库的接口,用于对间隔数据进行不规则的网格化处理
安装
pip install matplotlib==3.3.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/
import matplotlib.pyplot as plt
应用场景
- 企业领域:利用直观多样的图表展示数据,从而为企业决策提供支持
- 股票走势预测:通过对股票涨跌数据的分析,给股民提供更合理化的建议
- 商超产品销售:对客户群体和所购买产品进行数据分析,促使商超制定更好的销售策略
- 预测销量:对产品销量的影响因素进行分析,可以预测出产品的销量走势
常用API
绘图类型
Image 函数
Axis 函数
Figure 函数
pylab 模块
PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。它将 matplotlib.pyplot 和 numpy 的功能组合在一起,使得你可以直接使用 numpy 的函数和 matplotlib.pyplot 的绘图功能,而不需要显式地导入 numpy 和 matplotlib.pyplot。
优点
- 方便快捷:`pylab` 的设计初衷是为了方便快速绘图和数值计算,使得你可以直接使用 `numpy` 的函数和 `matplotlib.pyplot` 的绘图功能,而不需要显式地导入 `numpy` 和 `matplotlib.pyplot`。
- 简化代码:使用 `pylab` 可以减少导入语句的数量,使代码更简洁。
缺点
- 命名空间污染:pylab 将 numpy 和 matplotlib.pyplot 的功能组合在一起,可能会导致命名空间污染,使得代码的可读性和可维护性降低。
- 不适合大型项目:对于大型项目或需要精细控制的项目,pylab 可能不够灵活。
常用函数
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 坐标将默认为数组的索引。
-
-
-
格式字符串
-
-
-
-
- 格式字符串由颜色、标记和线条样式组成。
-
-
-
警告日志关闭
-
-
-
-
- import logging
- logging.captureWarnings(True)
-
-
-
figure 函数
figure() 函数来实例化 figure 对象,即绘制图形的对象,可以通过这个对象,来设置图形的样式等
参数
-
-
-
-
- - figsize:指定画布的大小,(宽度,高度),单位为英寸
- - dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80
- - facecolor:背景颜色
- - dgecolor:边框颜色
- - frameon:是否显示边框
-
-
-
figure.add_axes()
-
-
-
-
- Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
- 参数
- 是一个包含四个元素的列表或元组,格式为 [left, bottom, width, height],其中:
- left 和 bottom 是轴域左下角的坐标,范围从 0 到 1。
- width 和 height 是轴域的宽度和高度,范围从 0 到 1。
-
-
-
axes.legend()
-
-
-
-
- legend 函数用于添加图例,以便识别图中的不同数据系列。图例会自动显示每条线或数据集的标签。
- 参数
- - labels 是一个字符串序列,用来指定标签的名称
- - loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示
- legend() 函数 loc 参数:
-
-
-
-
-
-
-
-
- - handles 参数,它也是一个序列,它包含了所有线型的实例
- 也可以将label定义在plot方法中,调用legend方法时不用再定义labels,会自动添加label
-
-
-
-
title函数,标题(中文乱码)
.title("")函数
如果标题设置的是中文,会出现乱码
局部处理:
-
-
-
-
- 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()
- 首先,找到 `matplotlibrc` 文件的位置,可以使用以下代码:
-
-
-
subplot 函数
subplot 是一个较早的函数,用于创建并返回一个子图对象。它的使用比较简单,通常用于创建网格状的子图布局。subplot 的参数通常是一个三位数的整数,其中每个数字代表子图的行数、列数和子图的索引。
add_subplot 是一个更灵活的函数,它是 Figure类的一个方法,用于向图形容器中添加子图。推荐使用 add_subplot,因为它提供了更好的灵活性和控制。
fig.add_subplot(nrows, ncols, index)
-
-
-
-
- rows:绘图区域占的行数
- cols:绘图区域占的列数
- index:绘图区域的编号
-
-
-
subplots 函数
subplots 是 matplotlib.pyplot 模块中的一个函数,用于创建一个包含多个子图(subplots)的图形窗口。subplots 函数返回一个包含所有子图的数组,这使得你可以更方便地对每个子图进行操作。
fig, axs = plt.subplots(nrows, ncols, figsize=(width, height))
-
-
-
-
- - nrows: 子图的行数。
- - ncols: 子图的列数。
- - figsize: 图形的尺寸,以英寸为单位。
-
-
-
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。
-
-
-
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等。
-
-
-
xscale和yscale函数
xscale和yscale函数用于设置坐标轴的刻度类型。默认情况下,坐标轴的刻度类型是线性的,但你可以使用xscale和yscale函数将其更改为对数刻度或其他类型的刻度。
ax.set_xscale(value)ax.set_yscale(value)
-
-
-
-
- value:刻度类型,可以是'linear'(线性刻度)、'log'(对数刻度)、'symlog'(对称对数刻度)、'logit'(对数几率刻度)等。
-
-
-
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_xticks和set_yticks函数
Matplotlib可以自动根据因变量和自变量设置坐标轴范围,也可以通过set_xticks()和set_yticks()函数手动指定刻度,接收一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。
ax.set_xticks(ticks)ax.set_yticks(ticks)
-
-
-
-
- ticks:一个包含刻度位置的列表或数组。
-
-
-
twinx和twiny函数
twinx和twiny函数用于在同一个图形中创建共享X轴或Y轴的多个子图。twinx函数用于创建共享X轴的子图,twiny函数用于创建共享Y轴的子图。
ax2=ax.twinx()ax2=ax.twiny()
-
-
-
-
- -ax:原始的Axes对象。
- -ax2:新的Axes对象,共享原始Axes对象的X轴或Y轴。
-
-
-
柱状图
柱状图(BarChart)是一种常用的数据可视化工具,用于展示分类数据的分布情况。
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 等
-
-
-
堆叠柱状图
-
-
-
-
- bottom=values1:绘制第二个数据集的柱状图,堆叠在第一个数据集上
-
-
-
分组柱状图
直方图
直方图(Histogram)是一种常用的数据可视化工具,用于展示数值数据的分布情况。
ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, **kwargs)
-
-
-
-
- - x: 数据数组。
- - bins: 直方图的柱数,可以是整数或序列。
- - range: 直方图的范围,格式为 `(min, max)`。
- - density: 是否将直方图归一化,默认为 `False`。
- - weights: 每个数据点的权重。
- - cumulative: 是否绘制累积直方图,默认为 `False`。
- - **kwargs: 其他可选参数,用于定制直方图的外观,如 `color`、`edgecolor`、`linewidth` 等。
-
-
-
饼图
饼图(Pie Chart)是一种常用的数据可视化工具,用于展示分类数据的占比情况。
ax.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)
-
-
-
-
- - x: 数据数组,表示每个扇区的占比。
- - explode: 一个数组,表示每个扇区偏离圆心的距离,默认为 `None`。
- - labels: 每个扇区的标签,默认为 `None`。
- - colors: 每个扇区的颜色,默认为 `None`。
- - autopct: 控制显示每个扇区的占比,可以是格式化字符串或函数,默认为 `None`。
- - shadow: 是否显示阴影,默认为 `False`。
- - startangle: 饼图的起始角度,默认为 0。
- - **kwargs: 其他可选参数,用于定制饼图的外观。
-
-
-
折线图
使用 plot 函数
散点图
散点图(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: 其他可选参数,用于定制散点图的外观。
-
-
-
marker常用的参数值:
-
-
-
-
- - 'o': 圆圈
- - 's': 正方形
- - 'D': 菱形
- - '^': 上三角形
- - 'v': 下三角形
- - '>': 右三角形
- - '<': 左三角形
- - 'p': 五边形
- - '*': 星形
- - '+': 加号
- - 'x': 叉号
- - '.': 点
- - ',': 像素
- - '1': 三叉戟下
- - '2': 三叉戟上
- - '3': 三叉戟左
- - '4': 三叉戟右
- - 'h': 六边形1
- - 'H': 六边形2
- - 'd': 小菱形
- - '|': 竖线
- - '_': 横线
-
-
-