文章目录
版本是matplotlib
1. matplotlib
matplotlib是一个使用python实现数据可视化的库。
2. 图形的组成
Figure:整个图形。一个Figure可以有1个或任意个Axes。
使用pyplot创建图形
fig = plt.figure()
fig, ax = plt.subplots()
fig, axs = plt.subplots(2, 2)
Axes:坐标轴。一个Figure可以包含许多Axes,但一个Axes只能属于一个Figure。Axes可以包含2个或3个Axis(轴)。
Axis:轴。他们负责设置图形限制并生成刻度(轴上的标记)和刻度标签(标记刻度的字符串)。刻度的位置由Locator对象确定,刻度标签字符串由Formatter格式化。
Artist:基本上,在图形中看到的所有东西都属于Artist,甚至包括Figure,Axes,Axis。在渲染Figure时,几乎所有的Artist都会被画到canvas(画布)上。
Title:图形的标题。
Y axis label:Y轴的标签。
X axis label:X轴的标签。
Major tick:大刻度。
minor tick:小刻度。
Legend:图例。
Grid:网格。
3. 绘图函数(plotting functions)的输入类型
绘图函数希望的输入的是np.array或np.ma.masked_array。类数组的对象(如:pandas数据对象,np.matrix)可能不能正常工作,需要转换为np.array对象。
4. matplotlib, pyplot, pylab有什么关系
matplotlib是整个包,matplotlib.pyplot是matplotlib包中的一个模块。
对于pyplot模块中的函数而言,总是针对“当前”图形和坐标轴的。方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。
pylab也是matplotlib包下的一个子模块。其中包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。
5. 面向对象接口和pyplot接口
通常,使用matplotlib有如下两种方式:
- 显式创建figures和axes,然后调用它们的方法来绘图。
- 依赖pyplot自动创建和管理figures和axes,然后调用pyplot的方法来绘图。
方式1
import numpy as np
import matplotlib.pyplot as plt
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') # 为此坐标轴添加x-label
ax.set_ylabel('y label') # 为此坐标轴添加y-label
ax.set_title("Simple Plot") # 为此坐标轴添加标题
ax.legend() # 添加一个图例
方式2
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()
关于两种(其实还有第三种,在GUI中绘图)绘图方式的选择:
通常,pyplot用于交互式绘图(例如,在Jupyter笔记本中),而OO-style用于非交互式绘图(在打算作为较大项目的一部分重复使用的函数和脚本中)
通常,人们会发现使用不同的数据集一遍又一遍地绘制相同的图,所以需要写属于自己的绘图函数(plotting functions):
def my_plotter(ax, data1, data2, param_dict):
"""
a hlper function to make a graph
Parameters
----------
ax: Axes
The axes to draw to
data1: array
The x data
data2: array
The y data
param_dict: dict
Dictionary of kwargs to pass to ax.plot
Returns
---------
out: list
List of artists added
"""
out = ax.plot(data1, data2, **param_dict)
return out
这样使用:
data1, data2, data3, data4 = np.random.randn(4, 100)
fig, ax = plt.subplots(1, 1)
my_plotter(ax, data1, data2, {'marker': 'x'})
创建1行2列的子图:
fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, data1, data2, {'marker': 'x'})
my_plotter(ax2, data3, data4, {'marker': 'o'})
6. 总结
本博文只是对matplotlib官方文档中的用户指南的转译,如有谬误请指出。
7. 参考文献
[1] matplotlib官方文档