Matplotlib pyplot教程

您所在的位置:网站首页 subplot212 Matplotlib pyplot教程

Matplotlib pyplot教程

2022-05-13 21:19| 来源: 网络整理| 查看: 265

在这篇教程文章中,我们将介绍 pyplot 接口。

pyplot简介

matplotlib.pyplot是命令样式函数的集合,使matplotlib像MATLAB一样工作。每个pyplot函数对图形进行一些更改。例如,创建图形,在图形中创建绘图区域,绘制绘图区域中的某些线条,使用标签装饰图形等。

在matplotlib.pyplot中,各种状态在函数调用中保留,以便跟踪当前图形和绘图区域等内容,并且绘图函数指向当前轴(请注意“轴”在此处以及在大多数位置 文档是指图形的轴部分,而不是多个轴的严格数学术语。)

注意 - pyplot API通常不如面向对象的API灵活。在此处看到的大多数函数调用也可以作为Axes对象中的方法调用。我们建议您阅读浏览教程和示例以了解其工作原理。

使用pyplot生成可视化,非常简单:

#! /usr/bin/env python #coding=utf-8 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # plt.rcParams['axes.unicode_minus'] = False # 原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接。 plt.plot([1, 2, 3, 4]) plt.ylabel('简单数字序列') plt.show()

执行上面示例代码,得到以下结果 -

你可能想知道为什么x轴的范围是0-3,y轴的范围是1-4。如果为plot()命令提供单个列表或数组,则matplotlib假定它是一系列y值,并自动生成x值。由于python范围以0开头,因此默认的x和y向量具有相同的长度,但从0开始。因此x数据为[0,1,2,3]。

plot()是一个多功能命令,将采用任意数量的参数。例如,要绘制x与y的关系,您可以使用以下命令:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

得到的绘图结果如下 -

格式化绘图的样式

对于每对x,y对的参数,有一个可选的第三个参数,它是指示绘图的颜色和线型的格式字符串。格式字符串的字母和符号来自MATLAB,可以将颜色字符串与线型字符串连接起来。默认格式字符串为“b-”,为蓝色实线。例如,要用红色圆圈绘制上述内容,使用以下代码:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') plt.axis([0, 6, 0, 20]) plt.show()

上面代码将得到以下结果 -

有关线型和格式字符串的完整列表,请参阅plot()文档。上面示例例中的axis()命令采用[xmin,xmax,ymin,ymax]列表并指定轴的视口。

如果matplotlib仅限于使用列表,那么数字处理将毫无用处。通常使用numpy数组。实际上,所有序列都在内部转换为numpy数组。下面的示例说明了使用数组在一个命令中绘制具有不同格式样式的多行。

import numpy as np # evenly sampled time at 200ms intervals t = np.arange(0., 5., 0.2) # red dashes, blue squares and green triangles plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^') plt.show()

执行上面代码将得到以下结果 -

使用关键字字符串绘图

在某些情况下,可以使用字符串访问特定变量的格式的数据。例如,使用numpy.recarray或pandas.DataFrame。

Matplotlib用于使用data关键字参数提供此类对象。如果提供,那么可以生成包含与这些变量对应的字符串的绘图。

data = {'a': np.arange(50), 'c': np.random.randint(0, 50, 50), 'd': np.random.randn(50)} data['b'] = data['a'] + 10 * np.random.randn(50) data['d'] = np.abs(data['d']) * 100 plt.scatter('a', 'b', c='c', s='d', data=data) plt.xlabel('entry a') plt.ylabel('entry b') plt.show()

执行上面代码将得到以下结果 -

用分类变量绘图

也可以使用分类变量创建绘图。Matplotlib可将分类变量直接传递给许多绘图函数。例如:

#! /usr/bin/env python #coding=utf-8 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # plt.rcParams['axes.unicode_minus'] = False # 原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接。 names = ['分组-A', '分组-B', '分组-C'] values = [1, 10, 100] plt.figure(figsize=(9, 3)) plt.subplot(131) plt.bar(names, values) plt.subplot(132) plt.scatter(names, values) plt.subplot(133) plt.plot(names, values) plt.suptitle('分类绘图') plt.show()

执行上面示例代码,得到以下结果 -

分类绘图

控制线属性

行可以设置许多属性:linewidth,dash style,antialiased等; 请参阅matplotlib.lines.Line2D。有几种方法可以用来设置线属性 -

第1种: 使用关键字args:

plt.plot(x, y, linewidth=2.0)

第2种: 使用Line2D实例的setter方法。plot返回Line2D对象列表; 例如,line1,line2 = plot(x1,y1,x2,y2)。在下面的代码中,假设只有一行,因此返回的列表的长度为1。我们使用tuple解压缩为line,以获取该列表的第一个元素:

line, = plt.plot(x, y, '-') line.set_antialiased(False) # turn off antialiasing

第3种: 使用setp()命令。下面的示例使用MATLAB样式命令在行列表上设置多个属性。setp透明地使用对象列表或单个对象。可以使用python关键字参数或MATLAB样式的字符串/值对:

lines = plt.plot(x1, y1, x2, y2) # use keyword args plt.setp(lines, color='r', linewidth=2.0) # or MATLAB style string value pairs plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

以下是Line2D的属性。

属性 值类型 alpha float animated [True Ι False] antialiased 或 aa [True Ι False] clip_box 一个matplotlib.transform.Bbox实例 clip_on [True Ι False] clip_path 一个Path实例和Transform实例 color or c 任意 matplotlib 颜色 contains 命中测试功能 dash_capstyle [‘butt’ Ι ‘round’ Ι ‘projecting’] dash_joinstyle [‘miter’ Ι ‘round’ Ι ‘bevel’] dashes 点的开/关墨水序列 data (np.array xdata, np.array ydata) figure 一个 matplotlib.figure.Figure 实例 label any string linestyle or ls [ ‘-‘ Ι ‘—‘ Ι ‘-.’ Ι ‘:’ Ι ‘steps’ Ι …] linewidth or lw 浮点数值 marker [ ‘+’ Ι ‘,’ Ι ‘.’ Ι ‘1’ Ι ‘2’ Ι ‘3’ Ι ‘4’ ] markeredgecolor or mec 任意 matplotlib 颜色 markeredgewidth or mew 浮点数值 markerfacecolor or mfc 任意 matplotlib 颜色 markersize or ms float markevery [ None Ι integer Ι (startind, stride) ] picker 用于交互式行选择 pickradius 行选择半径 solid_capstyle [‘butt’ Ι ‘round’ Ι ‘projecting’] solid_joinstyle [‘miter’ Ι ‘round’ Ι ‘bevel’] transform matplotlib.transforms.Transform 实例 visible [True Ι False] xdata np.array ydata np.array zorder 任意数字

要获取可设置的行属性列表,请使用一行或多行作为参数调用setp()函数

In [69]: lines = plt.plot([1, 2, 3]) In [70]: plt.setp(lines) alpha: float animated: [True | False] antialiased or aa: [True | False] ...snip 使用多个图形和轴

MATLAB和pyplot具有当前图形和当前轴的概念。所有绘图命令都适用于当前轴。函数gca()返回当前轴(matplotlib.axes.Axes实例),gcf()返回当前数字(matplotlib.figure.Figure实例)。通常情况下,不必担心这一点,因为它完全在后台处理。下面是一个创建两个子图的脚本。

#! /usr/bin/env python #coding=utf-8 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # plt.rcParams['axes.unicode_minus'] = False # 原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接。 def f(t): return np.exp(-t) * np.cos(2*np.pi*t) t1 = np.arange(0.0, 5.0, 0.1) t2 = np.arange(0.0, 5.0, 0.02) plt.figure() plt.subplot(211) plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') plt.subplot(212) plt.plot(t2, np.cos(2*np.pi*t2), 'r--') plt.show()

执行上面示例代码,得到以下结果 -

这里的figure()命令是可选的,因为默认情况下会创建图(1),就像默认情况下创建子图(111)一样,如果不手动指定任何轴。subplot()命令指定numrows,numcols,plot_number,其中plot_number的范围从1到numrows * numcols。如果numrows * numcols 0) & (y < 1)] y.sort() x = np.arange(len(y)) # plot with various axes scales plt.figure() # linear plt.subplot(221) plt.plot(x, y) plt.yscale('linear') plt.title('linear') plt.grid(True) # log plt.subplot(222) plt.plot(x, y) plt.yscale('log') plt.title('log') plt.grid(True) # symmetric log plt.subplot(223) plt.plot(x, y - y.mean()) plt.yscale('symlog', linthreshy=0.01) plt.title('symlog') plt.grid(True) # logit plt.subplot(224) plt.plot(x, y) plt.yscale('logit') plt.title('logit') plt.grid(True) # Format the minor tick labels of the y-axis into empty strings with # `NullFormatter`, to avoid cumbering the axis with too many labels. plt.gca().yaxis.set_minor_formatter(NullFormatter()) # Adjust the subplot layout, because the logit one may take more space # than usual, due to y-tick labels like "1 - 10^{-3}" plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25, wspace=0.35) plt.show()

执行上面示例代码,得到以下结果 -

对数和其他非线性轴

  

上一篇: Matplotlib指南 下一篇: Matplotlib绘图示例 加QQ群啦,易百教程官方技术学习群 注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3