01 熟悉python绘图工具——matplotlib

一、简单案例

Matplotlib的图像是画在figure,每一个figure又包含了一个或多个axes(axes可用于指定绘图的子区域)

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

(1)直接画

默认会构建一个figure,上面只有一个axes

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

01 熟悉python绘图工具——matplotlib_第1张图片

(2)主动画一个figure,上面画个axes

效果和默认画图一样,但是可以指定画板figure大小

#fig = plt.figure()
fig = plt.figure(figsize=(6,3))  # 自定义画板figure大小
#ax = plt.subplots()  # 创建一个包含一个axes的figure
ax = fig.subplots()  # 该写法和上面一个结果一样
# fig, ax = plt.subplots() #也可以fig和axes一起写,结果一样
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]);  # 绘制图像
# plt.show()

01 熟悉python绘图工具——matplotlib_第2张图片

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

①在代码块最后加一个分号“;”

②在代码块最后加一句plt.show()

③在绘图时将绘图对象显式赋值给一个变量,如将plt.plot([1, 2, 3, 4]) 改成line =plt.plot([1, 2, 3, 4])

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

01 熟悉python绘图工具——matplotlib_第3张图片

二、matplitlib的figure组成

完整的matplotlib图像可以分为四个层级,分别是:

①Figure:顶层级,用来容纳所有绘图元素

②Axes:matplotlib核心,可以看做是子图的容器,一个figure可以由一个或多个子图组成

③Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素

④Tick:axis的下属层级,用来处理所有和刻度有关的元素

三、两种绘图接口

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

① 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)

② 依赖pyplot自动创建figure和axes,并绘图

(1)使用第一种方式绘图

先介绍下np.linspace这个函数

在指定数据范围内,以均匀步长生成指定数量的数,包含收尾数字

# 在[0,10]之间以均匀步长生产5个数字
s = np.linspace(0,10,5)
print(s)
plt.scatter([1]*len(s), s)
[ 0.   2.5  5.   7.5 10. ]






01 熟悉python绘图工具——matplotlib_第4张图片

X = np.linspace(0, 2, 100)  # 在[0,2]之间生成100个均匀步长的数据
X
array([0.        , 0.02020202, 0.04040404, 0.06060606, 0.08080808,
       0.1010101 , 0.12121212, 0.14141414, 0.16161616, 0.18181818,
       0.2020202 , 0.22222222, 0.24242424, 0.26262626, 0.28282828,
       0.3030303 , 0.32323232, 0.34343434, 0.36363636, 0.38383838,
       0.4040404 , 0.42424242, 0.44444444, 0.46464646, 0.48484848,
       0.50505051, 0.52525253, 0.54545455, 0.56565657, 0.58585859,
       0.60606061, 0.62626263, 0.64646465, 0.66666667, 0.68686869,
       0.70707071, 0.72727273, 0.74747475, 0.76767677, 0.78787879,
       0.80808081, 0.82828283, 0.84848485, 0.86868687, 0.88888889,
       0.90909091, 0.92929293, 0.94949495, 0.96969697, 0.98989899,
       1.01010101, 1.03030303, 1.05050505, 1.07070707, 1.09090909,
       1.11111111, 1.13131313, 1.15151515, 1.17171717, 1.19191919,
       1.21212121, 1.23232323, 1.25252525, 1.27272727, 1.29292929,
       1.31313131, 1.33333333, 1.35353535, 1.37373737, 1.39393939,
       1.41414141, 1.43434343, 1.45454545, 1.47474747, 1.49494949,
       1.51515152, 1.53535354, 1.55555556, 1.57575758, 1.5959596 ,
       1.61616162, 1.63636364, 1.65656566, 1.67676768, 1.6969697 ,
       1.71717172, 1.73737374, 1.75757576, 1.77777778, 1.7979798 ,
       1.81818182, 1.83838384, 1.85858586, 1.87878788, 1.8989899 ,
       1.91919192, 1.93939394, 1.95959596, 1.97979798, 2.        ])
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()

01 熟悉python绘图工具——matplotlib_第5张图片

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

01 熟悉python绘图工具——matplotlib_第6张图片

四、通用绘图模板

matplotlib的知识点比较繁杂,不可能全部记住,实际应用时随用随查,因此这里提供一个通用的绘图基础模板,后续再基于这个图表进行填充优化

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

01 熟悉python绘图工具——matplotlib_第7张图片

五、思考

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

(1)显式创建figure和axes,适用于需要绘制多个图,调整子图格式的情况,比较方便,但是对于绘制一个图的时候,比较麻烦,还需要多写一些代码
(2)依赖pyplot自动创建figure和axes,不方便调整子图格式以及子图间距

  1. 在上一绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2

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

# step3 定义布局, 这一模块的扩展参考第三章进一步学习
fig = plt.figure
ax = plt.subplots()

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

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

01 熟悉python绘图工具——matplotlib_第8张图片


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