matplotlib绘图的几种方式

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值