Matplotlib_one

Matplotlib_one

在此借鉴datawhale的Matplotlib进行学习

Matplotlib初识

Matplotlib是python的2D绘图库,用来绘制静态,动态,交互式的图标。

Matplotlib是python中公认的数据可视化工具,pandas和seaborn的绘图接口也是基于Matplotlib所作的高级封装。

Matplotlib可用于python脚本,jupyter notebook,web应用服务器和各种图形化用户界面工具

简单绘图

在Matplotlib中图像是画在figure上的(如jupyter窗体),每一个figure都包含一个或多个axxes(一个可以指定坐标系的子区域)

创建命令

pyplot.subplots() >>>创建一个图形和一组子图,即创建figure和axes

Axes.plot() >>>绘制简单的折线图

#首先导入所需的库
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
figure_m, axes_m = plt.subplots() #创建一个包含一个axes的figure
axes_m.plot([1,2,3,4],[2,3,1,4])

Matplotlib_one_第1张图片

[] 输出是因为绘图代码会默认打印出最后一个对象。以下有三种不显示这句话的方法。

  • 在代码的最后加上一个分号;
  • 在代码最后加上一句plt.show()
  • 在绘图时将绘图对象赋值给一个变量,即将plt.plot([1,2,3,4])改为model = plt.plot([1,2,3,4])

根据文档介绍,还有一种更加简单的绘制图像方法 matplotlib.pyplot 可以直接在当前的axes上绘制图像,若未指定axes,matplotlib也会自动从创建

axes_m = plt.plot([1,2,3,4],[2,3,1,4])

Figure的组成

figure的组成包含四个层级,也就是一个完整的matplotlib包含四个层级,层级也被称为容器。matplotlib通过各种命令方法操控各个层级,实现数据可视化。下图来自datawhale。

  • Figure:顶层级,用来容纳所有的绘图元素
  • Axes:Axes是整个图的核心,其包含了大量元素构造一幅幅子图,一个figure可以由一个或多个子图组成
  • Axis:是Axes的下属层级,用于处理所有与坐标轴,网格相关的元素,在下图中也可以看到
  • Tick:同样是Axes的下属层级,用来处理与刻度有关的元素

Matplotlib_one_第2张图片

两种常见的绘图接口

  1. 显式创建figure和aexs,在上面调用绘图方法,也称为OO模式(object-oriented style)
  2. 依赖pyplot自动创建figure和axes
#第一种方式
y = np.linspace(0, 3, 100) #从0到3创建100个数据对象

figure_m, axes_m = plt.subplots()
axes_m.plot(y, x**4, label='x**4')
axes_m.plot(y, x**2, label='x**2')
axes_m.set_xlabel('x label')
axes_m.set_ylabel('y label')
axes_m.legend()
plt.show()

Matplotlib_one_第3张图片

#第二种
y = np.linspace(0, 3, 100) #从0到3创建100个数据对象

plt.plot(y, x**4, label='x**4')
plt.plot(y, x**2, label='x**2')
plt.xlabel('x label')
plt.ylabel('y label')
plt.legend()
plt.show()

通用模板

(摘自datawhale)

# 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()
plt.show()

思考题

  • 请思考两种绘图模式的优缺点和各自适合的使用场景

OO模式是面向对象式绘图,更好的指定对象在数据量过大时更加清晰,适用于非交互式绘图

pyplot方法多用于交互式绘图

你可能感兴趣的:(matplotlib,python,开发语言)