datawhale-matplotlib-01

【来源】:第一回:Matplotlib初相识 — fantastic-matplotlib

一 背景

  • Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。
  • 适用于:Python脚本,Python和IPython Shell、Jupyter notebook,Web应用程序服务器和各种图形用户界面工具包
  • pandas和seaborn的绘图接口其实也是基于matplotlib所作的高级封装。

二 快速上手

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

一个axes就是一个子图

pyplot.subplots命令

pyplot.subplots命令是最简单的创建figure以及axes的方式

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

fig, ax = plt.subplots()  # 创建一个包含一个axes的figure

创建axes以后,可以在上面绘图,比如使用.plot绘制折线图:

ax.plot([1, 2, 3, 4], [1, 4, 2, 3]);  # 绘制了一个简单的折线图

matplotlib.pyplot命令

matplotlib.pyplot可以直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会自动创建一个。

所以创建上述折线图可以简化为以下这一行代码。

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

三 Figure详解

一个matplotlib图像包括四个层级的元素:

datawhale-matplotlib-01_第1张图片

  • Figure:顶层级,用来容纳所有绘图元素
  • Axes:核心,一个子图,一个figure可以由一个或多个子图组成
  • Axis:axes的下属层级,用于处理所有和坐标轴、网格有关的元素
  • Tick:axis的下属层级,用来处理所有和刻度有关的元素

 

四 matplotlib提供的绘图接口

matplotlib提供了两种最常用的绘图接口

  1. 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
  2. 依赖pyplot自动创建figure和axes

感觉OO模式会更自由,能绘制更多复杂图表

分别使用两种接口绘制下图:

datawhale-matplotlib-01_第2张图片

第一种接口

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

第二种接口

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

五 通用的绘图模板

OO模式的绘图模板

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

pyplot自动创建的模板

# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2

# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像时进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')

# step3 定义布局, 这一模块的扩展参考第三章进一步学习


# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear')  

# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()

datawhale-matplotlib-01_第3张图片
​​​​​​​

补充:一个关于Jupyter Notebook的技巧

Trick: 在jupyter notebook中使用matplotlib时会发现,代码运行后自动打印出类似这样一段话,这是因为matplotlib的绘图代码默认打印出最后一个对象。如果不想显示这句话,有以下三种方法。

  1. 在代码块最后加一个分号;
  2. 在代码块最后加一句plt.show()
  3. 在绘图时将绘图对象显式赋值给一个变量,如将plt.plot([1, 2, 3, 4]) 改成line =plt.plot([1, 2, 3, 4])

你可能感兴趣的:(matplotlib,python)