文件交换

图像缩略图

浮子

版本1.0.0.0(2.15 kB) 丹尼斯吉尔伯特
扩展plotyy以包含第三个y轴

124下载

更新2001年11月14日

查看许可协议

Plotyyy在Plotyy身上构建,包括第三y轴。它还提供了一种简单的方法,可以立即标记所有三个Y轴。

引用作为

丹尼斯·吉尔伯特(2021)。浮子(//www.tatmou.com/matlabcentral/fileexchange/1017-plotyyy), MATLAB中央文件交换。检索

评论和评级(83

斯科特交错的

贾斯汀周

杰克isen.

彼得马拉南

ariane giesriegl.

我有一些数字的展示位置。它始终偏离屏幕移动,除非我定义集合(GCF,“颜色”,“W”,“位置”,[0,0,1200,800]);- 零很重要!如果没有x,y = 0图“消失”。使用零,它只需填充整个屏幕(我的案例中的两个屏幕)。

另外,第二个数据序列只显示一半,两个数据点之间的线被切断……

我使用Matlab R2020a

Annkathrin Dukorn

大家好,下面的问题我需要帮助。我使用了脚本:
%% auswertung 3-fach;

扩展plotyy以包含第三个y轴

%语法:[AX,HLines] = Plotyyy(X1,Y1,X2,Y2,X3,Y3,Ylabels)

%输入:x1,y1是第一个轴的xdata和ydata
% x2,y2是第二个轴的xdata和ydata
%x3,y3是第三轴线的xdata和ydata
%ylabels是一个包含Ylabel字符串的3x1单元阵列

包含轴的句柄的双数组ax - 3x1
% hlines -包含行句柄的3x1双数组

%的例子:

x = s9780gesamt.date;

y1 = s9780gesamt.daily_median_weightavg;

y2 = S9780Gesamt.daily_mileageAVG;

y3 = s9780gesamt.daily_mileagemedian;

ylabels {1} ='daily_median_weightavg';
ylabels {2} ='daily_mileageavg';
ylabels {3} ='fuel_consumption_per_100_kmmedian';

[ax, hlines] = plotyyy(x,y1,x,y2,x,y3,ylabels);

并更新函数:

功能[AX,HLINES] = Plotyyy(X1,Y1,X2,Y2,X3,Y3,YLabels)
扩展plotyy以包含第三个y轴

%语法:[AX,HLines] = Plotyyy(X1,Y1,X2,Y2,X3,Y3,Ylabels)

%输入:x1,y1是第一个轴的xdata和ydata
% x2,y2是第二个轴的xdata和ydata
%x3,y3是第三轴线的xdata和ydata
%ylabels是一个包含Ylabel字符串的3x1单元阵列

包含轴的句柄的双数组ax - 3x1
% hlines -包含行句柄的3x1双数组

%的例子:
% x = 0:10;
%y1 = x;Y2 = x。^ 2;y3 = x。^ 3;
%ylabels {1} ='第一个y-label';
% ylabels{2} = '第二y-label ';
%ylabels {3} ='第三y-label';
% (ax,线)= plotyyy (x, y₁,x, y2, x, y3, ylabels);
%图例(hlines, 'y = x','y = x^2','y = x^3',2)

% m-files要求:没有

%作者:丹尼斯吉尔伯特,博士,物理海洋学
%Maurice Lamontagne Institute
%。加拿大渔业部和海洋局
%电子邮件:gilbertd@dfo-mpo.gc.ca
%网络:http://www.qc.dfo-mpo.gc.ca/iml/
% 2000年4月;最后修改:14 - 11月- 2001

如果nargin == 6
%使用空字符串的ylabels
ylabels {1} = ';ylabels {2} = ';ylabels {3} = ';
elseif nargin> 7
error('太多输入参数')
Elseif nargin < 6
错误(“不足输入参数”)
结束

图(“单位”,“归一化”,…
'defaultaxesxminortick','上','defaultaxesyminortick','开');

%用plotyy绘制前两行
(ax,线(1)、线(2)]= plotyy (x1, y1, x2, y2);
cfig = get(gcf,'color');
Pos = [0.1 0.1 0.7 0.8];
抵消= pos (3) / 5.5;

%减少plotyy生成的两个轴的宽度
Pos (3) = Pos (3) - offset/2;
集(ax,“位置”,pos);

%确定第三轴的位置
POS3 = [POS(1)POS(2)POS(3)+偏移POS(4)];

xmin = datenum(' 07 - 1月- 2019就是');
Xmax = Datenum('17 -May-2020 00:00:00');

确定第三个轴的适当x极限
limx1 = [xmin xmax];
limx3 = [xmin xmin + 1.2 *(xmax-xmin)];
% %错误修复14 11月-2001:1.2比例因子在上面的线
%%是由Mariano Garcia(Borgwarner Morse Tec Inc)提供的

斧头(3)=轴('位置',pos3,'box','关闭',...
“颜色”、“没有”、“XColor’,‘k’,‘YColor’,‘r’,……
“xtick”,[],xlim, limx3,‘yaxislocation’,‘正确的’);

线(3)=线(x3, y3,‘颜色’,‘r’,‘父’,ax (3));
limy3 =得到(ax(3),“YLim”);

%隐藏x轴上不需要的部分
%在第二个和第三个轴的末端之间
线([datestr (limx1 (2) datestr (limx3 (2))], [limy3 (1) limy3(1)),…
cfig‘颜色’,‘父’,ax(3),“剪裁”,“关闭”);
轴(斧头(2))

%标记所有三个y轴
集(get (ax(1),“ylabel”),“字符串”,ylabels {1})
集(get (ax(2),“ylabel”),“字符串”,ylabels {2})
集(get (ax(3),“ylabel”),“字符串”,ylabels {3})

我的功能基于Excel电子表格。该曲线包含三个图形,其中一个图形有偏移量。现在我不知道故障在哪里以及如何在没有偏移的情况下创建三个轴。

札幌

@iris van der veen&其他
为了使所有三个Y轴相同的X轴限制,必须调整第三个。基本上,拿起你的最小XLIM并加入你的XLIM扩展的1.2倍(在数学中,最大和最小值之间的差异)。例如,如果您的xlimits为3到10,则xmin为3,xmax为10.对于第3个X轴,您的Xmax = 3 + 1.2 *(10 - 3)。我的数据处于DateTime格式,必须转换为数据项,但我的代码如下:

%将所需的X限制转换为数据
xmin = datenum (01 - 11 - 2016);
xmax = datenum (01 - 1 - 2018);
%添加第三个x轴的偏移值,由于原始代码的偏移
%允许第3 y轴显示在第二y轴的右侧
xmax3 = xmin + 1.2 *(xmax-xmin);
%设置X轴限制
集(ax(1),“xlim”,[xmin xmax]);
集(ax(2),“xlim”,[xmin xmax]);
SET(AX(3),'XLIM',[Xmin Xmax3]);

凯尔文

我忘记在我以前的帖子中提到参数“fac”可以是任何合理的数字(它不一定是1.3)。略有变化之后:

Pos = [0.14 0.18 0.55 0.75];
集(ax,“位置”,pos);

fac = 1.3;
pos =[pos(1) pos(2) fac*pos(3) pos(4)];

limx1 =得到(ax(1),“xlim”);
limx3 = [limx1 (1) limx1 (1) + fac * (limx1 (2) -limx1 (1)));

玛丽亚米

肯特•沃伦

有人能解释一下第48行1/5的偏移乘因子是如何确定的吗?我想知道如何确保第三个轴与另外两个轴完全对齐。

Krushil Modi.

谢谢你的代码。但是谁能帮我打印这个数字??

查尔斯·格林伍德

良好的功能。我做了一些修改来满足我的要求。
- 将第3块线/轴的颜色匹配,以匹配MATLAB颜色方案。
-删除开头的nargin语句,替换为用于标识空标签的exist语句。
-添加一个数据标记输入,使xaxis被标记为数据标记字符串。

请参见下面的代码。
函数[ax,hlines] = plotyyy(x1,y1,x2,y2,x3,y3,ylabels,dateticks)
扩展plotyy以包含第三个y轴

%语法:[AX,HLines] = Plotyyy(X1,Y1,X2,Y2,X3,Y3,Ylabels)

%输入:x1,y1是第一个轴的xdata和ydata
% x2,y2是第二个轴的xdata和ydata
%x3,y3是第三轴线的xdata和ydata
%ylabels是一个包含Ylabel字符串的3x1单元阵列
DateTicks的%dateTicks字符串输入为DateTick('dd / mm / yy'或'yyyy')

包含轴的句柄的双数组ax - 3x1
% hlines -包含行句柄的3x1双数组

%的例子:
% x = 0:10;
%y1 = x;Y2 = x。^ 2;y3 = x。^ 3;
%ylabels {1} ='第一个y-label';
% ylabels{2} = '第二y-label ';
%ylabels {3} ='第三y-label';
% (ax,线)= plotyyy (x, y₁,x, y2, x, y3, ylabels);
%图例(hlines, 'y = x','y = x^2','y = x^3',2)

% m-files要求:没有
%作者:丹尼斯吉尔伯特,博士,物理海洋学
%Maurice Lamontagne Institute
%。加拿大渔业部和海洋局
%电子邮件:gilbertd@dfo-mpo.gc.ca
%网络:http://www.qc.dfo-mpo.gc.ca/iml/
% 2000年4月;最后修改:14 - 11月- 2001
如果〜存在('ylabels')
%使用空字符串的ylabels
ylabels {1} = ';ylabels {2} = ';ylabels {3} = ';
结束

图(“单位”,“归一化”,…
'defaultaxesxminortick','上','defaultaxesyminortick','开');
%用plotyy绘制前两行
(ax,线(1)、线(2)]= plotyy (x1, y1, x2, y2);
%确定日期号(如果适用)
如果存在(“dateticks”)
datetick(‘x’,dateticks)
xtickangle (0)
结束
cfig = get(gcf,'color');
Pos = [0.1 0.1 0.7 0.8];
抵消= pos (3) / 5.5;
%减少plotyy生成的两个轴的宽度
Pos (3) = Pos (3) - offset/2;
集(ax,“位置”,pos);
%确定第三轴的位置
POS3 = [POS(1)POS(2)POS(3)+偏移POS(4)];
%确定第三个轴的适当x极限
limx1 =得到(ax(1),“xlim”);
LIMX3 = [LIMX1(1)LIMX1(1)+ 1.2 *(LIMX1(2)-LIMX1(1))];
%错误修复14 11-2001:上面的线路中的1.2比例因子
%是Mariano Garcia(Borgwarner Morse Tec Inc)的贡献
% 3日线的颜色
Linecolor = [0.9290 0.6940 0.1250];
斧头(3)=轴('位置',pos3,'box','关闭',...
“颜色”、“没有”、“XColor’,‘k’,‘YColor’,lineColor,……
“xtick”,[],xlim, limx3,‘yaxislocation’,‘正确的’);
hlines(3)=线(x3,y3,'颜色',ineceColor,'父',AX(3));
limy3 =得到(ax(3),“YLim”);
%隐藏x轴上不需要的部分
%在第二个和第三个轴的末端之间
线([limx1 (2) limx3(2)]、[limy3 (1) limy3(1)),…
cfig‘颜色’,‘父’,ax(3),“剪裁”,“关闭”);
轴(斧头(2))
%标记所有三个y轴
集(get (ax(1),“ylabel”),“字符串”,ylabels {1})
集(get (ax(2),“ylabel”),“字符串”,ylabels {2})
集(get (ax(3),“ylabel”),“字符串”,ylabels {3})

塞巴斯蒂安。

@Patrick Marquardt。
这就是你否决这个功能的唯一原因吗?
功能永远不会满足所有个人需求。这就是为什么可以修改它们的原因。
用和y轴一样的方式标记x轴。进入函数并添加:

集(get (ax(1),“包含”),“字符串”,“YourWantedLabel”)

塞巴斯蒂安。

给出函数矩阵而不是向量。如果向量是列向量:
x1 = xline1;日元= yline1;
x2 = [xline2,xline3];Y2 = [Yline2,Yline3];
x3 = xline4;y3 = yline4;
[AX,HLINES] = Plotyyy(X1,Y1,X2,Y2,X3,Y3,Ylabels);

在功能中,您必须修改第45行:
(ax,线(1)、线(2)]= plotyy (x1, y1, x2, y2);- > (ax,线(1)线(2:3)]= plotyy (x1, y1, x2, y2);
72行:
线(3)=线(x3, y3,‘颜色’,‘r’,‘父’,ax (3));——>线(4)=线(x3, y3,‘颜色’,‘r’,‘父’,ax (3));

帕特里克•马夸特

在这种情况下如何标记x轴??

丹阳李

凯罗

尼尔Stapleton

是否有可能为同一轴绘制多条线?我想为第一个轴画一个函数,第二个轴画两个函数,第三个轴画一个函数。我还没能想出怎么做这件事。

费利克斯路

谢谢

Kapilan Tamilselvan.

你将如何继续使用像这样的特性

抓住;

Kapilan Tamilselvan.

rik.

这是一个非常好的提交,但它不能与datetime值为x工作。原因是,xlim属性不能设置为datetime值。烦人的解决方案是使用datenum代替,并使用xtickformat。

安德烈亚斯•温斯迟

lal.

这对我很有帮助。谢谢你!

包含(“X”)
Ylabel(斧头(1),'Y1');
ylabel (ax (2), Y2);
ylabel (ax(3)、Y3);

我发现这些标签很有趣和简单

Hyungil Park.

斧头(3)=轴('位置',pos3,'box','关闭',...
“颜色”、“没有”、“XColor’,‘k’,‘YColor’,‘r’,……
“xtick”,[],xlim, limx3,‘yaxislocation’,‘正确的’);

-------------------------------------

'xcolor','k' - >'xcolor','none'

----------------------------------
不再需要隐藏不需要的x轴线。

文斯Clementi

伟大的代码。问题是,我如何改变这些轴的方向用这个函数画出来的?谢谢。

薛董

好的

薛董

当我用它的时候,我不能得到那个数字…我不懂怎么用这个密码。

Michelle Almakari.

您好,感谢您分享您的代码。这真的很有帮助。我试图修改它以获得所有x和y轴的对数刻度,但由于某种原因它对于第一个两个y轴完美地工作,但第三个是向右移动。任何想法为什么或可能是什么解决方案?

谢谢德尼斯夫人。这对我的工作很有用。

湿婆Asapu

斯科特Sleegers

丽江陈

伟大的

京辉吴

谢谢你!

多雨的曹

不错,是很有用的。

凡洛王

爱瑞丝·范德·维恩

嗨,我有同样的问题,佩戴下面问:
我正在使用函数plotyyy,它适用于罚款。
更改“XLIM”(SET(AX,'XLIM',[1,12089])时,我的问题发生了;)
第一个曲线从第一个Y轴延伸到第二个Y轴
WICH很好,因为这个区域与路径区域对应。但第三
曲线从第一个y轴延伸到第三y轴外部
路径区域。
因此,我的第三条曲线有一部分在路径区域之外。

有人知道我该怎么解决这个问题吗?

杰奎琳

石坂

亲爱的丹尼斯·吉尔伯特博士

这真的是一个伟大的函数,但我有一个问题,我想绘制每个函数不同的标签(破折号,实线,itc.)。

我怎么能这样做?请帮我

Rahul Ranjan.

你好,我已经扩展了您的代码绘制4个变量在同一绘图。我想把代码告诉大家。

基督教的记录

梁山梁

凯利沙利文

你好。伟大的代码!虽然我有麻烦的数据提示。我可以让数据提示出现在第2和第3轴上,但不是第一个。有任何想法吗?谢谢!

Sergio Machaca.

嘿,当我运行你的榜样时,我会收到一个错误的错误,说“忘记了内存。可能的原因是程序内的无限递归。”我会感谢任何帮助。

Wenzhu王

如何放大或缩小添加的线路?

李魏

为什么我的matlab不能实现这个函数?警告说:“错误:函数定义不允许在此上下文中。”这是matlab下的结果吗?

马克•蒂莫

恋人aditya

天奴K。

嘿,每个人,

是否有可能将第三个曲线作为栏?我不知道如何解决这个问题。

如果有人能给我一个建议,我会很高兴的。

伊丽莎白

嘿,谢谢你的密码!它对我很有效!

但是,我无法对该数字进行可见性。有谁知道?

奥利维亚尤尔尼

效果很好,除非使用视图(-90 90)旋转绘图,它只旋转前两个,而不是最后一个绘图?

蒂亚戈Seila.

安德烈

有人知道如何用这个函数来表示x轴吗?

丹尼尔·黑樱桃

嗨,如果我要将这个函数用于GUI的“轴”而不是“图”?

marc Oshe

你好,谢谢你的功能浮选。我有x轴的问题。它给出了一个太宽阔的地区。如何限制XLIM,以便我可以每年轴?我试图改变'xlim'(set(ax,'xlim',[2001,2013]);)但我只是出错。

璀璨的

Jutao

oleg.

安娜C

fitou

你好

我正在使用函数plotyyy,它适用于罚款。
更改“XLIM”(SET(AX,'XLIM',[1,12089])时,我的问题发生了;)
第一个曲线从第一个Y轴延伸到第二个Y轴
WICH很好,因为这个区域与路径区域对应。但第三
曲线从第一个y轴延伸到第三y轴外部
路径区域。
因此,我的第三条曲线有一部分在路径区域之外。

有人知道我该怎么解决这个问题吗?

ww

伟大的功能!然而,我似乎不能添加一个xaxis标签。举个例子就好了:)

恋人

缩放和数据光标问题..
只有一个图层是缩放的…
其他2层呢。..
PLZ帮助

雅各布张力子

看来我的第一条评论没能到达页面。基本上,如果你想在副情节结构中使用这个,你可以:
- 注释出“图(...”
- pos = get (gca、pos);代替pos = [0.1 0.1 0.7 0.8];
- pos (3) = pos(3)抵消;而不是pos (3) = pos(3)抵消/ 2;
谢谢

雅各布张力子

雅各布张力子

更正第二点:
我改变了
Pos = [0.1 0.1 0.7 0.8];

POS = GET(GCA,'POS');
这就是我想说的。

stratos

琼琳

你好,

首先感谢您写下这样的有用代码。我必须加上三个轴和浮选工作正常。

但代码只生成在新图中,尽管硬度尝试,但我不设法将三个轴生成现有的图形。你能告诉我如何解决问题吗?

强制轴线生成在我现有的图形,代码
图(“单位”、“规范化”,‘DefaultAxesXMinorTick’,‘上’,‘DefaultAxesYminorTick’,‘上’)”plotyyy。M被加入评论;另外,位置单位换算成厘米,就像我自己的图中那样。

轴1和2显示出,但不是第三轴!!

请提供任何帮助,我将非常感激。

好,谢谢

吴志勇

谢谢,很有用的!

第三行可以改成条形图吗?

干杯

马里奥利物浦

做得很好!谢谢你!:)

卡雷尔卡斯特罗

不能使用它从路径调用文件,但非常有用,谢谢!此外,标签并没有正常工作,如该示例中所述。

哈桑丽

不绘制两个x轴,但plotxx被列为关键字之一

易徐

不能在副图中使用,总是在新图中生成

Izru加纳

易于使用,非常实用!

Anja Noser.

Libor Wilda

看起来真的很好

Bejoy马修斯

伟大的……
非常感谢. .
但是你知道任何一个可以一次绘制5轴吗?

斯贝茨

Chitra Parthiban

谢谢。将在线数据一起绘制和分析是非常有用的

丽娜张

谢谢你提出了增加额外轴的方法。

剥夺了金黄的

很好

奥利维尔克

小而简单,但很有用

Matlab释放兼容性
创建R12.1
兼容任何释放
平台的兼容性
视窗 苹果系统 Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!