探索数据可视化:Matplotlib 高级绘图功能(一)

双轴显示

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi,50)
y = np.sin(x)

plt.plot(x,y,color = 'blue')

# 设置 y 轴的刻度为从 -1 到 1 的 11 个等间距位置
_ = plt.yticks(np.linspace(-1,1,11),color = 'blue')

ax = plt.gca()# 获取当前视图
# twinx 请问是否有twiny呢?
ax2 = ax.twinx() # 共享X轴,对应着两个Y轴

# 其中一个视图,纵坐标范围:-1~1.0
# 另一个视图,范围 0 ~ 25 刻度会自适应
y2 = np.exp(x)
plt.plot(x,y2,color = 'red') # 默认向ax2这个子视图中绘制
_ = plt.yticks(np.arange(0,26,5),color = 'red')

在这里插入图片描述

文本、注释、箭头

文本

# 字体属性
font = {'fontsize': 20,
        'family': 'SimHei',
        'color':  'red',
        'weight': 'bold'} # 字体加粗

x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)

# 设置图形大小;宽度为 9 英寸,高度为 6 英寸
plt.figure(figsize=(9,6))
plt.plot(x, y, 'g')

# 视图的标题,小标题
plt.title('指数级衰减',fontdict=font,pad = 20)
# figure的大标题,大标题
plt.suptitle('指数衰减',y = 1.05,fontdict = font,fontsize = 30)

# 坐标位置 (2, 0.65) 处添加一个文本注释
plt.text(x = 2, y = 0.65, # 横纵坐标位置
         s = r'$\cos(2 \pi x) \exp(-x)$',fontdict=font) # 文本内容
# 在(2, -0.4) 添加Matplotlib 注释
plt.text(x = 2,y = -0.4,s = 'Matplotlib')

# 设置x,y抽标签
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.show()

在这里插入图片描述

箭头

plt.arrow() 绘制箭头函数
  • x, y: 箭头的起始点的 x 和 y 坐标。
  • dx, dy: 箭头的长度和方向,即箭头在 x 和 y 方向上的增量。
  • head_width: 箭头头部的宽度。
  • head_length: 箭头头部的长度。
  • fc: 箭头填充的颜色。
  • ec: 箭头边缘的颜色。
  • lw: 箭头的线宽。
  • length_includes_head: 确定整个箭头的长度是否包括头部长度。
  • shape: 箭头的形状,可以是 ‘full’, ‘left’, ‘right’。
  • overhang: 控制箭头头部的悬挂量。
  • zorder: 控制绘图顺序的参数,值越大表示绘制在顶层。
  • alpha: 控制箭头的透明度。
  • linestyle: 箭头的线型。
  • facecolor: 箭头的填充颜色。
  • edgecolor: 箭头的边缘颜色。
  • clip_on: 确定箭头是否被裁剪。
  • visible: 控制箭头是否可见。
# 随机生成数字 10行2列(x,y)
loc = np.random.randint(0,10,size = (10,2))
loc
"""
array([[4, 3],
       [8, 9],
       [5, 5],
       [5, 7],
       [4, 1],
       [0, 5],
       [7, 0],
       [0, 0],
       [6, 1],
       [8, 2]])
"""
plt.figure(figsize=(8, 8))

# 获取所有行,索引0---->横坐标
# 索引1---->纵坐标
# 'gh' 指定点为绿色,样式为六边形 (hexagon); ms=20:点的大小为 20
plt.plot(loc[:,0], loc[:,1], 'gh', ms=20)

# 线上网格
plt.grid(True)

# 路径
way = np.arange(10) # 0、1、2…、9索引
print(way) # [0 1 2 3 4 5 6 7 8 9]
np.random.shuffle(way) # 洗牌,打乱顺序
print(way) # [3 1 9 0 5 4 2 8 6 7]


# 10个点,连9条线
for i in range(0, 9): # for循环遍历,少一个,最后一个特殊
    start = loc[way[i]] # 起点
    end = loc[way[i+1]] # 终点
    
    plt.arrow(x = start[0], y = start[1], # 箭头起点 
              dx = end[0]-start[0], dy = end[1]-start[1], # start -> end坐标移动位置
              head_width=0.2, lw=2,# 箭头长度和线宽
              length_includes_head = True) # 长度计算包含箭头
    
    plt.text(start[0],start[1],s = i,fontsize = 18,color = 'red') # 文本
    if i == len(way) - 2: # 最后一个点
        plt.text(end[0],end[1],s = i + 1,fontsize = 18,color = 'red')
        
        start = loc[way[-1]] # 最后一个点
        end = loc[way[0]] # 起点,对应着0点
        
        # 结尾最后一个箭头显示红色
        plt.arrow(x = start[0], y = start[1], # 箭头起点 
              dx = end[0]-start[0], dy = end[1]-start[1], # 坐标移动位置
              head_width=0.2, lw=2,# 箭头长度和线宽
              length_includes_head = True,color = 'red') # 长度计算包含箭头箭尾

在这里插入图片描述

注释(箭头 + 文本)

ax.annotate() 添加注释

常用参数的含义:

  • text: 注释文本内容。
  • xy: 要注释的点的位置,格式为 (x, y)。
  • xytext: 注释文本的位置,格式为 (x, y)。如果未指定,则默认为 xy。
  • arrowprops: 箭头的属性,如箭头的样式、颜色等。
  • fontsize: 注释文本的字体大小。
fig, ax = plt.subplots()
x = np.arange(0.0, 5.0, 0.01)
y = np.cos(2*np.pi*x)

line, = ax.plot(x,y,lw=2)

# 设置字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['font.size'] = 20

# 注释
ax.annotate('最大值', # 文本内容
            xy=(2, 1),  # 箭头指向位置
            xytext=(3, 1.5), # 文本位置
            arrowprops=dict(facecolor='black', shrink=0.05)) # 箭头模样

ax.annotate('最小值',
            xy = (2.5,-1),
            xytext = (4,-1.8),
            arrowprops = dict(facecolor = 'green',
                              width = 2, # 箭头宽度
                              headwidth = 10,# 箭头头部宽度
                              headlength = 10, # 箭头头部长度
                              shrink = 0.05)) # 箭头两端收缩的百分比(占总长)

ax.annotate('median',
            xy = (2.25,0),
            xytext = (0.5,-1.8),
            arrowprops = dict(arrowstyle = '-|>'), # 箭头样式
            fontsize = 20)

ax.set_ylim(-2, 2) # y轴范围调宽

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值