【问题标题】:Matlab: 'hold on' doesn't work with 'set()'?Matlab:'hold on' 不适用于'set()'?
【发布时间】:2013-06-28 13:49:06
【问题描述】:

我正在使用plot()hold(Ax, 'on') 函数在同一轴上绘制多个图。但是,我注意到如果我使用 set(Ax, 'XData', ..., 'YData', ...) 而不是 plot() 进行绘图,那么 hold(Ax, 'on') 功能将不起作用。换句话说,如果我使用set() 函数,我将无法在同一轴上绘制所有曲线。知道为什么会这样,或者是否有一种方法可以使用set() 并使用hold on 功能?谢谢!

【问题讨论】:

  • 看看this explanation
  • 是的,我之前确实看过。但是,我不能完全得到那里的建议..
  • 只是出于好奇 - 为什么不能/不想使用plot
  • 我使用brush从图中选择数据。刷数据的脚本需要XDataYData,可以通过set(Ax, 'XData', ..., 'YData', ...)存储。我不确定plot() 是否允许这样做,因为我还没有弄清楚..

标签: matlab plot set


【解决方案1】:

基于this answer,您可以尝试以下示例:

x1 = linspace(1,10,21);
y1 = rand(1,21);

x2 = x1;
y2 = rand(1,21);

x3 = x2;
y3 = rand(1,21);

h(1) = plot(x1,y1,'b');

h(2) = copyobj(h(1),gca); 
h(3) = copyobj(h(1),gca); 

set(h(2),'XData',x2,'YData',y2,'Color','r')
set(h(3),'XData',x3,'YData',y3,'Color','g')

set 命令更新句柄引用的对象的属性。如果您不想一遍又一遍地修改一条曲线,而是添加曲线,则必须使用copyobj 复制初始线对象。完成此操作后,您可以生成无限数量的附加行,然后您可以为其设置属性(包括新的'XData''YData')。
但是,您需要一个初始线对象来复制和修改。
此外,根据您设置绘图的方式,请考虑将 gca 替换为您的轴句柄,以便参考正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2017-03-19
    • 2016-04-13
    • 1970-01-01
    • 2022-07-02
    相关资源
    最近更新 更多