在Matlab中绘制多色线

时间:2010-03-15 01:25:18

标签: matlab plot

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

我知道我可以这样做:

plot([1,1],[0,1],'r'),
hold on,
plot([1,1],[0,1],'--b')

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

修改 谢谢您的回答。我想我确实应该提供更多信息。

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

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

plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6)

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

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

cline看起来很有前景,但彩虹色不适用于我的应用程序。

3 个答案:

答案 0 :(得分: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



更新:由于您提到您正在使用draggable中的MathWorks File Exchange,因此这是另一种解决方案。来自draggable的说明:

  

一个被调用的函数   移动对象可以作为一个提供   可选参数,这样   运动触发了进一步的行动。

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

  • 绘制两行,保存每个句柄(即h1h2)。
  • 将每个句柄放在另一个的'UserData'属性中:

    set(h1,'UserData',h2);
    set(h2,'UserData',h1);
    
  • 创建以下功能:

    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
    
  • 为这两行开启draggable,使用上述函数作为移动任一对象时调用的函数:

    draggable(h1,@motionFcn);
    draggable(h2,@motionFcn);
    

答案 1 :(得分:3)

我从来没有使用它,但SebastianHölz在Mathworks文件交换中提到CLINE的提交似乎是相关的。

答案 2 :(得分:1)

我不知道怎么做你想要的,但想要这样做的原因可能是有一些方法可以将这条线与其他线区分开来。沿着这些方向,看看MathWorks'documentation on 2-D line plots。具体来说,这个例子:

plot(x,y,'--rs','LineWidth',2,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)

应该给你很多变化的想法。如果您确实需要双色破折号,则可能有助于指定原因。这样,即使我们无法回答这个问题,也许我们可以说服你,你真的不需要双色破折号。由于您已经排除了重叠解决方案,我相当确定没有解决方案可以满足您的所有需求。我认为双色是这些需求中最具流动性的。