matplotlib API函数都位于matplotlib.pyplot模块中。

本节代码中引入的约定为:import matplotlib.pyplot as plt

另外,numpy库也会用到,约定:import numpy as np

1 matplotlib API入门

官方文档:Users guide — Matplotlib 3.5.0 documentation

1.1 Figure和Subplot

matplotlib的图像位于Figure对象中,可以使用plt.figure()创建一个新的Figure。

不能通过Figure绘图,必须用add_subplot创建一个或多个subplot才行。

# -*- coding:utf-8 -*-
import numpy as np
from matplotlib import pyplot as plt fig = plt.figure()
#图像为2x2,当前选中的是4个subplot中的第一个
ax1 = fig.add_subplot(2, 2, 1)
plt.plot([1.5, 3.5, -2, 1.6])
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
# 默认在最后一个用过的subplot(ax3)上进行绘制
# 'K--'是一个线性选项,告诉matplotlib绘制黑色虚线图
plt.plot(np.random.randn(50).cumsum(), 'k--')
plt.show()

显示的图像为:

由于根据特定布局创建Figure和subplot是很常见的任务,于是出现了更常见的方法(plt.subplots),它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组。

>>> fig, axes = plt.subplots(2, 3)
>>> print(fig)
Figure(640x480)
>>> print(axes)
[[<AxesSubplot:> <AxesSubplot:> <AxesSubplot:>]
[<AxesSubplot:> <AxesSubplot:> <AxesSubplot:>]]

这种操作很方便,可以轻松对axes数组进行索引,就像一个二维数组一样,如axes[0, 1]。

还可以通过sharex和sharey指定subplot应该具有相同的X轴或Y轴。在相同范围的数据时,很实用。

否则matplotlib会自动缩放各图表的界限。下表是subplots方法的更多信息。

函数原型:subplots(nrows=1, ncols=1, , sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None)

官方说明:matplotlib.figure — Matplotlib 3.5.0 documentation

参数 说明
nrows subplot的行数
ncols subplot的列数
sharex 所有subplot应该使用相同的X轴刻度(调节xlim将会影响所有subplot)
sharey 所有subplot应该使用相同的Y轴刻度(调节ylim将会影响所有subplot)
subplot_kw 用于创建各subplot的关键字字典
fig_kw 创建figure时的其它关键字,如plt.subplots(2, 2, figsize=(8, 6))

1.2 调整subplot周围的间距

默认情况下,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距。

间距和图像的高度和宽度有关,因此,如果调整了图像大小,间距也会自动调整。

例如Figure的subplots_adjust方法可以修改间距,这也是一个顶级函数。

wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。

下面举例将间距收缩到0:

1 >>> fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
2 >>> for i in range(2):
3 ... for j in range(2):
4 ... axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
5 ...
6 >>> plt.subplots_adjust(wspace=0, hspace=0)
7 >>> plt.show()

可以看出,其中的轴标签重叠了,matplotlib不会检查标签是否重叠,对于这种情况,只能自己设置刻度位置和刻度标签。

1.3 颜色、标记和线性

matplotlib函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。如根据x和y绘制绿色虚线,可执行ax.plot(x, y, ‘g--’)。

下面是通过更为明确的方式得到同样的效果:ax.plot(x, y, linestyle=’--’, color=’g’)。

常用的颜色都有一个缩写,要使用其它颜色可以通过指定其RGB值的形式使用(如:’#CECECE’)。

线型图还可以加上一些标记(marker),以强调实际的数据点。由于matplotlib创建的是连续的线型图(点与点之间插值),因此有时可能不太容易看出这是数据点的位置。标记也可放在格式字符串中,当标记类型和线型必须放在颜色后面。

1 >>> plt.plot(np.random.randn(30).cumsum(), 'ko--')
2 [<matplotlib.lines.Line2D object at 0x0000026BBD6FE2E8>]
3 >>> plt.show()

也可以使用更为明确的方式:

1 >>> plt.plot(np.random.randn(30).cumsum(), color='k', linestyle='dashed', marker='o')

在线型图中,非实际数据点默认是按线性方式插值的,可以通过drawstyle选项修改:

1 >>> data = np.random.randn(30).cumsum()
2 >>> plt.plot(data, 'k--', drawstyle='steps-post', label='Default')
3 [<matplotlib.lines.Line2D object at 0x0000026BBAE3DF28>]
4 >>> plt.legend(loc='best')
5 <matplotlib.legend.Legend object at 0x0000026BBD7E7C18>
6 >>> plt.show()
7 >>>

1.4 刻度、标签和图例

对于大多数的图表装饰项,其主要实现方式有二:使用过程型的pyplot接口以及更为面向对象的原生matplotlib API。

pyplot接口的设计目的是交互式使用,还有诸如xlim、xticks和xticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签等。其使用方式有以下两种:

  • 调用时不带参数,则返回当前的参数值,例如,plt.xlim()返回当前的X轴绘图范围。
  • 调用时带参数,则设置参数值。如,plt.xlim([0, 10])会将X轴的范围设置为0到10。

所有这些方法都是对当前或最近创建的AxesSubplot起作用的。它们各自对应subplot对象上的两个方法,以xlim为例,就是ax.get_xlim和ax.set_xlim。

1.5 设置标题、轴标签、刻度以及刻度标签

要修改X轴的刻度,最简单的方法是使用set_xticks(刻度在数据范围中的哪些位置,也是刻度标签值)和set_xticklabels(将任何其它的值用作标签)。

>>> fig = plt.figure()
>>> ax = fig.add_subplot(1, 1, 1)
>>> ax.plot(np.random.randn(1000).cumsum())
[<matplotlib.lines.Line2D object at 0x000001C5A6EEA5E0>]
>>> ticks = ax.set_xticks([0, 250, 500, 750, 1000])
>>> labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small')
>>> ax.set_title('My first matplotlib plot')
Text(0.5, 1.0, 'My first matplotlib plot')
>>> ax.set_xlabel('Stages')
Text(0.5, 0, 'Stages')
>>> plt.show()

set_xlabel用于为X轴设置一个名称。

1.6 添加图例

图例(legend)是另一种用于标识图表元素的重要工具。添加图例的方式有两种。

(1)最简单的是在添加subplot的时候是否传入label参数

 1 fig = plt.figure()
2 ax = fig.add_subplot(1, 1, 1)
3
4 ax.plot(np.random.randn(10), 'k', label='one')
5 ax.plot(np.random.randn(10), 'g', label='two')
6 ax.plot(np.random.randn(10), 'b', label='three')
7
8 # 创建图例
9 ax.legend(loc='best') #确定图例的位置
10 plt.show()

1.7 注释以及在Subplot上绘图

注释可以通过text、arrow和annotate等函数进行添加。

text可以将文本绘制在图表的指定作表(x, y),还可以加上一些自定义格式:ax.text(x, y, ‘name’, family=’monospace’, fontsize=10)

1 fig = plt.figure()
2 ax = fig.add_subplot(1, 1, 1)
3 data = np.random.randn(10).cumsum()
4 max_value, max_index = [data.max(), data.argmax()]
5 ax.plot(data, 'k--', label='text')
6
7 ax.text(max_index, max_value, 'max value!', family='monospace', fontsize=10)
8
9 plt.show()

注释中可以含有文本也可以含有箭头。

1.8 图形的绘制

matplotlib有一些表示常见图形的对象。这些对象被称为(patch)。完整的集合在matplotlib.patches。

要在图表中创建一个图形,需要创建一个块对象shp,然后通过ax.add_patch(shp)将其添加到subplot中。

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1) rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color='g', alpha=0.5) ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon) plt.show()

1.9 将图表保存到文件

利用plt.savefig可以将当前图表保存到文件,该方法相当于Figure对象的实例方法savefig,例如要将图表保存为SVG文件,只需要输入plt.savefig(‘figpath.svg’)。

文件类型是通过文件扩展名推断出来的。在发布图片时最常用的两个重要的选项是dpi(控制“每英寸点数”分辨率和bbox_inches(可以剪除当前图表周围的空白部分))。如,要得到一张带有最小白边且分辨率为400DPI的PNG图片,可以:plt.savefig(‘figpath.png’, dpi=400, bbox_inches=’tight’)。

savefig并非一定要写入磁盘,可以写入任何文件类型的对象,比如stringIO。

官方文档:matplotlib.pyplot.savefig — Matplotlib 3.5.0 documentation

下表是Figure.savefig()方法的参数及说明。

参数 说明
fname 含有文件路径的字符串或python的文件型对象。图像格式由摁键扩展名推断出
dpi 图像像素点(每英寸点数),默认为100
facecolor、edgecolor 图像的背景色,默认为“w”(白色)
format 显示设置文件格式(“png”、“pdf”、“svg”…)
bbox_inches 图表需要保存的部分,如果设置为“tight”,则将尝试剪除图表周围的空白部分

1.10 matplotlib配置

matplotlib自带一些配色方案,以及为生成出版质量的图片而设定的默认配置信息。几乎所有默认行为都可以通过一组全局参数进行自定义,它们可以管理图像大小、subplot边距、配色方案、字体大小、网格类型等。

操作matplotlib配置系统的方式主要有两种。第一种python编程方式,即利用rc方法。比如将全局的图像默认大小设置为10x10,则:plt.rc(‘figure’, figsize=(10, 10))

rc的第一个参数时希望自定义的对象,如“figure”、“axes”、“xtick”、“ytick”、“grid”、“legend”等。其后可以跟上一系列的关键字参数。最简单的方式是将这些选项写成一个字典:

font_options = {‘family’: ‘monospace’, ‘weigt’: ‘bold’, ‘size’: ‘small’}

plt.rc(‘font’, **font_options)

官方文档:matplotlib.pyplot.rc — Matplotlib 3.5.0 documentation

绘图与可视化--matplotlib API入门的更多相关文章

  1. 绘图和可视化---matplotlib包的学习

    matplotlib API函数都位于matplotlib.pyplot模块,通常引入约定为:import matplotlib.pyplot as plt 1.Figure和Subplot 图像都位 ...

  2. IPython绘图和可视化---matplotlib 入门

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  3. Python 绘图与可视化 matplotlib 制作Gif动图

    参考链接:https://blog.csdn.net/theonegis/article/details/51037850 官方文档:https://matplotlib.org/3.1.0/api/ ...

  4. Python 绘图与可视化 matplotlib(上)

    参考链接:https://www.cnblogs.com/dudududu/p/9149762.html 更详细的:https://www.cnblogs.com/zhizhan/p/5615947. ...

  5. python数据可视化——matplotlib 用户手册入门:使用指南

    参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introd ...

  6. Python 绘图与可视化 matplotlib(下)

    详细的参考链接:更详细的:https://www.cnblogs.com/zhizhan/p/5615947.html 图像.子图.坐标轴以及记号 Matplotlib中图像的意思是打开的整个画图窗口 ...

  7. Python 绘图与可视化 matplotlib 动态条形图 bar

    bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...

  8. Python 绘图与可视化 matplotlib text 与transform

    Text 为plots添加文本或者公式,反正就是添加文本了 参考链接:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html#ma ...

  9. python数据可视化——matplotlib 用户手册入门:pyplot 画图

    参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-intro ...

  10. IPython绘图和可视化---matplotlib

    1. 启动 IPython 2. >> fig = plt.figure() >> ax1 = fig.add_subplot(346)          # 将画布分割成3行 ...

随机推荐

  1. redis+lua脚本实现接口限流

    写在前面 在多线程的情况下对一个接口进行访问,如果访问次数过大,且没有缓存存在的情况下大量的请求打到数据库可能会存在数据库宕机,从而造成服务的不可用性.往往我们需要对其进行限流操作用来保证服务的高可用 ...

  2. 顺通鞋服ERP库存管理系统

    鞋服ERP库存管理系统是专门为鞋服行业设计的企业资源规划软件,它提供了一系列库存管理功能,帮助鞋服企业有效管理库存流程和提升库存管理效率.以下是一些鞋服ERP库存管理系统常见的功能和特点: 1. 库存 ...

  3. gitee基于webhooks实现前端简单自动化部署

    1.为什么采用自动化部署 简而言之,程序员优秀传统:懒 =>高级生产力. 基于gitee进行的自动化部署,服务器环境为Ubuntu 基于webhooks进行的自动化部署更加轻快便捷 2.部署步骤 ...

  4. EMAS移动测试-远程真机篇

    简介: 导读:本文将介绍申请远程真机以及在远程真机上执行测试任务的详细操作,包括申请远程真机.安装应用.扫码.定位.性能测试等. 一.移动测试概览 移动测试服务(Mobile Testing)是为企业 ...

  5. ARMS实践|日志在可观测场景下的应用

    简介: 在实际生产中,通过灵活组合文内几种使用方式,运维团队可以很好地排除日常观测.故障定位过程中的干扰因素,更快的定界甚至定位问题根因. 作者:陈陈   日志在可观测场景下的应用   随着 IT 架 ...

  6. 转载 | 如何把 thinkphp5 的项目迁移到阿里云函数计算来应对流量洪峰?

    简介: 函数计算评测局的优秀征文! 如何把thinkphp5的项目迁移到阿里云函数计算来应对流量洪峰? 1. 为什么要迁移到阿里云函数? 我的项目是一个节日礼品领取项目,过节的时候会有短时间的流量洪峰 ...

  7. 企业上云如何对SLS日志审计服务进行权限控制

    简介: 日志审计是信息安全审计功能的核心部分,是企业信息系统安全风险管控的重要组成部分.SLS的日志审计服务针对阿里云的多种云产品(Actiontrail.OSS.SLB.RDS.PolarDB.SA ...

  8. RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

    简介: 随着公司业务的不断发展,流量也在不断增长.我们发现生产中的一些重大事故,往往是被突发的流量冲跨的,对流量的治理和防护,保障系统高可用就尤为重要. 作者|梁勇 ​ 背景 ​哈啰已进化为包括两轮出 ...

  9. Spring Boot参数校验以及分组校验的使用

    简介: 做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性 ...

  10. [DApp] Moralis 生产阶段的服务安全设置 -锁定数据库

    Moralis 的基础设施数据库是使用的 MongoDB,其非常适合Dev阶段的快速开发. 如果进入生产环境,需要锁定数据库,防止任何用户可利用SDK向Mongo插入多余数据. 另外,Moralis ...