MATLAB绘制3个y轴及多y轴的图形程序加实例 您所在的位置:网站首页 matlab函数作图 MATLAB绘制3个y轴及多y轴的图形程序加实例

MATLAB绘制3个y轴及多y轴的图形程序加实例

2023-03-16 00:18| 来源: 网络整理| 查看: 265

MATLAB绘制双y轴图形具有自带的函数,但是如果要在同一图形窗口,更好的呈现单位不一致的多个y轴图形,就需要自己编写程序绘制3个y轴及多个y轴的图形。今天主要是以实例绘制3个y轴的图形,多个y轴的绘制原理类似。

主程序clc; clear all; close all; % 绘制三个纵坐标 x = linspace(0,4*pi, 100); y1 = 3*sin(2*x)+1; y2 = 20*cos(2*x); y3 = 3*sin(2*x) .* exp(0.3*x); % 控制 aies 的大小和位置,范围为[0, 1] % 指定第一个 Axes 对象的位置,使其左下角位于点 (0.1 0.1) 处,宽度和高度均为 0.7。 % ax1 = axes('Position',[0.1 0.1 0.7 0.7]); % 三条线绘制到一起,注意数据都标准化到 y1 范围 %axes - 创建笛卡尔坐标区 %将y2 y3进行归一化 y22 = guiyi(y2); y33 = guiyi(y3); %注意数据都标准化到 y1 范围 fy2 = fanguiyi(y22,y1); fy3 = fanguiyi(y33,y1); %% 画线 %指定第一个 Axes 对象的位置,使其左下角位于点 (0.1 0.1) 处,宽度和高度均为 0.7。 h1 = axes('position', [0.1 0.1 0.65 0.8]); plot(x, y1, 'r-', 'LineWidth', 2); hold on plot(x, fy2, 'b-', 'LineWidth', 2); plot(x, fy3, 'ko--', 'LineWidth', 2); hold off ylabel('Line1'); h1.YColor = 'r'; % 绘制另外两个空的坐标轴 h2 = axes('position', [0.8 0.1 0.005 0.8]); % 重复绘制,曲线颜色用白色,和figure背景色一致,看不出来即可 plot(x, y2, 'w') % 颜色,位置,曲线标签 set(h2, 'ycolor', 'b', 'yaxislocation', 'right', 'xtick', []) % 边界显示不清楚,所以画一条线 hold on limX2 = get(h2, 'Xlim'); limY2 = get(h2, 'Ylim'); plot([limX2(2), limX2(2)], limY2, 'b'); hold off % 取消边框 box off ylabel('line2'); h3 = axes('position', [0.9 0.1 0.005 0.8]); plot(x, y3, 'w') set(h3, 'ycolor', 'k', 'yaxislocation', 'right', 'xtick', []) hold on limX3 = get(h3, 'Xlim'); limY3 = get(h3, 'Ylim'); plot([limX3(2), limX3(2)], limY3, 'Color', 'k'); hold off box off ylabel('line3'); % figure背景设置成白色 set(gcf,'color','white');

自定义归一化函数guiyi.m程序

function y1 = guiyi(y) %% 归一化函数 输入y 输出归一化结果y1 miny = min(y); maxy = max(y); y1 = (y- miny)./(maxy - miny); end

自定义反归一化函数fanguiyi.m程序

function fy = fanguiyi(y,y1) %%函数功能 将输入的归一化的y反归一化至y1的区间范围 类似于地理中的比例度 maxy1 = max(y1); miny1 = min(y1); fy = y.*(maxy1 - miny1) + miny1; % 反归一化 end

运行结果

网上其他绘制3个y轴程序

程序1

主程序

clc; clear all; close all; %CSDN博主_Daibingh_的文章《MATLAB如何画三轴图》, %文章链接为https://blog.csdn.net/healingwounds/article/details/79863136 % 第一个bar的数据 x1=0:.5:10; y1=sin(x1); % 第二个line的数据 x2=0:.1:10; y2=log(x2); % 第三个line的数据 x3=x2; y3 = tan(x3); [ha,h] = barplotplot(x1,y1,x2,y2,x3,y3,[],{'x'},{'sin(x)','log(x)','tan(x)'}); % xlim可以指定, % 为[]表示采用默认值

barplotplot.m自定义函数

function [ha, h] = barplotplot(x1,y1,x2,y2,x3,y3,xlim1, xlab, ylab) % [ha, h] = barplot(x1,y1,x2,y2,x3,y3,xlim1, xlab, ylab) ha(1) = axes('ycolor','b','yminortick','on','xminortick','off'); hold on; h(1) = bar(x1, y1,'parent',ha(1),'facecolor','b'); if ~isempty(xlim1) set(ha(1), 'xlim', xlim1); end xlim1 = get(ha(1),'xlim'); % 画第二条线 pos1=get(ha(1),'position'); ha(2) = axes('position',pos1,'color','none','ycolor','r','yaxislocation','right','xlim',xlim1, 'xtick', []); h(2) = line(x2,y2,'color','r','parent',ha(2),'linewidth',1.2,'linestyle','-'); % 画第三条线 pos1(1)=pos1(1)-0.02; pos1(3) = pos1(3)*.86; set([ha(1);ha(2)],'position',pos1); pos3 = pos1; pos3(3) = pos3(3)+.12; xlim3 = xlim1; xlim3(2) = xlim3(1)+(xlim1(2)-xlim1(1))/pos1(3)*pos3(3); ha(3) = axes('position',pos3, 'color','none','ycolor',[0,0.5,0],'xlim',xlim3, ... 'xtick',[],'yaxislocation','right','yminortick','on'); % 截取多余部分 [x3, ind] = sort(x3, 2, 'ascend'); y3 = y3(ind); ind2 = (x3

参考内容

[1] CSDN博主_Daibingh_的文章《MATLAB如何画三轴图》,文章链接为https://blog.csdn.net/healingwounds/article/details/79863136

[2] 知乎作者程序猿老王的回答文章《如何绘制 3 个 Y 轴的图》,文章链接为https://www.zhihu.com/question/531682886/answer/2475169608

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

作 者 | 郭志龙

编 辑 | 郭志龙校 对 | 郭志龙



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有