当前位置: 首页 > 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 最近在互联网掀起了一阵热潮,其高度智能化的功能能够给我们现实生活带来诸多的便利,可以帮助你写文章、写报告、写周报、做表格、做策划甚至还会写代码。只要与文字相关…...

apt-cyg项目架构与开发指南:理解开源包管理器的设计思路

apt-cyg项目架构与开发指南:理解开源包管理器的设计思路 【免费下载链接】apt-cyg Apt-cyg, an apt-get like tool for Cygwin 项目地址: https://gitcode.com/gh_mirrors/ap/apt-cyg apt-cyg是一个为Cygwin环境设计的强大包管理器,它模仿了Debia…...

3步轻松下载B站视频:BilibiliDown图形化下载器完整指南

3步轻松下载B站视频:BilibiliDown图形化下载器完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...

掌握LSLib:解锁《神界原罪》与《博德之门3》MOD制作的神器

掌握LSLib:解锁《神界原罪》与《博德之门3》MOD制作的神器 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib LSLib是一个功能强大的开源工具集&#xff0…...

UE5.0.3打包Linux报错?手把手教你搞定BlueprintJson插件缺失问题

UE5.0.3 Linux打包报错终极指南:BlueprintJson插件问题的深度解析与实战修复 当你满怀期待地在UE5.0.3中点击"打包Linux"按钮,却看到屏幕上弹出关于BlueprintJson插件的红色错误信息时,那种挫败感我深有体会。作为一名经历过无数次…...

Local SDXL-Turbo保姆级教程:导出为ONNX格式进一步优化推理速度

Local SDXL-Turbo保姆级教程:导出为ONNX格式进一步优化推理速度 1. 引言:为什么需要导出ONNX? 如果你已经体验过Local SDXL-Turbo那“打字即出图”的畅快感,可能会想:这速度已经很快了,还能不能再快一点&…...

从零开始:使用ecCodes库高效解析GRIB文件

1. 为什么需要ecCodes库处理GRIB文件 第一次接触气象数据时,我被GRIB文件搞得一头雾水。这种二进制格式就像个黑盒子,明明知道里面装着宝贵的温度、气压、风速数据,却不知道怎么取出来。后来发现ecCodes库就像开罐器,能轻松打开这…...

GLM-4.1V-9B-Base保姆级教学:Web界面截图+问题输入框最佳实践

GLM-4.1V-9B-Base保姆级教学:Web界面截图问题输入框最佳实践 1. 认识GLM-4.1V-9B-Base GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型,专门用于处理图像内容识别、场景描述、目标问答和中文视觉理解任务。这个模型已经完成了Web化封装,可…...

离谱了,简历写了这个项目薪资直接涨了 80%!!

报喜了!!!前阵子帮一个粉丝修改简历,只是在项目经历里加了一个“不起眼”的项目,优化了表述逻辑,没想到他面试3家公司,2家给了offer,薪资直接比上一份涨了80%!其实很多人…...

Arduino_Threads:Mbed OS平台的嵌入式多线程实践框架

1. Arduino_Threads 库深度解析:面向 Mbed OS 的嵌入式多线程实践框架1.1 库定位与工程价值Arduino_Threads 是 Arduino 官方为基于 Mbed OS 核心的 Arduino 开发板(如 Nano RP2040 Connect、Portenta H7、Nicla Sense ME 等)设计的轻量级多线…...

2026年Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...