图片缩略图

plotyn(变长度输入宗量)

version 1.4.0.0 (7.48 KB) by Jakub Nedbal
绘制具有任意数量的y轴的图形。plotyy泛化。
5.0
3评级

4下载

更新2015年4月17日

视图版本历史

查看许可协议

plotyn扩展图,为每个数据集创建单独的y轴。它是Matlab内建函数PLOTYY的推广。
创建模式,需要先运行:
语法:[hax, hlines, data] = plot4y(data)
语法:[hax, hlines, data] = plot4y(data, pos)
语法:[hax, hlines, data] = plot4y(data, pos, parent)

更新模式,将在现有轴上执行,以更新其绘图、颜色或y轴标签:
语法:plot4y(hax, hlines, data)

输入:
data是一个至少有两个字段(X, Y)的结构体。数据的维度决定了图的数量:
*数据(1)。第一个数据集的X X坐标(所有都一样)
*数据(我)。Y第i个数据集的Y坐标
*数据(我)。颜色第i个数据集的颜色(可选)
*数据(我)。YLabel第i个数据集的y轴标签(可选)

* pos数组的5个数字定位轴上的当前数字(手柄)在“像素”单位
坐标轴被绘制到的父句柄

输出:
双数组包含轴的句柄
包含行句柄的双数组
带有输入数据的结构体

例子:
X = 0;(1)数据。X = X;
(1)数据。Y = x .^ 1;(1)数据。YLabel = '第一个y轴';
(2)数据。Y = x .^ 2;(2)数据。YLabel = '第二y轴';
(3)数据。Y = x .^ 3;(3)数据。YLabel = '第三个y轴';
(4)数据。Y = x .^ 4;(4)数据。YLabel = '第四个y轴';
图;
[hax, hlines, data] = plotyn(data);
传奇(线,y = x, y = x ^ 2, y = x ^ 3, y = x ^ 4, 2,“位置”,“西北”);

现在,图中的数据可以改变,例如数据集2和3:

(2)数据。Y = x ^ (1 / 2);
(3)数据。Y = x ^ (1 / 3);
plotyn (hax、线、数据)

参见plot, plotyy

基于:
plotyyy。m作者丹尼斯·吉尔伯特博士
ploty4.mby Peter (PB) Bodin

通过修改上述函数来创建:

Jakub Nedbal
2015年4月
在BSD许可下发布。

引用作为

Jakub Nedbal(2021)。plotyn(变长度输入宗量)(//www.tatmou.com/matlabcentral/fileexchange/50542-plotyn-varargin), MATLAB中央文件交换。检索

意见及评分(15

杨杨

伟大的附件!: + 1

威廉·J·莱利

我很难把这种例行公事付诸实践。

我直接从例程的顶部复制了这个示例。在poltyn设置图形句柄(ax)之后,它将ax修改为一个结构(ax. ax)。YaxisLocation =…)。这一步给了我一个警告。

但是,然后它在第180行尝试将ax赋值给hax,然后我得到错误:

不可能从struct转换为double。

常规的崩溃。

知道为什么会这样吗?

liangsai梁

Jakub Nedbal

你好,廖谢伟,

这可能是一个有用的补充。想试一试吗?我很乐意上传它,并把你列为我的合著者。

出乎利奥却有些魏

也许可以考虑提供绘制给定轴柄的能力,而不是创建一个新的轴柄

Jakub Nedbal

回应贝利:
代码如下,我忘记附加到我之前的帖子如下:

图(1)
ax₁=次要情节(2,1,1);集(ax₁,“单位”,“像素”);%创建子图,将单位更改为像素
pos11 = get(ax1, '位置');%存储副图位置
ax2 =次要情节(2,1,2);集(ax2,“单位”,“像素”);%创建子图,将单位更改为像素
pos12 = get(ax2, '位置');%存储副图位置
删除([ax₁,ax2]);%删除次要情节

(1) =数据结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”,“label1”);
数据(2)=结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”、“label2”);
hax1 = plotyn(数据);
集(hax1,“位置”,pos11);%设置子图的位置
(1) =数据结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”,“label3”);
数据(2)=结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”、“label4”);
hax2 = plotyn(数据);
集(hax2,“位置”,pos12);%设置子图的位置

Jakub Nedbal

回应贝利:

抱歉回复晚了。它不能用于subplot的原因是plotyn函数创建了许多轴,其中只有一个是可见的。我为您创建了一个简单的变通方法,它可以按照您的需要创建副图,存储它们的位置,然后适当地更改保存已绘制图形的轴的位置。

希望这个有帮助。

贝利

谢谢你愿意帮助我,雅各布!也许我将plotyn与subplot结合使用的方法太过简单,但以下代码却不能满足我的要求:

图(1)
(1) =数据结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”,“label1”);
数据(2)=结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”、“label2”);
次要情节(2,1,1),plotyn(数据);
(1) =数据结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”,“label3”);
数据(2)=结构(1:10 0,' X ' ' Y ', randn(1100),“YLabel”、“label4”);
次要情节(2,1,2),plotyn(数据);

Jakub Nedbal

你好,贝利,
我不明白为什么它不能工作。尝试一下,如果失败了告诉我。如果你给我一个失败的例子,我会试着帮你。如果我没记错的话,副图只是在特定位置创建坐标轴。坐标轴制作完成后,您应该能够像使用其他导航函数一样使用plotyn

贝利

有没有可能把它和副图一起使用?

Jakub Nedbal

回复Pieterjan De Geest:如果我没记错的话,我没有写支持errorbars的代码。金宝app这对其他国家来说仍然是一个挑战。

Pieterjan De地表古积

如果您想要绘制errorbars怎么办?这是可能的吗?

感谢您的回复!
我使用Matlab2013,并假设它在兼容性方面没有问题。在代码描述中,提到了函数ploty4的用法。我认为这是对别人之前工作的“回顾”,所以我忽略了它。在实现过程中,代码中的示例直接复制到另一个脚本中并运行,如下所示:

X = 0;(1)数据。X = X;
(1)数据。Y = x .^ 1;(1)数据。YLabel = '第一个y轴';
(2)数据。Y = x .^ 2;(2)数据。YLabel = '第二y轴';
(3)数据。Y = x .^ 3;(3)数据。YLabel = '第三个y轴';
(4)数据。Y = x .^ 4;(4)数据。YLabel = '第四个y轴';
图;
[hax, hlines, data] = plotyn(data);
传奇(线,y = x, y = x ^ 2, y = x ^ 3, y = x ^ 4, 2,…
“位置”、“西北”);

我会向你学习,自己生成代码。谢谢你的启发性。

Jakub Nedbal

你好,张先生,

你需要提供更多的背景信息,以便我找出我的代码是否有任何问题。粘贴一个示例代码会有帮助。我会自己运行它并检查它是否失败。

看起来你使用的是一个十年前的Matlab版本,代码是不向后兼容的。您可能需要更改“limx = ax。XLim" into "limx = get(ax, 'XLim')"。但是,如果您这样做,您将在随后的代码行中遇到类似的问题。您需要一个一个地修复所有的不兼容。这很容易做到,但你得自己去做。

我有一个问题运行你的4行情节示例,你可以检查你的代码再次?

警告:结构字段赋值用类"double"覆盖一个值。参见MATLAB R14SP2发布说明,分配非结构
变量作为结构显示警告,详细信息。
> plotyn为166
在Untitled7 8
引用不存在的字段'XLim'。

plotyn错误(第170行)
limx = ax.XLim;

MATLAB版本兼容性
创建R2014b
与任何版本兼容
平台的兼容性
窗户 macOS Linux
标签添加标签
确认

启发:plotyyyploty4.m

社区寻宝

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

开始狩猎!