初识Matplotlib
- Matplotlib是作为Python的一个 2D绘图库,利用简单的代码就可以绘制出需要高质量的图像,对于学习使用Python做数据分析、可视化等有很大的帮助。
一个最简单的例子
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
- fig: Figure
- ax: axes.Axes or array of Axes
- ax 可以是单个 Axes 对象,也可以是 Axes 对象数组(如果创建了多个子图)。可以使用 squeeze 关键字控制结果数组的维度。处理返回值的典型语法是:
# using the variable ax for single a Axes
fig, ax = plt.subplots()
# using the variable axs for multiple Axes
fig, axs = plt.subplots(2, 2)
# using the variable ax for single a Axes
fig, ax = plt.subplots()
# using the variable axs for multiple Axes
fig, axs = plt.subplots(2, 2)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uAK4EY1z-1652751524980)(output_4_0.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4X9JdNEq-1652751524981)(output_4_1.png)]
fig, ax = plt.subplots() # 创建一个包含axes的figure
ax.plot([1, 2, 3, 4],[1, 4, 2, 3]) # 绘制图像
[<matplotlib.lines.Line2D at 0x22b9b487f10>]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q98m2YMT-1652751524981)(output_5_1.png)]
和MATLAB命令类似,你还可以通过一种更简单的方式绘制图像,matplotlib.pyplot方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。所以上面的例子也可以简化为以下这一行代码。
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
[<matplotlib.lines.Line2D at 0x22b9b433280>]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yN4ddMRE-1652751524981)(output_7_1.png)]
两种绘图接口
-
matplotlib有两种最常用的绘图接口
–显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
–依赖pyplot自动创建figure和axes,并绘图
x = np.linspace(0, 2, 200)
fig, ax = plt.subplots()
ax.plot(x, x, label = 'linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
ax.set_xlabel('x_label')
ax.set_ylabel('y_label')
ax.set_title('Simple Plot')
ax.legend()
<matplotlib.legend.Legend at 0x22b9b13e940>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2G5vHAv1-1652751524982)(output_9_1.png)]
"""
pyplot绘图
"""
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 100)
y1 = x
y2 = x**2
y3 = x**3
plt.plot(x, y1, label='y=x')
plt.plot(x, y2, label='y=x^2')
plt.plot(x, y3, label='y=x^3')
plt.title('Sample Plot')
plt.legend()
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K26FE28a-1652751524982)(output_10_0.png)]
通用绘图模板
matplotlib的知识点很多,很多时候都是边用边查,因此这里提供一个通用的绘图模板。
# step1准备数据
x = np.linspace(0, 2, 100)
y = x**2
#step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须得,样式也可以在绘制图像时进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局,这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots()
# step4 绘制图像,这一模块的参考扩展第二章进一步学习
ax.plot(x, y, label='linear')
# step5 添加标签、文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title('Simple Plot')
ax.legend()
<matplotlib.legend.Legend at 0x22b9afc5400>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hG2h1by-1652751524982)(output_12_1.png)]
思考题
-
- 请思考两种绘图模式的优缺点和各自合适的使用场景
-
- 在上面绘图模板中我们是以OO模式作为例子展示的, 请思考并写一个pyplot绘图模式的简单模板
-
- OO样式可以将轴与Figure一起创建很方便,但也可以在以后手动添加轴。对于复杂的绘图,以及打算作为较大项目的一部分重用的函数和脚本推荐使用OO样式。但是,pyplot 样式对于快速交互式工作非常方便。
-
- 如下
'''
matplotlib.pyplot是命令样式函数的集合,使matplotlib像MATLAB一样工作。
每个pyplot函数对图形进行一些更改。例如,创建图形,在图形中创建绘图区域,绘制绘图区域中的某些线条,
使用标签装饰图形等//原文出自【易百教程】,原文链接:https://www.yiibai.com/matplotlib/pyplot-tutorial.html
'''
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 6, 0.1)
y = np.arctan(x)
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x181e3b1e5e0>]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xr5i3lXo-1652751524983)(output_15_1.png)]
参考
- https://matplotlib.org/stable/api/matplotlib_configuration_api.html
- https://zhuanlan.zhihu.com/p/70835617