当前位置: 首页 > news >正文

MATLAB绘制三Y轴坐标图:补充坐标轴及字体设置

三轴坐标图

1 函数

MATLAB绘制三轴图函数可见MATLAB帮助-multiplotyyy
基础图形绘制是很简单,但坐标轴及字体设置该如何实现呢?
本文以以下几个例子为例,希望可以解决在利用MATLAB绘制三轴坐标图时常见的疑惑。

2 案例

2.1 案例1:绘图及基础设置

根据给定案例,添加坐标轴及字体设置,成图如下:
在这里插入图片描述
MATLAB相关代码如下:

clc
close all
clear
%% 导入数据
pathFigure= '.\Figures\' ;
figureUnits = 'centimeters';
figureWidth = 25; 
figureHeight = 15;x1 = (0:0.01:1)'; 
x2 = (0:0.1:1)';
x3 = (0:0.05:1)';
y1 = x1;
y2 = x2.^2;
y3 = x3.^3;
y4 = sin(x1);
y5 = fliplr(2*x1.^2);
y6 = 7*cos(x1);
y7 = 7*log(x1+1.2);%% 开始绘图ylabels{1}='First y-label';
ylabels{2}='Second y-label';
ylabels{3}='Third y-label';
[ax,hlines] = multiplotyyy({x1,y1,x2,y2,x3,y3,x1,y4},{x1,y5},{x1,[y6,y7]},ylabels);
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
set(hlines{1}(:),'LineStyle','-','Marker','o','MarkerFaceColor','b','Markersize',3);
set(hlines{2}(:),'LineStyle','--','Marker','o','MarkerFaceColor','g','Markersize',3);
set(hlines{3}(:),'LineStyle','none','Marker','o','MarkerFaceColor','r','Markersize',3);
xlabel(ax(1),"X",'FontName','Times New Roman','FontSize',12);  
ylabel(ax(1),"Y1",'FontName','Times New Roman','FontSize',12);  
ylabel(ax(2),"Y2",'FontName','Times New Roman','FontSize',12);  
ylabel(ax(3),"Y3",'FontName','Times New Roman','FontSize',12);  
set(ax(1),'xlim',[0 1],'xtick',0:0.1:1,'xticklabel', 0:0.1:1 ,'FontSize',12,'FontName','Times New Roman');
set(ax(1),'ylim',[0 1],'ytick',0:0.1:1,'yticklabel',0:0.1:1,'FontSize',12,'FontName','Times New Roman');
set(ax(2),'ylim',[0 2],'ytick',0:0.2:2,'yticklabel',0:0.2:2,'FontSize',12,'FontName','Times New Roman');
set(ax(3),'ylim',[0 7],'ytick',0:1:7,'yticklabel',0:1:7,'FontSize',12,'FontName','Times New Roman');
hl = legend(cat(1,hlines{:}),'a','b','c','d','e','f','g','location','w');
set(hl,'Box','off','location','NorthWest','NumColumns',2,'FontSize',12,'FontName','Times New Roman');    
set(gca,'FontSize',12,'Fontname', 'Times New Roman');str= strcat(pathFigure, "Fig.1", '.tiff');
print(gcf, '-dtiff', '-r600', str);

2.2 案例2:更改坐标轴颜色

此外,可根据需要更改坐标轴颜色,成图如下:
在这里插入图片描述
MATLAB相关代码如下:

clc
close all
clear
%% 导入数据
pathFigure= '.\Figures\' ;
load('Streamflow.mat');
ylabels{1}='干旱历时/月';
ylabels{2}='干旱烈度';
ylabels{3}='干旱强度';
x1 = 1:nYear;
mycolor = [0 0 0;77,133,189;237,119,69;80 80 80]/255;figureUnits = 'centimeters';
figureWidth = 25; 
figureHeight = 15;% 站点1:安宁渡
% ---------------------------------------------------------------------------------
[ax,hlines] = multiplotyyy({x1,droughtCharacter{1,1}(:,3)},{x1,droughtCharacter{1,1}(:,4)},{x1,droughtCharacter{1,1}(:,5)},ylabels);
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
set(hlines{1}(:),'LineStyle','-','linewidth',1.5,'color',mycolor(4,:),'Marker','o','MarkerFaceColor',mycolor(4,:),'Markersize',3);
set(hlines{2}(:),'LineStyle','--','linewidth',1.5,'color',mycolor(2,:),'Marker','^','MarkerFaceColor',mycolor(2,:),'Markersize',3);
set(hlines{3}(:),'LineStyle','none','linewidth',1.5,'color',mycolor(3,:),'Marker','.','MarkerFaceColor',mycolor(3,:),'Markersize',12);
set(ax(1),'xlim',[0  nYear+1],'xtick',1:5:nYear+1,'xticklabel', yearStart:5:yearEnd ,'FontSize',12,'FontName','Times New Roman','XColor',mycolor(1,:));
set(ax(1),'ylim',[0 33],'YAxisLocation','left','ytick',0:6:33,'yticklabel',0:6:33,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(1,:));
set(ax(2),'ylim',[0 36],'ytick',0:5:36,'yticklabel',0:5:36,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(2,:));
set(ax(3),'ylim',[0 1.8],'ytick',0:0.3:1.8,'yticklabel',0:0.3:1.8,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(3,:));
xlabel(ax(1),"年份",'FontName','宋体','FontSize',12);  
ylabel(ax(1),ylabels{1},'FontName','宋体','FontSize',12,'Fontweight','bold');  
ylabel(ax(2),ylabels{2},'FontName','宋体','FontSize',12,'Fontweight','bold');  
ylabel(ax(3),ylabels{3},'FontName','宋体','FontSize',12,'Fontweight','bold');  str= strcat(pathFigure, "Fig. ", '.tiff');
print(gcf, '-dtiff', '-r600', str);

根据此案例可以发现,当坐标轴1和坐标轴2刻度不一致时,图1右侧刻度会与坐标轴2刻度同时出现,那么,此问题应该如何解决呢?

2.3 案例3:解决坐标轴1和2刻度不一致问题

成图如下:
在这里插入图片描述
对比案例2,修改代码如下:

[ax,hlines] = multiplotyyy({x1,droughtCharacter{1,1}(:,3)},{x1,droughtCharacter{1,1}(:,4)},{x1,droughtCharacter{1,1}(:,5)},ylabels);
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
set(hlines{3}(:),'LineStyle','none','linewidth',1.5,'color',mycolor(3,:),'Marker','.','MarkerFaceColor',mycolor(3,:),'Markersize',14);
set(hlines{1}(:),'LineStyle','-','linewidth',1.5,'color',mycolor(4,:));%,'Marker','o','MarkerFaceColor',mycolor(4,:),'Markersize',3);
set(hlines{2}(:),'LineStyle',':','linewidth',1.5,'color',mycolor(2,:));%,'Marker','^','MarkerFaceColor',mycolor(2,:),'Markersize',3);
set(ax(1),'xlim',[0  nYear+1],'xtick',1:5:nYear+1,'xticklabel', yearStart:5:yearEnd ,'FontSize',12,'FontName','Times New Roman','XColor',mycolor(1,:));
set(ax(1),'ylim',[0 33],'YAxisLocation','left','ytick',0:6:33,'yticklabel',0:6:33,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(1,:),'LineWidth',0.5,'box', 'off');
ax1 = axes('Position',get(ax(1),'Position'),...'XAxisLocation','top',...'YAxisLocation','left',...'Color','none',...'YColor','k');
set(ax1,'XTick', [],'YTick', []);
set(ax(2),'ylim',[0 36],'ytick',0:5:36,'yticklabel',0:5:36,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(2,:),'LineWidth',1);
set(ax(3),'ylim',[0 1.8],'ytick',0:0.3:1.8,'yticklabel',0:0.3:1.8,'FontSize',12,'FontName','Times New Roman','YColor',mycolor(3,:),'LineWidth',1);
xlabel(ax(1),"年份",'FontName','宋体','FontSize',14);  
ylabel(ax(1),ylabels{1},'FontName','宋体','FontSize',14,'Fontweight','bold');  
ylabel(ax(2),ylabels{2},'FontName','宋体','FontSize',14,'Fontweight','bold');  
ylabel(ax(3),ylabels{3},'FontName','宋体','FontSize',14,'Fontweight','bold');  str= strcat(pathFigure, "Fig. 站点1:安宁渡", '.tiff');
print(gcf, '-dtiff', '-r600', str);

2.4 案例4:设置右侧俩坐标轴间距

根据案例3,发现右侧两坐标轴间距过大,通过修改原函数代码可调整其间距,成图如下所示:
在这里插入图片描述
具体修改multiplotyyy函数,代码修改参数如下:

% Set the axes position and size
pos = [0.1  0.1  0.8  0.8];
offset = pos(3)/10;
pos(3) = pos(3) - offset/2;
ax(1).Position = pos;
ax(2).Position = pos;

参考

1.MATLAB帮助-multiplotyyy
引用格式:
Laura Proctor (2023). multiplotyyy (https://www.mathworks.com/matlabcentral/fileexchange/39595-multiplotyyy), MATLAB Central File Exchange.

相关文章:

MATLAB绘制三Y轴坐标图:补充坐标轴及字体设置

三轴坐标图 1 函数 MATLAB绘制三轴图函数可见MATLAB帮助-multiplotyyy 基础图形绘制是很简单,但坐标轴及字体设置该如何实现呢? 本文以以下几个例子为例,希望可以解决在利用MATLAB绘制三轴坐标图时常见的疑惑。 2 案例 2.1 案例1&#xf…...

springboot项目中Quartz

下面内容大家可在自己创建的 springboot项目中 玩1 定时清理垃圾图片定时任务组件Quartz,可以根据我们设定的周期,定时执行目标任务计划1.1 Quartz介绍(了解)Quartz是Job scheduling(作业调度)领域的一个开源项目&…...

Presto本地开发,plugin的设置

1. 新的问题 之前搭建Presto的本地开发环境时,一直使用config.properties中的plugin.bundles配置项定义需要加载的plugin模块,详细可以参考博客《win10基于IDEA,搭建Presto开发环境》presto服务启动时,指定加载哪些组件&#xff…...

2023年3月西安/杭州/深圳/东莞NPDP产品经理认证考试报名

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年…...

Vue3笔记01 创建项目,Composition API,新组件,其他

Vue3 创建Vue3项目 vue-cli //查看vue/cli版本,确保在4.5.0以上 vue --version //安装或升级vue/cli npm install -g vue/cli //创建项目 vue create new_project //启动 cd new_project npm run serve 也可以通过vue ui进入图形化界面进行创建 vite 新一代前端…...

pandas数据分析(二)

文章目录DataFrame数据处理与分析读取Excel文件中的数据筛选符合特定条件的数据查看数据特征和统计信息按不同标准对数据排序使用分组与聚合对员工业绩进行汇总DataFrame数据处理与分析 部分数据如下 这个数据百度可以搜到,就是下面这个 读取Excel文件中的数据 …...

Spring实现[拦截器+统一异常处理+统一数据返回]

Spring拦截器 1.实现一个普通拦截器 关键步骤 实现 HandlerInterceptor 接口重写 preHeadler 方法,在方法中编写自己的业务代码 Component public class LoginInterceptor implements HandlerInterceptor {/*** 此方法返回一个 boolean,如果为 true …...

MySQL——插入加锁/唯一索引插入死锁/批量插入效率

本篇主要介绍MySQL跟加锁相关的一些概念、MySQL执行插入Insert时的加锁过程、唯一索引下批量插入可能导致的死锁情况,以及分别从业务角度和MySQL配置角度介绍提升批量插入的效率的方法;MySQL跟加锁相关的一些概念在介绍MySQL执行插入的加锁过程之前&…...

【专项训练】数组、链表

数组array: list = []链表linked list # Definition for singly-linked list. class ListNode:def __init__(self, x):self.val = xself.next =...

基于Jeecgboot前后端分离的ERP系统开发代码生成(六)

商品信息原先生成的不符合要求,重新生成,包括一个附表商品价格信息表 一、采用TAB主题一对多的模式 因为主键,在online表单配置是灰的,所以不能进行外键管理,只能通过下面数据库进行关联录入,否则online界面…...

什么?同步代码块失效了?-- 自定义类加载器引起的问题

一、背景 最近编码过程中遇到了一个非常奇怪的问题,基于单例对象的同步代码块似乎失效了,百思不得其姐。 下面给出模拟过程和最终的结论。 二、场景描述和模拟 2.1 现象描述 Database实现单例,在 init 方法中使用同步代码块来保证 data不…...

CHAPTER 4 文件共享 - Samba

文件共享 - Samba1 Samba1.1 Samba的软件架构1.2 搭建Samba服务器1.3 samba用户管理1. 添加用户2. 修改用户密码3. 删除用户和密码4. 查看samba用户列表5. 查看samba服务器状态1.4 samba共享设置(配置文件详解)1.5 访问共享目录1. windows访问2. linux客…...

深入分析@Configuration源码

文章目录一、源码时序图1. 注册ConfigurationClassPostProcessor流程源码时序图2. 注册ConfigurationAnnotationConfig流程源码时序图3. 实例化流程源码时序图二、源码解析1. 注册ConfigurationClassPostProcessor流程源码解析(1)运行案例程序启动类Conf…...

Unity 代码优化 内存管理优化

项目遇到了卡顿的情况 仔细检查了代码没检查出有误的地方 仔细的总结了一下可以优化的东西 解决了卡顿 记录一下 1 协程 项目之前写的关于倒计时之类的东西 都是开了个协程 虽然协程是消耗很小的线程 , 可是还是有额外消耗 而且 有很多用携程来检测销毁预制体的操作 也都放到U…...

设计模式~门面(外观)模式(Facade)-08

目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式&am…...

C++面向对象编程之一:封装

C面向对象编程三大特性为:封装,继承,多态。C认为万事万物皆为对象,对象有属性和行为。比如:游戏里的地图场景可以看作是长方形对象,属性场景id,有长,有宽,可能有NPC&…...

IDEA插件系列(3):Maven Helper插件

一、引言在写Java代码的时候,我们可能会出现Jar包的冲突的问题,这时候就需要我们去解决依赖冲突了,而解决依赖冲突就需要先找到是那些依赖发生了冲突,当项目比较小的时候,还比较依靠IEDA的【Diagrams】查看依赖关系&am…...

SAP 更改物料基本计量单位

前言部分 在SAP中物料创建后,一旦发生业务,其基本计量单位便很难修改。由于单位无法满足业务要求,往往会要求新建一个物料替代旧物料。这时候除了要将旧物料上所有的未清业务删除外,还需要替换工艺与BOM中的旧物料。特别是当出现旧…...

蓝桥web基础知识学习

HTMLCSS 知识点重要指数HTML 基础标签🌟🌟🌟🌟🌟HTML5 新特性🌟🌟🌟🌟🌟HTML5 本地存储🌟🌟🌟🌟CSS 基础语法…...

Python+ChatGPT制作一个AI实用百宝箱

目录一、注册OpenAI二、搭建网站及其框架三、AI聊天机器人四、AI绘画机器人ChatGPT 最近在互联网掀起了一阵热潮,其高度智能化的功能能够给我们现实生活带来诸多的便利,可以帮助你写文章、写报告、写周报、做表格、做策划甚至还会写代码。只要与文字相关…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

WebRTC调研

WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...