探索数据可视化: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轴范围调宽

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PlantUML + VS Code

PlantUML 使用实例 文章目录 PlantUML 使用实例1. PlantUML简介1.1 什么是PlantUML1.2 PlantUML优势在哪 2. 怎么用2.1 环境依赖2.2 VS Code组件安装 3. 常用语法3.1 标记开始结束3.2 声明参与者3.3 声明关系3.4 对消息序列编号3.5 组合消息 4. 实例 1. PlantUML简介 1.1 什么…

vulhub靶场-matrix-breakout-2-morpheus

下载&部署 从官网中下载 https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/ 下载完成后,在vmware中打开,选择刚刚下载的ova文件 vmware打开文件后需要将刚导入的机器重新启动 再检查下网卡是否是和kali在同一张网卡下就可以开始打靶了…

Jmter接口网站压力测试工具

首先下载Jmeter 官方地址:Apache JMeter - Apache JMeter™ 安装Jmeter 把下载的文件进行解压,产生如下目录: 打开bin文件夹下的jmeter.bat文件及进入程序的主界面窗体jmeter.log是日志文件。 主意:需要配置java环境。 jmter创…

解决虚拟机静态网址设置后还是变动的的问题

源头就是我的虚拟机静态网址设置好了以后但是网址还是会变动 这是我虚拟机的配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 这是出现的问题 进入这里 cd /etc/sysconfig/network-scripts/ 然后我去把多余的ens33的文件都删了 然后还不行 后来按照这个图片进行了下 然后…

权限管理系统-0.4.0

五、权限管理 5.1 引入JWT JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以…

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹前言第1章 添加文件夹第2章 添加文件路径2.1 相对路径方法2.2 绝对路径方法 总结 前言 在编程的过程中,如果需要在原有的工程基础上新增其它的…

C 嵌入式系统设计模式 24:安全性和可靠性介绍

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式安全性和可靠性模式之一…

二叉搜索树题目:前序遍历构造二叉搜索树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 解法四思路和算法代码复杂度分析 题目 标题和出处 标题:前序遍历构造二叉搜索树 出处:1008. …

Anacond 安装及使用教程pytorch安装

下载网址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror pycharm安装教程 【从Python基础到深度学习】1. Python PyCharm安装及激活-CSDN博客 pycharm添加anaconda环境 conda创建虚拟环境 base表示当前conda的base环境&a…

sheng的学习笔记- AI-类别不平衡问题

目录:sheng的学习笔记-AI目录-CSDN博客 什么是类别不平衡问题 类别不平衡(class-imbalance),也叫数据倾斜,数据不平衡,就是指分类任务中不同类别的训练样例数目差别很大的情况。 例如有998个反例&#xf…

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年,Mirjalili受到蜻蜓静态和动态集群行为启发,提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的:狩猎&#xf…

大模型相关整理

机器学习 模型就是函数,这个函数可能是一个很简单的线性函数,也可以是一个非常复杂的高阶函数、或者是一个多层的神经网络函数。 机器学习领域的很多研究和方法都是在尝试设计这个函数,以自动驾驶领域为例,之前的自动驾驶基于人…

四川宏博蓬达法律咨询有限公司:专业可靠,您身边的法律守护者

在现代社会,法律咨询服务的需求日益增长,选择一家专业可靠的法律咨询公司成为了许多企业和个人的当务之急。四川宏博蓬达法律咨询有限公司便是这样一个值得信赖的法律服务提供者,以其专业、高效、贴心的服务,赢得了广大客户的信赖…

c++ primer plus笔记 第十八章 探讨c++新标准

复习前面的内容: 1.auto,可以自动识别auto本身在这种语境下是什么类型 2.decltype,让一个变量的类型和另外一个变量的类型相同 decltype(x) y;//让y的类型和x的类型相同 如何理解? decltype是一个关键词,其作用是检查括号内的…

【MySQL系列 05】Schema 与数据类型优化

良好的数据库 schema 设计和合理的数据类型选择是 SQL 获得高性能的基石。 一、选择优化的数据类型 MySQL 支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。 1. …

AOP-注解实现-记录日志到数据库

概念解释 AOP:Aspect Oriented Programming Aspect:方面Oriented:面向…的Programming编程 之前我对模块化编程的认识,主要是局限在布局结构、目录结构上。比如Vue的template模板。 对方法的模块化编程,我之前的认识…

基于springboot+layui仓库管理系统设计和实现

基于 java springbootlayui仓库管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

硬件工程师面试题梳理-百度硬件面试题

硬件工程师基本职责 在公司里面,硬件工程师的主要职责包括设计、开发和测试硬件系统,以满足产品需求和性能要求。他们负责确保硬件系统的可靠性、稳定性和可维护性,并与软件工程师和其他团队成员合作,以确保硬件和软件的协同工作…

arcgis辅助下的GIS滑坡泥石流易发性评估模型构建

我国是地质灾害多发国家,地质灾害的发生无论是对于地质环境还是人类生命财产的安全都会带来较大的威胁,因此需要开展地质灾害风险普查。利用遥感(RS)技术进行地质灾害调查工作具有宏观、快速、准确的特点,能反映出地质…

SpringCloud(21)之SpringCloud Alibaba Nacos实战应用

一、Nacos安装 1.1 Nacos概述 Nacos是Alibaba微服务生态组件中的重要组件之一,主要用它实现应用的动态服务发现、配置管理、 服务管理。Nacos discovery alibaba/spring-cloud-alibaba Wiki GitHub Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简…