数据可视化笔记 Task1 - 走进Matplotlib

Matplotlib是用于Python绘图的一个第三方开源库,其官网[2]上这样描述:Matplotlib是一个Python可视化库,用于实现静态、动画以及交互式可视化。Matplotlib使简单的东西更简单,使困难的东西变得可能。Python现有的大多数第三方库都基于Matplotlib,例如Pandas的绘图模块。这次笔记预计实现几个Matplotlib绘图模板,首先对Matplotlib进行大体了解。

绘制基本函数图-指数函数

# 导入模块
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-5, 5)  # 设置横坐标
y = np.exp(x)  # 设置纵坐标及函数

fig, ax = plt.subplots()  # 创建包含一个坐标系的图
ax.plot(x, y)  # 绘制图形
plt.show()  # 显示图片

Figure的组成&函数解释[3]

官网上给出的一个Matplotlib Figure的结构图如下:

 这里对上一小节的实例进行注解:

Figure:保存整张图。包含所有元素——子axes、标题、图例、色块、嵌套子图等。举个栗子:

fig = plt.figure()  # an empty figure with no Axes
fig, ax = plt.subplots()  # a figure with a single Axes
fig, axs = plt.subplots(2, 2)  # a figure with a 2x2 grid of Axes

plt.figure()函数参数如下(点击函数可看源API):

plt.figure(
    num=None,  # 图ID,若该ID已存在,则返回;若不存在,则创建。(int/str/figure类型,可选参数)

    figsize=None,  # 宽高(单位:英寸)。((float, float)类型,默认[6.4, 4.8])

    dpi=None,  # 图形分辨率(单位:点/英寸)。(float类型,默认100.0)

    facecolor=None,  # 背景色。(color类型,默认white)

    edgecolor=None,  # 边界颜色。(color类型,默认white)

    frameon=True,  # 图形框架。(bool类型,默认True绘制)
    
    FigureClass=<class 'matplotlib.figure.Figure'>,

    clear=False,  # 清除图。(bool类型,默认False)

    **kwargs
)

plt.subplots()函数创建一张图及一组子图,很实用。参数如下:

​plt.subplots(

    nrows=1, ncols=1,  # 子图网格的行/列数(int类型,默认1)

    *, 

    sharex=False, sharey=False,  # 控制沿某坐标轴相关属性的共享。(bool/ {'none', 'all', 
                                   'row', 'col'}类型,默认False)

    squeeze=True,  # 控制返回维度。(bool类型,默认True)

    subplot_kw=None, gridspec_kw=None, **fig_kw

)

Axes:是一个附着于一个Figure的Artist,包含一个绘图区域、两个坐标轴axis对象(3D中3个)、一个标题(title可设置set_title())、一个x轴标签(set_xlabel()设置)、一个y轴标签(set_ylabel()设置)。

Axis:设置坐标刻度、刻度范围、刻度标签、轴标签,刻度位置可Locator对象确定,刻度标签可由Formatter对象格式化。Axis是及其成员函数是大多数OOP接口的主要入口点,其上定义了许多绘图方法。

Artist:这个概念可以说是matplotlib的基本概念。Figure中的任何可视部件都是artist(包括Figure、Axes、Axis对象都是artist),图在渲染时所有artist都将绘制到画布上。

两种绘图接口

matplotlib提供了两种最常用的绘图接口,一种面向对象(OO模式),一种依赖pyplot自动创建figure和axes以及绘图。

OO模式(object-oriented style)实例:

# 面向对象方法
x = np.linspace(0, 3, 100)

fig, ax = plt.subplots()  
ax.plot(x, x, label='linear')  
ax.plot(x, x ** 3, label='cubic')  
ax.plot(x, np.exp(x), label='exponential')  
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.legend() 

依赖pyplot创建实例:

# 自动创建方法
x = np.linspace(0, 3, 100)

plt.plot(x, x, label='linear') 
plt.plot(x, x ** 3, label='cubic') 
plt.plot(x, np.exp(x), label='exponential')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

这两个简单例子结果相同,看起来好像第二种代码更简介一些(少了生成figure和axes的步骤),事实并非如此[4]:

第一种方法同时生成figure(实际上是一张画布)和axes(画布上的一片作图区域),并使用axes对象在其区域内作图;

第二种方法首先生成一张画布,然后通过pyplot隐式地生成作图区域(也生成了,但是不直观体现在代码中)作图。

 因为上面两个例子都很简单,不需要过多的操作,因此二者效果相同;事实上,如果要对多个子图中的多个部件参数进行设置,用第二种会很麻烦,而第一种就是面向对象思维,对开发者更友好。

Matplotlib绘图模板

这里先使用Datawhale项目[1]中的模板,待学完所有任务再创建自己的模板。

# 来源[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] Datawhale数据可视化开源小组. Fantastic-Matplotlib, 第一回:Matplotlib初相识. 2022.01

[2] Matplotlib官网

[3] Matplotlib - Basic Usage

[4] CSDN博客:Matplotlib中的plt和ax都是啥?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值