Python 数据分析——matplotlib 快速绘图

这篇博客介绍了如何使用matplotlib的pyplot模块快速绘制二维图表。内容包括使用pyplot的基本绘图方法、配置属性、面向对象方式绘图、设置图表属性以及在图表中显示中文。博主分享了创建图表、设置颜色、线型、标签以及调整图表布局的技巧,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib采用面向对象的技术来实现,因此组成图表的各个元素都是对象,在编写较大的应用程序时通过面向对象的方式使用matplotlib将更加有效。但是使用这种面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块。本节首先介绍该模块的使用方法。

为了将matplotlib绘制的图表嵌入Notebook中,需要执行下面的命令:

%matplotlib inline

使用inline模式在Notebook中绘制的图表会自动关闭,为了在Notebook的多个单元格内操作同一幅图表,需要运行下面的魔法命令:

%config InlineBackend.close_figures = False

一、使用pyplot模块绘图

matplotlib的pyplot模块提供了与MATLAB类似的绘图函数调用接口,方便用户快速绘制二维图表。我们先看一个简单的例子:

pylab模块

matplotlib还提供了一个名为pylab的模块,其中包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。

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() ❻

程序的输出如图1所示。

图1 使用pyplot模块快速将数据绘制成曲线

❶首先载入matplotlib的绘图模块pyplot,并且重命名为plt。❷调用figure()创建一个Figure(图表)对象,并且它将成为当前Figure对象。也可以不创建Figure对象而直接调用接下来的plot()进行绘图,这时matplotlib会自动创建一个Figure对象。figsize参数指定Figure对象的宽度和高度,单位为英寸。此外还可以用dpi参数指定Figure对象的分辨率,即每英寸所表示的像素数,这里使用默认值80。因此本例中所创建的Figure对象的宽度为8*80 = 640个像素。

❸创建Figure对象之后,接下来调用plot()在当前的Figure对象中绘图。实际上plot()是在Axes(子图)对象上绘图,如果当前的Figure对象中没有Axes对象,将会为之创建一个几乎充满整个图表的Axes对象,并且使此Axes对象成为当前的Axes对象。plot()的前两个参数是分别表示X、Y轴数据的对象,这里使用的是NumPy数组。使用关键字参数可以指定所绘制曲线的各种属性:

·label:给曲线指定一个标签,此标签将在图示中显示。如果标签字符串的前后有字符’$',matplotlib会使用内嵌的LaTeX引擎将其显示为数学公式。

·color:指定曲线的颜色,颜色可以用英文单词或以’#‘字符开头的6位十六进制数表示,例如’#ff0000’表示红色。或者使用值在0到1范围之内的三个元素的元组来表示,例如(1.0, 0.0, 0.0)也表示红色。

·linewidth:指定曲线的宽度,可以不是整数,也可以使用缩写形式的参数名lw。

使用LaTeX语法绘制数学公式会极大地降低图表的描绘速度。

❹直接通过第三个参数’b–‘指定曲线的颜色和线型,它通过一些易记的符号指定曲线的样式。其中’b’表示蓝色,’–'表示线型为虚线。在IPython中输入plt.plot?可以查看格式化字符串以及各个参数的详细说明。

❺接下来通过一系列函数设置当前Axes对象的各个属性:

·xlabel、ylabel:分别设置X、Y轴的标题文字。

·title:设置子图的标题。

·xlim、ylim:分别设置X、Y轴的显示范围。

·legend:显示图示,即图中表示每条曲线的标签(label)和样式的矩形区域。

❻最后调用plt.show()显示绘图窗口,在Notebook中可以省略此步骤。在通常的运行情况下,show()将会阻塞程序的运行,直到用户关闭绘图窗口。

还可以调用plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。下面的程序将当前的图表保存为test.png,并且通过dpi参数指定图像的分辨率为120,因此输出图像的宽度为8*120 = 960个像素。

plt.savefig("test.png", dpi=120)

如果关闭了图表窗口,则无法使用savefig()保存图像。实际上不需要调用show()显示图表,可以直接用savefig()将图表保存成图像文件。使用这种方法可以很容易编写批量输出图表的程序。

savefig()的第一个参数可以是文件名,也可以是和Python的文件对象有相同调用接口的对象。例如可以将图像保存到io.BytesIO对象中,这样就得到了一个表示图像内容的字符串。这里需要使用fmt参数指定保存的图像格式。

import io  
buf = io.BytesIO() # 创建一个用来保存图像内容的BytesIO对象  
plt.savefig(buf, fmt="png") # 将图像以png格式保存到buf中  
buf.getvalue()[:20] # 显示图像内容的前20个字节  
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 '

二、面向对象方式绘图

matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条、文字、刻度等在内存中都有一个对象与之对应。为了方便快速绘图,matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。

为了将面向对象的绘图库包装成只使用函数的API,pyplot模块的内部保存了当前图表以及当前子图等信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值