Matplotlib库是一个Python 2D绘图库,是matlab在Python语言中2D方面的库,不支持3D绘图。在作图方面更加细腻,但是运行时间更长。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。figure、axes、axis……利用列表包含的方式进行创建。最简单创建figure、axes的命令是:
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]); # 绘制图像
以上代码等同于如下:
line =plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
这是两种不同的绘图接口。前者通过显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)。后者依赖pyplot自动创建figure和axes,并绘图,称为pyplot绘图模式。
e.g.
(1) OO模式:
x = np.linspace(0, 2, 100)
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()
plt.show()
(2) pyplot绘图模式
x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')
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()
plt.show()
备注:在这个地方的时候,我原来并不清楚这两种模式之间的关系,以为这两种模式是同一个类,但是利用程序改了一下发现爆错:
AttributeError: ‘AxesSubplot’ object has no attribute ‘xlabel’
(AxesSubplot对象中没有xlabel属性)
AttributeError: module ‘matplotlib.pyplot’ has no attribute ‘set_xlabel’
(matplotlib.pyplot模块中没有set_xlabel属性)
虽然没有完全的搞懂,但是似乎应该去了解一下原码中的层次关系,这个以后用到再说。
参考了一下如下文章(带原码):
https://blog.csdn.net/mighty13/article/details/112691096
这里提供一个通用的绘图基础模板,任何复杂的图表几乎都可以基于这个模板骨架填充内容而成。在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。
# 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() ;
请思考两种绘图模式的优缺点和各自适合的使用场景
OO模式:
优点:清晰明了
缺点:代码编写更加复杂
适合使用场景:较为复杂的画图场景
pyplot模式
优点:编写简单
缺点:在多对象情况下容易使对象混乱
适合使用场景:简单画图场景
在第五节绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear')
# step4 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend() ;