文章目录
- 1. 图形窗口方法与参数
- 1.1 创建窗口
- 1.2 设置窗口的常用方法
- 1.3 更改当前绘制的窗口
- 2. 子图布局(一个窗口显示多个图表)
- 2.1 矩阵式布局
- 2.2 网格式布局
- 2.3 自由式布局
- 3. 刻度定位器
- 3.1 MultipleLocator()
- 3.1 其他刻度定位器
- 4. 区域填充
- 5. 散点图
- 5.1 散点图
- 5.2 散点图 API
- 附
- 内置颜色映射
1. 图形窗口方法与参数
1.1 创建窗口
# 创建 matplotlib 窗口
figure(
'sub-fig', # 窗口标题栏文本
facecolor='' # 图表背景颜色
)
注意:
窗口标题栏的文本设置相同,matplotlib 不会创建新的窗口。
窗口标题栏文本为窗口的唯一标识。
import matplotlib.pyplot as plt
plt.figure('Figure A', facecolor='gray')
plt.figure('Figure B', facecolor='lightgray')
plt.show()
绘制图形的代码写在创建窗口 A 之后,图形会绘制在窗口 A 中;绘制图形的代码写在创建窗口 B 之后,图形会绘制在窗口 B 中。
import matplotlib.pyplot as plt
plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
plt.show()
1.2 设置窗口的常用方法
# 设置图表标题,显示在图表的上方
title(title, fontsize=12)
# 设置水平轴的文本
xlabel(x_label_str, fontsize=12)
# 设置垂直轴的文本
ylabel(y_label_str, fontsize=12)
# 设置图表网格线,linestyle 设置网格线的样式
# 样式字符串与设置图形线的样式的字符串一样
grid(linestyle='')
# 设置紧凑布局,把图表相关参数都显示在窗口中
# 紧凑布局,窗口的利用率更高
tight_layout()
import numpy as np
import matplotlib.pyplot as plt
plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
# 设置 A 窗口
plt.title('Figure A', fontsize=16)
plt.xlabel('Figure A xlabel', fontsize=12)
plt.ylabel('Figure A ylabel', fontsize=12)
plt.grid(linestyle='-.')
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
# 设置 B 窗口
plt.title('Figure B', fontsize=16)
plt.xlabel('Figure B xlabel', fontsize=12)
plt.ylabel('Figure B ylabel', fontsize=12)
plt.grid(linestyle='--')
plt.tight_layout()
plt.show()
1.3 更改当前绘制的窗口
import numpy as np
import matplotlib.pyplot as plt
plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
# 设置 A 窗口
plt.title('Figure A', fontsize=16)
plt.xlabel('Figure A xlabel', fontsize=12)
plt.ylabel('Figure A ylabel', fontsize=12)
plt.grid(linestyle='-.')
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
# 设置 B 窗口
plt.title('Figure B', fontsize=16)
plt.xlabel('Figure B xlabel', fontsize=12)
plt.ylabel('Figure B ylabel', fontsize=12)
plt.grid(linestyle='--')
plt.tight_layout()
# 接下来的图形绘制在 A 窗口中
# 由于 A 窗口已经创建过了,不会再创建一个,相当于调用 A 窗口
plt.figure('Figure A')
plt.plot([1, 2, 3], [2, 1, 3])
plt.show()
2. 子图布局(一个窗口显示多个图表)
2.1 矩阵式布局
subplot(rows, cols, num)
# 将一个窗口拆分成几行几列
# rows: 行
# cols: 列
# num: 编号(第几个子图) 编号从 1 开始
# 如:
subplot(3, 3, 5) # 一个窗口拆分成 3 行 3 列,绘制第 5 个子图
subplot(335) # 简写
import matplotlib.pyplot as plt
plt.figure('Figure A', facecolor='gray')
for i in range(1, 10):
plt.subplot(3,3,i)
# 在图表中 x=0.5,y=0.5 的位置书写文本 i
# 水平和垂直都居中对齐
plt.text(0.5,0.5,i,ha='center', va='center', size=36, alpha=0.6)
# 取消 x y 轴的刻度
plt.xticks([])
plt.yticks([])
plt.tight_layout()
plt.show()
2.2 网格式布局
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
# 创建窗口
mp.figure('GridSpec', facecolor='lightgray')
# 将窗口分割成 3 行 3 列
gs = mg.GridSpec(3, 3)
# 将第一行的第一个和第二个子图进行合并(采用切片的形式进行合并)
mp.subplot(gs[0, :2])
# 绘制图形
mp.text(0.5, 0.5, 1, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()
mp.subplot(gs[:2, 2])
mp.text(0.5, 0.5, 2, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()
mp.subplot(gs[1:, 0])
mp.text(0.5, 0.5, 3, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()
mp.subplot(gs[2, 1:])
mp.text(0.5, 0.5, 4, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()
# 显示窗口
mp.show()
2.3 自由式布局
mp.axes([left_bottom_x, left_bottom_y, width, height])
# left_bottom_x: 左下角 x 坐标
# left_bottom_y: 左下角 y 坐标
# width: 宽度
# height: 高度
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
# 创建窗口
mp.figure('FreeLayout', facecolor='lightgray')
# 参数列表中的四个值表示:窗口宽或高的几倍
# 左下角坐标 x 的位置为 宽度的 0.1 倍
mp.axes([0.1, 0.1, 0.5, 0.5])
# 显示窗口
mp.show()
3. 刻度定位器
3.1 MultipleLocator()
# 获取当前坐标轴
ax = mp.gca()
# 设置水平坐标轴的主刻度(显示字的刻度)定位器,间隔 1
# ax.xaxis 获取 x 轴
# mp.MultipleLocator(刻度间隔) 刻度定位器
ax.xaxis.set_major_locator( mp.MultipleLocator(1) )
# 设置水平坐标轴的次刻度(不显示字的刻度)定位器为多点定位器,间隔 0.1
ax.xaxis.set_minor_locator( mp.MultipleLocator(0.1) )
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
# 获取坐标轴
ax = mp.gca()
# 取消左、上、右轴的显示
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
# 取消 y 刻度
mp.yticks([])
# x 轴居中
ax.spines['bottom'].set_position(('data', 0.5))
# 设置 x 轴的可视区域
mp.xlim(1, 10)
# 设置刻度定位器,每隔 1 一个主刻度,每隔 0.1 一个次刻度
# 主刻度
ax.xaxis.set_major_locator(mp.MultipleLocator(1))
# 次刻度
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
mp.show()
3.1 其他刻度定位器
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
locators = [
'mp.NullLocator()',
'mp.MultipleLocator(1)',
'mp.MaxNLocator(nbins=4)',
'mp.FixedLocator(locs=[2,4,8,10])'
]
mp.figure('A', facecolor='lightgray')
for i, locator in enumerate(locators):
mp.subplot(len(locators), 1, i+1)
ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
mp.yticks([])
ax.spines['bottom'].set_position(('data', 0.5))
# 设置 x 轴的可视区域
mp.xlim(1, 10)
# 设置刻度定位器,每隔 1 一个主刻度,每隔 0.1 一个次刻度
# 主刻度
ax.xaxis.set_major_locator(eval(locator))
# 次刻度
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
mp.show()
4. 区域填充
mp.fill_between(
x, # x 轴的水平坐标
sin_x, # 下边界面曲线上点的垂直坐标
cos_x, # 上边界面曲线上点的垂直坐标
sin_X < cos_x, # 填充条件,为 True 时填充
color = '', # 填充颜色
alpha=0.2 # 透明度
)
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
x = np.linspace(0, 8 * np.pi, 1000)
sin_x = np.sin(x)
cos_x = np.cos(x / 2) / 2
mp.figure('Fill', facecolor='gray')
mp.grid(linestyle=':')
mp.plot(x, sin_x, color='dodgerblue', label='y=sin(x)')
mp.plot(x, cos_x, color='orangered', label=r'$y=\frac{1}{2}cos(\frac{x}{2})$')
mp.fill_between(x, sin_x, cos_x, sin_x>cos_x, color='dodgerblue', alpha=0.3)
mp.fill_between(x, sin_x, cos_x, sin_x<cos_x, color='orangered', alpha=0.3)
mp.legend()
mp.show()
5. 散点图
5.1 散点图
散点图可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。
5.2 散点图 API
mp.scatter(
x, # x 轴坐标数组
y, # y 轴坐标数组
marker='', # 点型
s=10, # 大小
color='', # 颜色
edgecolor='', # 边缘颜色
facecolor='', # 填充色
zorder='' # 图层序号
)
生成一组正态分布的随机数:
n = 100
x = np.random.normal(期望值, 标准差, 数字生成数量)
y = np.random.normal(60, 10, n)
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
n = 200
x = np.random.normal(175, 5, n)
y = np.random.normal(65, 10, n)
mp.figure('scatter', facecolor='gray')
mp.grid(linestyle=':')
mp.scatter(
x, y,
marker='o',
alpha=0.7,
color='dodgerblue',
label='Samples',
s = 80
)
mp.legend()
mp.show()
mp.scatter(
x, y,
marker='o',
alpha=0.7,
# color='dodgerblue',
label='Samples',
s = 80,
c=x, # 每个样本的颜色值, 决定样本点颜色值
cmap='jet' # 内置的颜色映射,数值越小越蓝,越大越红
)
附
内置颜色映射