Datawhale 数据可视化学习(1):Matplotlib初相识

Matplotlib综述

Matplotlib库是一个Python 2D绘图库,是matlab在Python语言中2D方面的库,不支持3D绘图。在作图方面更加细腻,但是运行时间更长。

Matplotlib建立背景与绘图

  1. 库引入:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
  1. 创建figure、axes

在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。figure、axes、axis……利用列表包含的方式进行创建。最简单创建figure、axes的命令是:

fig, ax = plt.subplots()  # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]);  # 绘制图像
  1. 绘图接口

以上代码等同于如下:

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

  1. 通用绘图模板

这里提供一个通用的绘图基础模板,任何复杂的图表几乎都可以基于这个模板骨架填充内容而成。在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。

# 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() ;

思考题

  1. 请思考两种绘图模式的优缺点和各自适合的使用场景
    OO模式:
    优点:清晰明了
    缺点:代码编写更加复杂
    适合使用场景:较为复杂的画图场景
    pyplot模式
    优点:编写简单
    缺点:在多对象情况下容易使对象混乱
    适合使用场景:简单画图场景

  2. 在第五节绘图模板中我们是以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() ;

你可能感兴趣的:(数据可视化,python,人工智能,机器学习,数据可视化,matplotlib)