- 目录
- 三、matplotlib概述
- 1. matplotlib基本功能
- 四、matplotlib基本功能详解
- 1. 基本绘图
- 1)绘图核心API
- 2)设置线条属性( 线型、线宽...)
- 3)设置坐标轴范围
- 4)设置坐标刻度
- 5) 设置坐标文字
- 6)设置坐标轴
- 7)图例
- 8)设置特殊点
- 9)备注
- 2. 图形对象(图形窗口)
- 1)子图
- 2)刻度定位器
- 3)刻度网格线
- 5)填充
- 6)散点图
- 7)条形图(柱状图)
- 8)饼图
matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。通常用于数据可视化
数据可视化
数据可视化是指使用图形的方式展现数据的分布规律
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fKqvPqsX-1638272061347)(./img/饼图示例.png)]
1. matplotlib基本功能- 基本绘图 (在二维平面坐标系中绘制连续的线)
- 设置线型、线宽和颜色
- 设置坐标轴范围
- 设置坐标刻度
- 设置坐标轴
- 图例
- 特殊点
- 备注
- 图形对象(图形窗口)
- 子图
- 刻度定位器
- 刻度网格线
- 半对数坐标
- 散点图
- 填充
- 条形图
- 饼图
- 等高线图
- 热成像图
- 三维曲面
- 简单动画
四、matplotlib基本功能详解 1. 基本绘图 1)绘图核心API官方文档: https://matplotlib.org/
官方中文文档: https://www.matplotlib.org.cn/
- 绘制水平线API
import matplotlib.pyplot as plt
plt.axhline(y=y轴位置 ...)
plt.hlines([y1, y2, y3, ...], # Y轴 位置
[x11, x21, x31, ...], # X 轴的起始位置
[x12, x22, x32, ...]) # X 轴的终止位置
- 绘制垂直竖线API
import matplotlib.pyplot as plt
plt.axvline(x=x轴位置, ...)
plt.vlines([x1, x2, x3, ...], # X轴 位置
[y11, y21, y31, ...], # Y 轴的起始位置
[y12, y22, y32, ...]) # Y 轴的终止位置
- 绘制折线API
import matplotlib.pyplot as plt plt.plot(x坐标点(矢量), y坐标点(矢量), ...)
案例: 绘制简单直线
import numpy as np
import matplotlib.pyplot as plt
# 绘制水平线
plt.axhline(y=6, ls=":", c="blue") # 添加水平直线
# 绘制垂线
plt.axvline(x=4, ls="-", c="red") # 添加垂直直线
# 绘制多段垂线
plt.vlines([2, 3, 3.5], # 垂线的x坐标值
[10, 20, 30], # 每条垂线起始y坐标
[25, 35, 45]) # 每条垂线结束y坐标
# 绘制简单直线
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 2, 9, 8, 15])
plt.plot(x, y)
plt.savefig('mypic.png') # 保存图片为PNG 图片
plt.show() # 显示图片,阻塞方法
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Byf22lb-1638272061348)(./img/直线.png)]
2)设置线条属性( 线型、线宽…)-
用来标识线性的关键字参数
-
linestyle、ls:
设置线型
- 符号字符串:常见取值有实线(’-’)、虚线(’–’)、点虚线(’-.’)、点线(’:’)
- 线型名字字符串,如:‘solid’, ‘dotted’, ‘dashed’, ‘dashpot’
- 元组:如(0, (1, 5))
具体线型见下表
-
linewidth、lw:线宽数字
-
color、c颜色:
- 颜色字符串,如: ‘red’, ‘dodgerblue’; 详见下表《颜色标记字符串》
- RGB 格式的字符串#RRGGBB, 如 ‘#CE50B3’或#RRGGBBAA 如:’#FF888840’
- RGB颜色的列表(red, blue, green), 如(0.3, 1.0, 0.5, 0.5)
-
alpha: 设置透明度(0~1之间)
-
案例:绘制正弦、余弦曲线,并设置线型、线宽、颜色、透明度
# 绘制正弦曲线
import numpy as np
import matplotlib.pyplot as plt
import math
x = np.arange(0, 2 * np.pi, 0.1) # 以0.1为单位,生成0~6的数据
print(x)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin", linewidth=2) # 实线,线宽2像素
plt.plot(x, y2, label="cos", linestyle="--", linewidth=4) # 虚线,线宽4像素
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(0, 2 * math.pi)
plt.ylim(-1, 2)
plt.title("sin & cos") # 图标题
plt.legend() # 图例
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmXKxS3E-1638272061349)(./img/sin_cos曲线.png)]
- 线型表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHDASXNK-1638272061349)(./img/line_style.png)]
- 颜色标记字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jmJdLqd4-1638272061350)(./img/matplotlib_colors.png)]
3)设置坐标轴范围语法:
#x_limt_min:4)设置坐标刻度x轴范围最小值 #x_limit_max: x轴范围最大值 plt.xlim(x_limt_min, x_limit_max) #y_limt_min: y轴范围最小值 #y_limit_max: y轴范围最大值 plt.ylim(y_limt_min, y_limit_max)
语法:
# 设置 x 轴 刻度
plt.xticks(
ticks=None, # x轴刻度值序列
labels=None, # x轴刻度标签文本序列
rotation=0 # 刻度旋转角度
)
# 设置 y 轴 刻度
plt.yticks(
ticks=None, # y轴刻度值序列
labels=None, # y轴刻度标签文本序列
rotation=0 # 刻度旋转角度
)
5) 设置坐标文字
语法
# 设置x轴文字
plt.xlabel("x轴文字", fontsize=字体大小)
# 设置y轴文字
plt.ylabel("y轴文字", fontsize=字体大小)
案例:绘制二次函数曲线
# 绘制二次函数曲线
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5, 5, 0.1) # 以0.1为单位,生成-5~5的数据
y = x ** 2
# 绘制图形
plt.plot(x, y, label="$y = x^2$",
linewidth=2, # 线宽2像素
color="red", # 颜色
alpha=0.5) # 透明度
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(-10, 10)
plt.ylim(-1, 30)
# 设置刻度
plt.title("square") # 图标题
plt.legend(loc="upper right") # 图例 upper right, center
plt.show()
执行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AX5MaWgB-1638272061350)(./img/一元二次曲线.png)]
刻度文本的特殊语法 – LaTex排版语法字符串
r'$x^n+y^n=z^n$', r'$intfrac{1}{x} dx = ln |x| + C$', r'$-frac{pi}{2}$'
x n + y n = z n , ∫ 1 x d x = ln ∣ x ∣ + C , − π 2 x^n+y^n=z^n, intfrac{1}{x} dx = ln |x| + C, - frac{pi}{2} xn+yn=zn,∫x1dx=ln∣x∣+C,−2π
6)设置坐标轴坐标轴名:left / right / bottom / top
# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
ax = plt.gca()
# 获取其中某个坐标轴
axis = ax.spines['坐标轴名']
# 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
# type: 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值)
# val: 参照值
axis.set_position((type, val))
# 设置坐标轴的颜色
# color: 颜色值字符串
axis.set_color(color)
案例:设置坐标轴格式
# 设置坐标轴
import matplotlib.pyplot as plt
ax = plt.gca()
axis_b = ax.spines['bottom'] # 获取下轴
axis_b.set_position(('data', 0)) # 设置下轴位置, 以数据作为参照值
axis_l = ax.spines['left'] # 获取左轴
axis_l.set_position(('data', 0)) # 设置左轴位置, 以数据作为参照值
ax.spines['top'].set_color('none') # 设置顶部轴无色
ax.spines['right'].set_color('none') # 设置右部轴无色
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRiFhRYg-1638272061351)(./img/坐标轴格式.png)]
7)图例-
Label 关键子参数设置图例文字
再绘制曲线时定义曲线的label
label: <关键字参数 str> 支持LaTex排版语法字符串
函数:
plt.plot(xarray, yarray, ... ,label='图例文字', ...)
-
设置图例的位置
函数:
plt.legend(loc='位置字符串')
图例的显示位置 loc 的值
| Location String | Location Code |
|---|---|
| ‘best’ | 0 |
| ‘upper right’ | 1 |
| ‘upper left’ | 2 |
| ‘lower left’ | 3 |
| ‘lower right’ | 4 |
| ‘right’ | 5 |
| ‘center left’ | 6 |
| ‘center right’ | 7 |
| ‘lower center’ | 8 |
| ‘upper center’ | 9 |
| ‘center’ | 10 |
示例
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi)
sin_y = np.sin(x)
cos_y = np.cos(x)/2
plt.plot(x, sin_y, linewidth=2, label=r'$y=sin(x)$')
plt.plot(x, cos_y, linewidth=2, label=r'$y=frac{cos(x)}{2}$')
plt.legend()
plt.show()
效果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xuR9VL4W-1638272061351)(./img/lines_label.png)]
8)设置特殊点函数:
# xarray: <序列> 所有需要标注点的水平坐标组成的序列
# yarray: <序列> 所有需要标注点的垂直坐标组成的序列
plt.scatter(xarray, yarray,
marker='', #点型 ~ matplotlib.markers
size='', #大小
edgecolor='', #边缘色
facecolor='', #填充色
zorder=3 #绘制图层编号 (编号越大,图层越靠上)
)
示例:在二次函数图像中添加特殊点
# 绘制二次函数曲线
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5, 5, 0.1) # 以0.1为单位,生成-5~5的数据
y = x ** 2
# 绘制图形
plt.plot(x, y, label="$y = x^2$",
linewidth=2, # 线宽2像素
color="red", # 颜色
alpha=0.5) # 透明度
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(-10, 10)
plt.ylim(-1, 30)
# 设置刻度
plt.title("square") # 图标题
plt.legend(loc="upper right") # 图例 upper right, center
# 绘制散点图
point_x = np.array([-4, -2, 0, 2, 4])
point_y = point_x ** 2
# 绘制特殊点
plt.scatter(point_x, point_y,
marker='s',
s=50,
edgecolors='blue',
facecolor='yellow',
zorder=3)
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTveZNvL-1638272061352)(./img/特殊点.png)]
- matplotlib点样式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lU9lbug6-1638272061352)(./img/matplotlib_markers.png)]
9)备注语法:
# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
plt.annotate(
r'$frac{pi}{2}$', #备注中显示的文本内容
xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系)
xy=(x, y), #备注目标点的坐标
textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
xytext=(x, y), #备注文本的坐标
fontsize=14, #备注文本的字体大小
arrowprops=dict() #使用字典定义文本指向目标点的箭头样式
)
arrowprops参数使用字典定义指向目标点的箭头样式
#arrowprops字典参数的常用key
arrowprops=dict(
arrowstyle='', #定义箭头样式
connectionstyle='' #定义连接线的样式
)
箭头样式(arrowstyle)字符串如下
============ ============================================= Name Attrs ============ ============================================= '-' None '->' head_length=0.4,head_width=0.2 '-[' widthB=1.0,lengthB=0.2,angleB=None '|-|' widthA=1.0,widthB=1.0 '-|>' head_length=0.4,head_width=0.2 '<-' head_length=0.4,head_width=0.2 '<->' head_length=0.4,head_width=0.2 '<|-' head_length=0.4,head_width=0.2 '<|-|>' head_length=0.4,head_width=0.2 'fancy' head_length=0.4,head_width=0.4,tail_width=0.4 'simple' head_length=0.5,head_width=0.5,tail_width=0.2 'wedge' tail_width=0.3,shrink_factor=0.5 ============ =============================================
连接线样式(connectionstyle)字符串如下
============ ============================================= Name Attrs ============ ============================================= 'angle' angleA=90,angleB=0,rad=0.0 'angle3' angleA=90,angleB=0` 'arc' angleA=0,angleB=0,armA=None,armB=None,rad=0.0 'arc3' rad=0.0 'bar' armA=0.0,armB=0.0,fraction=0.3,angle=None ============ =============================================
示例:在二次函数图像中添加备注
# 绘制二次函数曲线
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5, 5, 0.1) # 以0.1为单位,生成-5~5的数据
y = x ** 2
# 绘制图形
plt.plot(x, y, label="$y = x ^ 2$",
linewidth=2, # 线宽2像素
color="red", # 颜色
alpha=0.5) # 透明度
plt.xlabel("x") # x轴文字
plt.ylabel("y") # y轴文字
# 设置坐标轴范围
plt.xlim(-10, 10)
plt.ylim(-1, 30)
# 设置刻度
plt.title("square") # 图标题
plt.legend(loc="upper right") # 图例 upper right, center
# 绘制散点图
point_x = np.array([-4, -2, 0, 2, 4])
point_y = point_x ** 2
# 绘制特殊点
plt.scatter(point_x, point_y,
marker='s',
s=50,
edgecolors='blue',
facecolor='yellow',
zorder=3)
# 设置备注
plt.annotate(
r'$y=x^2$', #备注中显示的文本内容
xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系)
xy=(4, 16), #备注目标点的坐标 (4,16)
textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
xytext=(20, 30), #备注文本的坐标
fontsize=14, #备注文本的字体大小
arrowprops=dict(
arrowstyle="->",
connectionstyle="angle3"
) #使用字典定义文本指向目标点的箭头样式
)
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4scGfafh-1638272061352)(./img/添加备注.png)]
2. 图形对象(图形窗口)语法:绘制两个窗口,一起显示。
# 手动构建 matplotlib 窗口
plt.figure(
'sub-fig', #窗口标题栏文本
figsize=(4, 3), #窗口大小 <元组>
facecolor='' #图表背景色
)
plt.show()
plt.figure方法不仅可以构建一个新窗口,如果已经构建过title='xxx’的窗口,又使用figure方法构建了title=‘xxx’ 的窗口的话,mp将不会创建新的窗口,而是把title='xxx’的窗口置为当前操作窗口。
设置当前窗口的参数
语法:测试窗口相关参数
# 设置图表标题 显示在图表上方
plt.title(title, fontsize=12)
# 设置水平轴的文本
plt.xlabel(x_label_str, fontsize=12)
# 设置垂直轴的文本
plt.ylabel(y_label_str, fontsize=12)
# 设置刻度参数 labelsize设置刻度字体大小
plt.tick_params(..., labelsize=8, ...)
# 设置图表网格线 linestyle设置网格线的样式
# - or solid 粗线
# -- or dashed 虚线
# -. or dashdot 点虚线
# : or dotted 点线
plt.grid(linestyle='')
# 设置紧凑布局,把图表相关参数都显示在窗口中
plt.tight_layout()
示例:绘制两个图像窗口
# 绘制两个图像窗口
import matplotlib.pyplot as plt
plt.figure("FigureA", facecolor="lightgray")
plt.grid(linestyle="-.") # 设置网格线
plt.figure("FigureB", facecolor="gray")
plt.xlabel("Date", fontsize=14)
plt.ylabel("Price", fontsize=14)
plt.grid(linestyle="--") # 设置网格线
plt.tight_layout() # 设置紧凑布局
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0kZWgvm-1638272061353)(./img/两个窗口.png)]
1)子图矩阵式布局
绘制矩阵式子图布局相关API:
plt.figure('Subplot Layout', facecolor='lightgray')
# 拆分矩阵
# rows: 行数
# cols: 列数
# num: 编号
plt.subplot(rows, cols, num)
# 1 2 3
# 4 5 6
# 7 8 9
plt.subplot(3, 3, 5) #操作3*3的矩阵中编号为5的子图
plt.subplot(335) #简写
案例:绘制9宫格矩阵式子图,每个子图中写一个数字。
import matplotlib.pyplot as plt
plt.figure('Subplot Layout', facecolor='lightgray')
for i in range(9):
plt.subplot(3, 3, i+1)
plt.text(
0.5, 0.5, i+1,
ha='center',
va='center',
size=36,
alpha=0.5
)
plt.xticks([])
plt.yticks([])
plt.tight_layout()
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgwQgMte-1638272061353)(./img/9个子图.png)]
网格式布局(很少使用)**
网格式布局支持单元格的合并。
绘制网格式子图布局相关API:
import matplotlib.gridspec as mg
plt.figure('Grid Layout', facecolor='lightgray')
# 调用GridSpec方法拆分网格式布局
# rows: 行数
# cols: 列数
# gs = mg.GridSpec(rows, cols) 拆分成3行3列
gs = mg.GridSpec(3, 3)
# 合并0行与0、1列为一个子图表
plt.subplot(gs[0, :2])
plt.text(0.5, 0.5, '1', ha='center', va='center', size=36)
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VatiLf78-1638272061353)(./img/grid_layout.png)]
案例:绘制一个自定义网格布局。
import matplotlib.pyplot as plt
import matplotlib.gridspec as mg
plt.figure('Grid Layout', facecolor='lightgray')
# 创建一个 3x3的矩阵
gs = mg.GridSpec(3, 3)
# 创建子图,占用 第一行、第1~2列
plt.subplot(gs[0, :2])
plt.xticks([])
plt.yticks([])
plt.text(0.5, 0.5, '1', fontsize=36, ha='center', va='center', alpha=0.5)
# 创建子图,占用 第1~2行、第3列
plt.subplot(gs[:2, 2])
plt.xticks([])
plt.yticks([])
plt.text(0.5, 0.5, '2', fontsize=36, ha='center', va='center', alpha=0.5)
...
plt.tight_layout()
plt.savefig('grid_layout.png')
plt.show()
自由式布局(很少使用)
自由式布局相关API:
plt.figure('Flow Layout', facecolor='lightgray')
# 设置图标的位置,给出左下角点坐标与宽高即可
# left_bottom_x: 坐下角点x坐标
# left_bottom_x: 坐下角点y坐标
# width: 宽度
# height: 高度
# plt.axes([left_bottom_x, left_bottom_y, width, height])
plt.axes([0.03, 0.03, 0.94, 0.94])
plt.text(0.5, 0.5, '1', ha='center', va='center', size=36)
plt.show()
效果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7QEAT59d-1638272061354)(./img/axes_layout.png)]
示例代码:
import matplotlib.pyplot as plt
plt.figure('Axes Layout', facecolor='lightgray')
# 大的坐标图
plt.axes([0.05, 0.05, 0.9, 0.9])
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, '1', fontsize=48, ha='center', va='center', alpha=0.5)
# 小的坐标图(自由式布局,定位子图)
plt.axes([0.55, 0.1, 0.35, 0.35])
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, '2', fontsize=48, ha='center', va='center', alpha=0.5)
plt.tight_layout()
plt.savefig('axes_layout.png')
plt.show()
2)刻度定位器day04
刻度定位器相关API:
# 获取当前坐标轴 ax = plt.gca() # 设置水平坐标轴的主刻度(显示字的刻度)定位器 ax.xaxis.set_major_locator(plt.NullLocator()) # 设置水平坐标轴的次刻度(不显示字的刻度)定位器为多点定位器,间隔0.1 ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))
案例:绘制一个数轴,每隔1一个主刻度,每隔0.1一个次刻度。
import matplotlib.pyplot as plt
plt.figure('Locators', facecolor='lightgray')
# 获取当前坐标轴
ax = plt.gca()
# 隐藏除底轴以外的所有坐标轴
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 将底坐标轴调整到子图中心位置
ax.spines['bottom'].set_position(('data', 0))
# 设置水平坐标轴的主刻度定位器
ax.xaxis.set_major_locator(plt.MultipleLocator(1))
# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X69bfvcz-1638272061354)(./img/主刻度次刻度.png)]
常用刻度器如下:
# 空定位器:不绘制刻度 plt.NullLocator() # 最大值定位器: # 最多绘制nbins+1个刻度 plt.MaxNLocator(nbins=3) # 定点定位器:根据locs参数中的位置绘制刻度 plt.FixedLocator(locs=[0, 2.5, 5, 7.5, 10]) # 自动定位器:由系统自动选择刻度的绘制位置 plt.AutoLocator() # 索引定位器:由offset确定起始刻度,由base确定相邻刻度的间隔 plt.IndexLocator(offset=0.5, base=1.5) # 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制刻度 plt.MultipleLocator() # 线性定位器:等分numticks-1份,绘制numticks个刻度 plt.LinearLocator(numticks=21) # 对数定位器:以base为底,绘制刻度 plt.LogLocator(base=2)
案例:
使用for循环测试刻度器样式:
import matplotlib.pyplot as plt
import numpy as np
locators = ['plt.NullLocator()', # 空刻度定位器,不绘制刻度
'plt.MultipleLocator(1)', # 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制
'plt.MaxNLocator(nbins=4)',# 最多绘制指定个数+1个主刻度
'plt.AutoLocator()'] # 自动定位器:由系统自动选择刻度的绘制位置
for i, locator in enumerate(locators):
plt.subplot(len(locators), 1, i + 1)
plt.xlim(0, 10)
plt.ylim(-1, 1)
plt.yticks([])
# 获取当前坐标轴
ax = plt.gca()
# 隐藏除底轴以外的所有坐标轴
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 将底坐标轴调整到子图中心位置
ax.spines['bottom'].set_position(('data', 0))
# 设置水平坐标轴的主刻度定位器
ax.xaxis.set_major_locator(eval(locator))
# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))
plt.plot(np.arange(11), np.zeros(11), c='none')
# 标记所用刻度定位器类名
plt.text(5, 0.3, locator, ha='center', size=12)
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2V96Dx5k-1638272061354)(./img/多个刻度定位器.png)]
3)刻度网格线绘制刻度网格线的相关API:
ax = plt.gca()
#绘制刻度网格线
ax.grid(
which='', # 'major'/'minor'/'both'/主刻度/次刻度
axis='', # 'x'/'y'/'both' <-> 绘制x/y/两轴
linewidth=1, # 线宽
linestyle='', # 线型
color='', # 颜色
alpha=0.5 # 透明度
)
案例:绘制曲线 [1, 10, 100, 1000, 100, 10, 1],然后设置刻度网格线,测试刻度网格线的参数。
import numpy as np
import matplotlib.pyplot as plt
y = np.array([1, 10, 100, 1000, 100, 10, 1]) # 数据
plt.figure('Normal & Log', facecolor='lightgray')
plt.subplot(211) #2行1列中的第1个子图
plt.title('Normal', fontsize=20)
plt.ylabel('y', fontsize=14)
ax = plt.gca() # 获取当前图形的坐标轴对象
# 设置x,y方向主刻度、次刻度
ax.xaxis.set_major_locator(plt.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))
ax.yaxis.set_major_locator(plt.MultipleLocator(250))
ax.yaxis.set_minor_locator(plt.MultipleLocator(50))
ax.grid(which='major', axis='both', linewidth=0.75,
linestyle='-', color='orange') #主刻度网格线,axis还可以取x,y
ax.grid(which='minor', axis='both', linewidth=0.25,
linestyle='-', color='orange') #次刻度网格线
plt.plot(y, 'o-', c='blue', label='plot')
plt.legend()
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHwWkFGC-1638272061354)(./img/刻度网格线.png)]
5)填充以某种颜色自动填充两条曲线的闭合区域。
plt.fill_between(
x, # x轴的水平坐标
sin_x, # 下边界曲线上点的垂直坐标
cos_x, # 上边界曲线上点的垂直坐标
sin_x
示例:
绘制两条曲线: sin_x = sin(x) cos_x = cos(x / 2) / 2 [0-8π]
import matplotlib.pyplot as plt
import numpy as np
n = 1000
x = np.linspace(0, 8 * np.pi, n) # 返回指定间隔上的等距数字
sin_y = np.sin(x) # 计算sin函数值
cos_y = np.cos(x / 2) / 2 # 计算cos函数值
plt.figure('Fill', facecolor='lightgray')
plt.title('Fill', fontsize=20)
plt.xlabel('x', fontsize=14) # x轴标签
plt.ylabel('y', fontsize=14) # y轴
plt.tick_params(labelsize=10) # 刻度
plt.grid(linestyle=':')
plt.plot(x, sin_y, c='dodgerblue', label=r'$y=sin(x)$')
plt.plot(x, cos_y, c='orangered', label=r'$y=frac{1}{2}cos(frac{x}{2})$')
# 填充cos_y < sin_y的部分
plt.fill_between(x, cos_y, sin_y, cos_y < sin_y, color='dodgerblue', alpha=0.5)
# 填充cos_y > sin_y的部分
plt.fill_between(x, cos_y, sin_y, cos_y > sin_y, color='orangered', alpha=0.5)
plt.legend()
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzwgw9yy-1638272061355)(./img/区域填充示例.png)]
6)散点图
可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。
身高 体重 性别 年龄段 种族 180 80 男 中年 亚洲 160 50 女 青少 美洲
绘制散点图的相关API:
plt.scatter(
x, # x轴坐标数组
y, # y轴坐标数组
marker='', # 点型
s=10, # 大小
color='', # 颜色
edgecolor='', # 边缘颜色
facecolor='', # 填充色
zorder='' # 图层序号
)
numpy.random提供了normal函数用于产生符合 正态分布 的随机数
n = 100
# 172: 期望值
# 10: 标准差
# n: 数字生成数量
x = np.random.normal(172, 20, n)
y = np.random.normal(60, 10, n)
案例:绘制平面散点图。
# 散点图示例
import matplotlib.pyplot as plt
import numpy as np
n = 40
# 期望值:期望值是该变量输出值的平均数
# 标准差:是反映一组数据离散程度最常用的一种量化形式,是表示精确度的重要指标
x = np.random.normal(172, 20 ,n ) # 期望值, 标准差, 生成数量
y = np.random.normal(60, 10, n) # 期望值, 标准差, 生成数量
x2 = np.random.normal(180, 20 ,n ) # 期望值, 标准差, 生成数量
y2 = np.random.normal(70, 10, n) # 期望值, 标准差, 生成数量
plt.figure("scatter", facecolor="lightgray")
plt.title("Scatter Demo")
plt.scatter(x, y, c="red", marker="D")
plt.scatter(x2, y2, c="blue", marker="v")
plt.xlim(100, 240)
plt.ylim(0, 100)
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gxUc5p9-1638272061355)(./img/散点图示例.png)]
cmap颜色映射表参照附件:cmap颜色映射表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBg05LT1-1638272061355)(./img/matplotlib_cmap.png)]
7)条形图(柱状图)
绘制柱状图的相关API:
plt.bar(
x, # 水平坐标数组
height, # 柱状图高度数组
width=0.8, # 柱子的宽度, 默认 0.8
bottom=None, # 柱子的起点位置
color=None, # 填充颜色
label='', # 图例文字
alpha=0.2 # 透明度
)
案例:先以柱状图绘制苹果12个月的销量,然后再绘制橘子的销量。
import matplotlib.pyplot as plt
import numpy as np
apples = np.array([30, 25, 22, 36, 21, 29,
20, 24, 33, 19, 27, 15])
oranges = np.array([24, 33, 19, 27, 35, 20,
15, 27, 20, 32, 20, 22])
plt.figure('Bar', facecolor='lightgray')
plt.title('Bar', fontsize=20)
plt.xlabel('Month', fontsize=14)
plt.ylabel('Price', fontsize=14)
plt.tick_params(labelsize=10)
plt.grid(axis='y', linestyle=':')
plt.ylim((0, 40))
x = np.arange(len(apples)) # 产生均匀数组,长度等同于apples
plt.bar(x - 0.2, # 横轴数据
apples, # 纵轴数据
0.4, # 柱体宽度
color='dodgerblue',
label='Apple')
plt.bar(x + 0.2, # 横轴数据
oranges, # 纵轴数据
0.4, # 柱体宽度
color='orangered', label='Orange', alpha=0.75)
plt.xticks(x, ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
plt.legend()
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObgIc91R-1638272061355)(./img/matplotlib_bar.png)]
8)饼图
绘制饼状图的基本API:
plt.pie(
values, # 值列表
explode=None, # 扇形之间的间距列表
labels=None, # 标签列表
colors=None, # 颜色列表
autopct=None, # 标签所占比例格式,如:'%d%%'
shadow=True, # 是否显示阴影
startangle=90 # 逆时针绘制饼状图时的起始角度
radius=1 # 半径
)
,
None,
colors=None,
案例:绘制饼状图显示6门编程语言的流行程度:
import matplotlib.pyplot as plt
plt.figure('pie', facecolor='lightgray')
plt.title('Pie', fontsize=20)
# 整理数据
values = [16.48,12.53,12.21,6.91,4.20, 47.6]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
labels = ['C', 'Python', 'Java', 'C++', 'C#', 'Other']
colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold', 'blue']
# 等轴比例
plt.axis('equal')
plt.pie(
values, # 值列表
spaces, # 扇形之间的间距列表
labels, # 标签列表
colors, # 颜色列表
'%d%%', # 标签所占比例格式
shadow=True, # 是否显示阴影
startangle=90, # 逆时针绘制饼状图时的起始角度
radius=1 # 半径
)
plt.legend()
plt.show()
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySqD7aFb-1638272061355)(./img/饼图示例.png)]



