如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程

前言

我的科研论文中需要绘制一个精美的折线图,我的折线图中有三条曲线,分别表示期望角速度指令信号,和实际的角速度信号,还有实际的航向角信号,现在我已经拥有了数据,使用Python中matplotlib.plt.plot来直接绘制不够精美,我希望绘制一个精美的折线图,要求是:

  1. 提升绘图的美观程度,特点是风格简单明快。
  2. 这三个曲线要绘制在一张图中
  3. 实际角速度信号置于底层,期望角速度信号置于中层,实际航向角信号置于顶层
  4. 期望角速度信号和实际航向角信号均用实线表示,实际角速度信号用小点表示
  5. 曲线图左侧y轴代表角速度,右侧y轴代表航向角,x轴代表时间
  6. 每一次实际航向角的巨大变化都代表着实际中路径的弯折九十度左右,一共发生了3次,我可以提供这三次的分别发生时间,需要在对应时间位置,垂直于x轴画一条虚线标识
  7. 图像的长宽比是2:1

代码

下面提供实例,代码作为模板

from cProfile import label
from tkinter.ttk import Style
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy.spatial.distance import cdist
from matplotlib.ticker import AutoMinorLocator# 假定你已经有了数据,这里我用随机数代替
# time为时间轴数据,yaw_rate_cmd为期望角速度指令,yaw_rate_real为实际角速度信号,heading_angle为实际航向角信号
time = np.linspace(0, 10, 100)
yaw_rate_cmd = np.sin(time)  # 示例数据
yaw_rate_real = np.sin(time - 0.5) * 0.8  # 示例数据
heading_angle = np.piecewise(time, [time < 3, (time >= 3) & (time < 6), time >= 6], [45, 90, 135])  # 示例数据# 创建图像和轴对象
fig, ax1 = plt.subplots()# 设置绘图风格
plt.style.use('seaborn-whitegrid')# 绘制实际角速度信号(置于底层,用小点表示)
ax1.plot(time, yaw_rate_real, 'k:', label='Actual Yaw Rate', zorder=1)# 创建共享x轴的第二个y轴
ax2 = ax1.twinx()# 绘制期望角速度信号(置于中层,用实线表示)
ax1.plot(time, yaw_rate_cmd, 'b-', label='Desired Yaw Rate', zorder=2)# 绘制实际航向角信号(置于顶层,用实线表示)
ax2.plot(time, heading_angle, 'r-', label='Heading Angle', zorder=3)# 指定的时间点
time_points = [3,6.25]# # 对于每一个指定的时间点,画一条虚线
for time_point in time_points:plt.axvline(x=time_point, color='g', linestyle='--', label='Significant Change' if time_point == time_points[0] else "")# 因为所有虚线都具有相同的意义,所以我们只需要在图例中表示一次
# 检查time_point是否为第一个指定时间点,如果是,则添加图例标签# 设置轴标题
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Yaw Rate (degrees/s)', color='b')
ax2.set_ylabel('Heading Angle (degrees)', color='r')# 设置y轴颜色与曲线颜色一致
ax1.tick_params(axis='y', colors='blue')
ax2.tick_params(axis='y', colors='red')# 增加图例
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines + lines2, labels + labels2, loc='upper right')# 增加次要刻度线以提高可读性
ax1.xaxis.set_minor_locator(AutoMinorLocator())
ax1.yaxis.set_minor_locator(AutoMinorLocator())
ax2.yaxis.set_minor_locator(AutoMinorLocator())# 显示图像
plt.show()

代码解释

  1. 首先绘制了三个曲线(实际角速度、期望角速度、实际航向角),其中实际角速度曲线使用小点样式表示
  2. 然后创建了一个共享x轴的第二个y轴来绘制航向角
  3. 最后,这个代码段会在3和6.25秒这三个时刻左右绘制绿色虚线,不论这些时刻是否存在于times数组中。图例中的"Significant Change"标签只会添加一次,避免重复。

结果

绘制一个精美的折线图效果

延伸阅读

如何使用Python的matplotlib和seaborn库绘制颜色渐变的高级散点图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于梯度算法的无人机航迹规划-附代码

基于梯度算法的无人机航迹规划 文章目录 基于梯度算法的无人机航迹规划1.梯度搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用梯度算法来优化无人机航迹规划。 1.梯度搜索算法 …

汽车标定技术(三)--XCP协议如何支持测量功能

目录 1. 概述 2. 测量方式 -- Poll 3. 测量方式 -- DAQ 3.1 ODT概念模型 3.2 DAQ List概念 3.3 ODT 绝对编号和相对编号 3.4 静态DAQ和动态DAQ模式 &#xff08;1&#xff09;静态DAQ &#xff08;2&#xff09;动态DAQ 4.小结 1. 概述 在该系列的首篇文章汽车标定技…

Sybase PowerDesigner 16.7.7.7536 Crack

Power Designer 是Sybase公司的CASE工具集&#xff0c;使用它可以方便地对管理信息系统进行分析设计&#xff0c;他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型&#xff0c;还可以为数据仓库制作结构模型&#xff0c…

链式二叉树的基本操作和相关OJ题训练(建议收藏!!!)

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数据结构&C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 链式二叉树基本操作 二叉树节点设置二叉…

SpringBoot集成Swagger接口文档/测试

文章目录 Swagger 介绍Swagger 使用常用注解 Swagger 介绍 使用 Swagger 你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。官网&#xff1a;https://swagger.io/ Knife4j 是为 Java MVC 框架集成 Swagg…

YOLOv5论文作图教程(2)— 软件界面布局和基础功能介绍

前言:Hello大家好,我是小哥谈。通过上一节课的学习,相信大家都已成功安装好软件了,本节课就给大家详细介绍一下Axure RP9软件的界面布局及相关基础功能,希望大家学习之后能够有所收获!🌈 前期回顾: YOLOv5论文作图教程(1)— 软件介绍及下载安装(包括软件包+下载安…

服务器经常被攻击的原因

很多中小型企业都是选择虚拟主机服务器&#xff0c;是把一个服务器分成很多个给很多企业一起共用&#xff0c;可能同一个 IP服务器上就有很多个不同企业的网站&#xff0c;这个时候如果跟你同一个IP服务器的网站遭到DDoS攻击&#xff0c;就很有可能会影响到你的网站也无法正常访…

Vue3问题:如何实现组件拖拽实时预览功能?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约3000字&#xff0c;整篇阅读大约需要5分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

云计算的思想、突破、产业实践

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…

教你怎么用Python每天自动给女朋友免费发短信

今天的教程就是教大家怎么发送免费短信给女朋友。 发送短信接口&#xff0c;我知道的常见的有两个平台&#xff0c;一个是 twilio&#xff0c;可以免费发短信 500 条&#xff0c;可发任意信息&#xff0c;一个是腾讯云&#xff0c;可以免费发短信 100 条&#xff0c;需要申请短…

一文搞懂设计模式之工厂模式

大家好&#xff0c;我是晴天&#xff0c;本周将同大家一起学习设计模式系列的第二篇文章——工厂模式&#xff0c;我们将依次学习简单工厂模式&#xff0c;工厂方法模式和抽象工厂模式。拿好纸和笔&#xff0c;我们现在开始啦~ 前言 我们在进行软件开发的时候&#xff0c;虽然…

driver.find_element()用法

driver.find_element()用于在Web页面中定位单个元素。它是Selenium WebDriver库中的 一种方法。该方法接受一个定位器&#xff08;locator&#xff09;和一个值作为参数&#xff0c;用于指定要查找的元素 位置。下面是具体的用法和一些例子&#xff1a; 通过ID定位元素&#x…

虚拟机vmware使用桥接方式联网设置

步骤&#xff1a;虚拟机设置----》网络适配器---->桥接模式 这样设置好&#xff1b;只是这样设置是无法联网的 现在进入到虚拟机内部----->电机右上角的”网络连接“&#xff08;wired connection&#xff09;&#xff08;没错就是wired connection 虽然是连接WiFi热点但…

【实战Flask API项目指南】之二 Flask基础知识

实战Flask API项目指南之 Flask基础知识 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界&…

零日漏洞预防

零日漏洞&#xff0c;是软件应用程序或操作系统&#xff08;OS&#xff09;中的意外安全漏洞&#xff0c;负责修复该漏洞的一方或供应商不知道该漏洞&#xff0c;它们仍然未被披露和修补&#xff0c;为攻击者留下了漏洞&#xff0c;而公众仍然没有意识到风险。 零日攻击是如何…

【css3】涟漪动画

效果展示 dom代码 <div class"mapSelfTitle66"><div></div> </div> 样式代码 .mapSelfTitle66{width:120px;height:60px;position: relative;&>div{width:100%;height:100%;background: url("~/assets/images/video_show/err…

手写数字识别--神经网络实验

实验源码自取&#xff1a; 我自己搞的代码&#xff0c;预测精度才94% 神经网络实验报告源码.zip - 蓝奏云 老师给的实验源码答案和资料&#xff0c;预测精度高达99% 深度学习实验报告.zip - 蓝奏云 上深度学习的课程&#xff0c;老师布置了一个经典的实验报告&#xff0c;我做…

利用移动互联、物联网、智能算法、地理信息系统、大数据分析等信息技术开发的智慧工地云平台源码

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术&#xff0c;提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平&#xff0c;实现工程施工可视化智能管理&#xff0c;并逐步实现绿色生态建造。 技术架构&#xff1a;微…

数据分析实战 - 2 订单销售数据分析(pandas 进阶)

题目来源&#xff1a;和鲸社区的题目推荐&#xff1a; 刷题源链接&#xff08;用于直接fork运行 https://www.heywhale.com/mw/project/6527b5560259478972ea87ed 刷题准备 请依次运行这部分的代码&#xff08;下方4个代码块&#xff09;&#xff0c;完成刷题前的数据准备 …

PYTHON学习

元组不可修改&#xff1a; 元组支持下标索引。 字符串也是容器&#xff0c;不支持修改。