在Matlab中绘制多色线

Jon*_*nas 14 matlab plot

我想绘制一条垂直线(我更喜欢任何方向,但我现在很满意,只是垂直),双色破折号,比如红蓝红 - 蓝 - .

我知道我可以这样做:

plot([1,1],[0,1],'r'),
hold on,
plot([1,1],[0,1],'--b')
Run Code Online (Sandbox Code Playgroud)

但是,由于我需要能够移动线路,除此之外,它应该只有一个手柄.我怎么能这样做?

编辑 感谢您的回答.我想我确实应该提供更多信息.

我有一些数据被分类到不同的部分.我希望能够手动调整类之间的界限.为此,我在分类边界绘制垂直线,并使用draggable来移动线条.

对于红色和蓝色类之间的边界,我想要一条红色/蓝色线.

plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6)
Run Code Online (Sandbox Code Playgroud)

是我目前正在使用的.然而,它不是那么漂亮(如果我想要相等的间距,它变成一个真正的痛苦,我想给两种颜色相同的重量),我希望有可能使用三种颜色(而不是标记边缘和面对不同,因为它让我的眼睛流血).

不幸的是,draggable不允许我使用多个句柄,并且用hggroup对行进行分组似乎不会创建一个可拖动的对象.

cline看起来很有前途,但彩虹色不适合我的应用.

gno*_*ice 6

您可以使用您拥有的代码,并将每行的句柄连接到句柄向量中.如果要同时更改两行的属性,SET函数可以接受句柄向量作为参数.从SET的文档:

set(H,'PropertyName',PropertyValue,...) 将命名属性设置为标识的对象上的指定值H.H可以是句柄的向量,在这种情况下set设置所有对象的属性值.

这是一个例子:

h1 = plot([1 1],[0 1],'r');    %# Plot line 1
hold on;
h2 = plot([1 1],[0 1],'--b');  %# Plot line 2
hVector = [h1 h2];             %# Vector of handles
set(hVector,'XData',[2 3]);    %# Shifts the x data points for both lines
Run Code Online (Sandbox Code Playgroud)



更新:既然你提到你使用拖动MathWorks的文件交换,这里是一个替代的解决方案.从draggable的描述:

移动对象时调用的函数可以作为可选参数提供,以便移动触发进一步的操作.

然后,您可以尝试以下解决方案:

  • 绘制两条线,为每个线保存手柄(即h1h2).
  • 将每个句柄放在'UserData'另一个的属性中:

    set(h1,'UserData',h2);
    set(h2,'UserData',h1);
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建以下功能:

    function motionFcn(hMoving)  %# Currently moving handle is passed in
      hOther = get(hMoving,'UserData');  %# Get the other plot handle
      set(hOther,'XData',get(hMoving,'XData'),...  %# Update the x data
                 'YData',get(hMoving,'YData'));    %# Update the y data
    end
    
    Run Code Online (Sandbox Code Playgroud)
  • 打开两行的draggable,使用上面的函数作为移动任一对象时调用的函数:

    draggable(h1,@motionFcn);
    draggable(h2,@motionFcn);
    
    Run Code Online (Sandbox Code Playgroud)