matplotlib 在线绘图教程

时间:2024-01-29 19:10:23

转自https://freeaihub.com/article/plot-online-with-matplotlib-in-python.html,该页可在线交互学习

matplotlib是python中基础的的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式绘图制图。该库文档完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序。本节是matplotlib的入门课程,将在线使用matplotlib进行图表在线绘制几个例子,从而理解和学习matplotlib绘图的 一些基本概念。

快速绘图

matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()

pylab模块

matplotlib还提供了名为pylab的模块,其中包括了许多numpy和pyplot中常用的函数,方便用 户快速进行计算和绘图,可以用于IPython中的快速交互式使用。

接下来调用figure创建一个绘图对象,并且使它成为当前的绘图对象。

import matplotlib.pyplot as plt
plt.figure(figsize=(8,4))

也可以不创建绘图对象直接调用接下来的plot函数直接绘图,matplotlib会为我们自动创建一个绘图对 象。如果需要同时绘制多幅图表的话,可以是给figure传递一个整数参数指定图标的序号,如果所指定 序号的绘图对象已经存在的话,将不创建新的对象,而只是让它成为当前绘图对象。 通过figsize参数可以指定绘图对象的宽度和高度,单位为英寸;dpi参数指定绘图对象的分辨率,即每 英寸多少个像素,缺省值为80。因此本例中所创建的图表窗口的宽度为880 = 640像素。 但是用工具栏中的保存按钮保存下来的png图像的大小是800400像素。这是因为保存图表用的函数 savefig使用不同的DPI配置,savefig函数也有一个dpi参数,如果不设置的话,将使用matplotlib配置 文件中的配置,此配置可以通过如下语句进行查看,关于配置文件将在后面的章节进行介绍:

import matplotlib
matplotlib.rcParams["savefig.dpi"]

下面的两行程序通过调用plot函数在当前的绘图对象中进行绘图:

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")
plt.show()

plot函数的调用方式很灵活,第一句将x,y数组传递给plot之后,用关键字参数指定各种属性: • label : 给所绘制的曲线一个名字,此名字在图示(legend)中显示。只要在字符串前后添加’‘$’‘符 号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。 • color : 指定曲线的颜色 • linewidth : 指定曲线的宽度 第二句直接通过第三个参数’‘b–指定曲线的颜色和线型,这个参数称为格式化参数,它能够通过 一些易记的符号快速指定曲线的样式。其中b表示蓝色,\'\'--表示线型为虚线。在IPython中输入 ``plt.plot?’’ 可以查看格式化字符串的详细配置。 接下来通过一系列函数设置绘图对象的各个属性:

plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
  • xlabel : 设置X轴的文字 • ylabel : 设置Y轴的文字 • title :

设置图表的标题 • ylim : 设置Y轴的范围 • legend : 显示图示 最后调用plt.show()显示出我们创建的所有绘图对象。

配置属性

matplotlib所绘制的图的每个组成部分都对应有一个对象,我们可以通过调用这些对象的属 性设置方法 set_*或者pyplot的属性设置函数 setp设置其属性值。例如plot函数返回一个 matplotlib.lines.Line2D 对象的列表,下面的例子显示如何设置Line2D对象的属性:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)
line, = plt.plot(x, x*x) # plot返回一个列表,通过line,获取其第一个元素
# 调用Line2D对象的set_*方法设置属性值
line.set_antialiased(False)
# 同时绘制sin和cos两条曲线,lines是一个有两个Line2D对象的列表
lines = plt.plot(x, np.sin(x), x, np.cos(x)) #
# 调用setp函数同时配置多个Line2D对象的多个属性值
plt.setp(lines, color="r", linewidth=2.0)
plt.setp(line,linewidth=1.0)
plt.show()

Figure对象有一个axes属性,其值为AxesSubplot对象的列表,每个AxesSubplot对象代表图表中的 一个子图,前面所绘制的图表只包含一个子图,当前子图也可以通过plt.gca获得:

plt.gca()

用plt.getp可以发现AxesSubplot对象有很多属性,例如它的lines属性为此子图所包括的 Line2D 对象 列表:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)

# plot函数返回一个 matplotlib.lines.Line2D 对象的列表
line, = plt.plot(x, x*x) # plot返回一个列表,通过line,获取其第一个元素
line.set_antialiased(False) # 调用Line2D对象的set_*方法设置属性值

# 同时绘制sin和cos两条曲线,lines是一个有两个Line2D对象的列表
lines = plt.plot(x, np.sin(x), x, np.cos(x))
# 调用setp函数同时配置多个Line2D对象的多个属性值

alllines = plt.getp(plt.gca(), "lines")
alllines
alllines[0] == line # 其中的第一条曲线就是最开始绘制的那条曲线
#通过这种方法我们可以很容易地查看对象的属性和它们之间的包含关系,找到需要配置的属性。

通过以上示例,相信你已经大致了解了matplotlib最基础的功能,了解了它最基础的用法,并可以自己绘制出一些简单的图形,更多的图形,请关注我们网站freeaihub.com,我们会持续自己更新。