基本概念
数据格式
matplotlib
接受numpy.array
的数据格式进行绘制。pandas
numpy.matrix
格式对象最好进行转换。import numpy as np import pandas as pd import matplotlib.pyplot as plt a = pandas.DataFrame(np.random.rand(4, 5), columns = list('abcde')) a_asarray = a.values b = np.matrix([[1, 2], [3, 4]]) b_asarray = np.asarray(b)
调用风格
类似
matlab
风格,调用plt
的函数进行绘制,作用于当前的axes
对象上。适用于交互编程,如
jupyter-notebook
。x = np.linspace(0, 2, 100) plt.plot(x, x, label='linear') # Plot some data on the (implicit) axes. plt.plot(x, x**2, label='quadratic') # etc. plt.plot(x, x**3, label='cubic') plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.legend()
面向对象 (OO) 风格,调用
Axes
的函数进行绘制,作用于调用函数的axes
对象上。适用于非交互编程,函数复用的场景。
x = np.linspace(0, 2, 100) # fig 是 Figure 对象 # ax 是 AxesSubplot 对象 fig, ax = plt.subplots() ax.plot(x, x, label='linear') # Plot some data on the axes. ax.plot(x, x**2, label='quadratic') # Plot more data on the axes... ax.plot(x, x**3, label='cubic') # ... and some more. ax.set_xlabel('x label') ax.set_ylabel('y label') ax.set_title("Simple Plot") ax.legend()
概念解释
Canvas
- 实际进行绘图的对象,对用户隐藏。
Figure
类似绘图时使用的画板,上面可以放很多的画纸。
# 只创建画布,不创建绘制区域,可以之后再创建 fig = plt.figure() # 创建画布,附带一个绘制区域 fig, ax = plt.subplots() # 创建画布,附带 2*2 个绘制区域 fix, axs = plt.subplots(2, 2)
Axes
- 类似绘图时使用的画纸。
- 一个
Figure
对象可以有很多个Axes
,但每个Axes
只能从属于一个Figure
。 - 具有2或3个
Axis
对象,即图上的坐标轴。 - 函数接口包括:
- 刻度范围:
set_xlim
,set_ylim
; - 标题:
set_title
; - 坐标轴标签:
set_xlabel
,set_ylabel
等。
- 刻度范围:
Axis
- 图上的坐标轴,管理轴上的刻度和刻度名称、范围。
- 通过
Locator
和Formator
控制名称的位置和格式。
Artist
- 每个绘制对象都是一个
Artist
对象,从属于一个Axes
对象。
- 每个绘制对象都是一个
代码抽象
def plotter(ax, xdata, ydata, **params):
return ax.plot(xdata, ydata, **params)
data1, data2, data3, data4 = np.random.randn(4, 100)
fig, ax = plt.subplots(1, 1)
plotter(ax, data1, data2, marker='x')
fig, (ax1, ax2) = plt.subplots(1, 2)
plotter(ax1, data1, data2, marker='x')
plotter(ax2, data3, data4, marker='o')
设置后端的不同方式
rcParams['backend']
配置文件matplotlibrc
MPLBACKEND
环境变量# Linux > export MPLBACKEND=qt5agg > python simple_plot.py > MPLBACKEND=qt5agg python simple_plot.py # Windows > set MPLBACKEND=qt5agg > python simple_plot.py
matplotlib.use
import matplotlib matplotlib.use('qt5agg')
交互模式与非交互模式
交互模式即时更新图像:PyQt/PySide, PyGObject, Tkinter, wxPython, or macOS/Cocoa。
plt.ion() plt.title() ax = plt.gca() ax.set_title()
非交互模式调用
show
一次性绘制所有对象。阻塞进程,直到手动关闭绘制的图像窗口。plt.ioff() ... ... plt.show()