欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matplotlib绘图的几种方式

程序员文章站 2022-03-21 14:20:18
...

Matplotlib是整个软件包,matplotlib.pyplot是Matplotlib中的模块。

matplotlib.pyplot是使matplotlib像MATLAB一样工作的命令样式函数的集合。每个pyplot函数对一个图进行一些更改:例如,创建一个图,在图中创建一个标绘区域,在标绘区域中绘制一些线,用标签装饰该图,等等。在matplotlib。pyplot各种状态保存在函数调用,所以它跟踪当前图和绘图区域,和绘图功能是针对当前轴(请注意“轴”,在大多数地方的文档是指轴图的一部分,而不是严格的数学术语多个轴)。

注意,pyplot API通常不如面向对象API灵活。您在这里看到的大多数函数调用也可以作为来自axes对象的方法来调用。我们建议您浏览教程和示例,看看它是如何工作的。


补充:Matplotlib中的两种绘图API说明

在Matplotlib库中提供了两种风格的API供开发者使用:一种是Pyplot编程接口(state-based),一种是面向对象对象的编程接口(object-based)。

Pyplot封装了底层的绘图函数提供了一种绘图环境,使得我们可以直接像在MATLAB那样绘制图形。

在使用面向对象的编程接口时候,我们需要自己创建画布(FigureCanvas),自己创建图对象(Figure),自己创建Axes(一个Figure可以包含一个或者多个Axes,一个Axes可以理解为一个子图,使用一次plot()绘图函数便会创建一个Axes),所有对象一起才能完成一次完整的绘图。使用面向对象编程接口有利于我们对于图形绘制的完整控制,但是相对于Pyplot接口可能需要书写更多的代码。
参考原文链接:https://blog.csdn.net/theonegis/article/details/81230211


对于pyplot模块中的功能,始终有一个“当前”图形和轴(根据要求自动创建)。例如,在下面的例子中,在第一次调用plt.plot创建轴,则后续调用plt.plot在同一坐标添加额外的线,以及plt.xlabelplt.ylabelplt.titleplt.legend设置轴标签和标题和添加的图例。

x = np.linspace(0, 2, 100)
 
plt.plot(x, x, label='linear')
# 试试在这里加入plt.show(),此时会显示两个figure
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
 
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()   # 要设了label且放置图例后才会显示图例
 
plt.show()     # 阻塞模式必须调用show才能显示figure

在一个figure中绘制多个axes,用plt.subplot()

names = ['group_a', 'group_b', 'group_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('Categorical Plotting')
plt.show()

#------------------------------------
import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'o-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')

plt.subplot(2, 1, 2)
plt.plot(x2, y2, '.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

上面的教程中时不时提到两个概念:figure和axes,这两者是matplotlib面向对象绘图时要明确的两个点,可以参考上一篇教程。

下面用面向对象的方式绘图

x = np.arange(0, 10, 0.2)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

#---------------------------
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

fig.savefig("test.png")
plt.show()

一个figure中绘制多个axes

x = np.arange(0, 10, 0.2)
y = np.sin(x)
fig, (ax1,ax2) = plt.subplots(1,2)
ax1.plot(x, y)
ax2.plot(y, x)
plt.show()

还有一个对官方文档整理很到位的博客https://segmentfault.com/a/1190000020450334?utm_source=tag-newest

相关标签: matplotlib