一、点的绘制
1、绘制点需要提前设置点
# 设置点,在plot后面绘制点
xo = np.pi * 3/4 # 设置点横坐标位置为为3π/4
yo_cos = np.cos(xo)/2 # 两个纵坐标位置
yo_sin = np.sin(xo)
2、连点成线
- 绘制:mp.scatter(水平坐标数组, 垂直坐标数组, marker=点的形状, s=点的大小, edgecolor=勾边色, facecolor=填充色, zorder=Z序)
- Z序:画图的顺序,默认plot画点的0,线是1,数字越大,画得越晚,笔画就在处在越顶层
# 绘制点scatter
# 两个点:第一个点横坐标xo,纵坐标yo_cos;第二个点横坐标xo,纵坐标yo_sin
mp.scatter([xo, xo], [yo_cos, yo_sin], s=70, edgecolor='limegreen', facecolor='white', zorder=3 )
# 用plot画条虚线连接两点
mp.plot([xo, xo], [yo_cos, yo_sin], linestyle='--', linewidth=1, color='lightgreen')
3、添加注释
mp.annotate(
备注文本,
xy=目标位置,
xycoords=目标相对坐标系,
xytext=文本位置,
textcoords=文本相对坐标系,
fontsize=字体大小,
arrowprops=箭头属性
)
# 添加注释
mp.annotate(
r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$', # 表示1/2cos(3π/4)
xy=(xo, yo_cos), xycoords='data', # 点的位置,点的相对坐标系
xytext=(-90, -40), textcoords='offset points', # 文本相对于点的偏移量,左-90,下-40;偏移坐标系
fontsize=14,
arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=.2')
# 箭头风格为->,连接文字为圆弧线,圆弧曲率半径为0.2
)
二、figure图形对象
1、创建图形对象
mp.figure(图形对象名, figsize=窗口大小, dpi=分辨率, facecolor=窗口颜色)
2、练习代码
import numpy as np
import matplotlib.pylab as mp
# 参数定义
x = np.linspace(-np.pi, np.pi, 1000)
cos_y = np.cos(x)/2
sin_y = np.sin(x)
# 创建第一个图形对象
mp.figure("FO 01", figsize=(6, 4), dpi=120, facecolor='lightgray')
mp.title("FO 01", fontsize=20)
# 绘制横纵坐标
mp.xlabel('x', fontsize=12)
mp.ylabel('y', fontsize=12)
# 设置刻度标签大小
mp.tick_params(labelsize=10)
# 放置网格线
mp.grid(linestyle=":")
# 画图线
mp.plot(x, cos_y, label=r"$y=\frac{1}{2}cos(x)$")
mp.legend() # 图例
# 创建第二个图形对象
mp.figure("FO 02")
mp.title("FO 02", fontsize=20)
mp.plot(x, sin_y, label=r"$y=sin(x)$")
# 绘制横纵坐标
mp.xlabel('x', fontsize=12)
mp.ylabel('y', fontsize=12)
# 设置刻度标签大小
mp.tick_params(labelsize=10)
# 放置网格线
mp.grid(linestyle=":")
mp.legend() # 图例
mp.show()
三、多元布局
1、缺省布局
- 创建子图:mp.subplot(行数, 列数, 图号)
- 练习代码:
import matplotlib.pylab as mp
# 设置面板颜色
mp.figure(facecolor="lightgray")
# 创建子图,用for循环连续创建几张
for i in range(2):
for j in range(3):
k = i*3 + j + 1
mp.subplot(2, 3, k) # 2行3列的子图,此处为第1张
mp.xticks(()) # 刻度设为()空元组,就是无刻度
mp.yticks(())
mp.text(0.5,0.5, str(k), ha='center', size=36, alpha=0.5)
mp.tight_layout() # 紧凑布局
mp.show() # 显示图
2、栅格布局
- 引入模块:import matplotlib.gridspec as mg
- 创建栅格:gs = mg.GridSpec(行数, 列数)
- 放置子图:mp.subplot(gs[行, 列])
- 练习代码:
import matplotlib.pylab as mp
import matplotlib.gridspec as mg
mp.figure(facecolor="lightgray") # 创建窗口
gs = mg.GridSpec(3, 3) # 创建栅格布局器
# 画第一张子图
mp.subplot(gs[0, :2]) # 一个子图占栅格的第0行的前两列
# 取消坐标轴
mp.xticks(())
mp.yticks(())
# 显示文字
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36, alpha=0.5)
# 第二张子图
mp.subplot(gs[1:, 0]) # 一个子图占栅格的第1行后的所有行,第0列
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '2', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 第三张子图
mp.subplot(gs[2, 1:]) # 一个子图占栅格的第2行,第1列后的所有列
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '3', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 第四张子图
mp.subplot(gs[:2, 2]) # 一个子图占栅格的第2行前的所有行,第2列
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '4', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 第五张子图
mp.subplot(gs[1, 1]) # 一个子图占栅格的第1行,第1列
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '5', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 显示图表
mp.show()
3、自由布局
- mp.axes([左下角水平左边, 左下角垂直坐标, 宽度, 高度]) # 此处的尺寸参数都是按比例来的
- 练习代码:
import matplotlib.pylab as mp
mp.figure(facecolor="lightgray") # 创建窗口
# 创建一个自由布局的图
mp.axes([0.03, 0.038, 0.94, 0.924]) # 计算:0.94=1-0.03*2;0.924=1-0.038*2
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 创建第2个自由布局的图
mp.axes([0.60, 0.07, 0.35, 0.5]) # 计算:0.94=1-0.03*2;0.924=1-0.038*2
mp.xticks(()) # 取消坐标轴
mp.yticks(())
mp.text(0.5, 0.5, '2', ha='center', va='center', size=36, alpha=0.5) # 显示文字
# 显示图表
mp.show()