2010-03-15 84 views
14

我想绘制一条垂直线(我倾向于任何方向,但我现在只对垂直线很满意),用双色破折号表示,例如红 - 蓝 - 红蓝-...在Matlab中绘制多色线

我知道我能做到这一点是这样的:

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) 

是我现在实际使用的。然而,它并不漂亮(如果我想要等间距,它会变成真正的痛苦,并且我想让这两种颜色具有相同的重量),并且我希望有可能使用三种颜色(而不是标记边缘和脸部不同,因为它会让我的眼睛流血)。

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

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

回答

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 



UPDATE:既然你提到你正在使用draggableMathWorks 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); 
    
+0

是的,我希望能够做到这一点。不幸的是,它似乎不适用于我的应用程序(请参阅编辑)。 – Jonas 2010-03-15 03:35:23

+0

@Jonas:我在答案中增加了一个额外的解决方案,我认为应该使用可拖动。 – gnovice 2010-03-15 04:00:45

+1

谢谢!这工作非常好。我需要使用setappdata/getappdata,因为我已经使用UserData。 – Jonas 2010-03-16 14:12:22

1

我不知道如何去做你想要的东西,但大概你想做到这一点的原因是有一些区别这条线与其他线的方法。沿着这些线,看看MathWorks'documentation on 2-D line plots。具体来说,这个例子:

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

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

+0

事实证明,我实际上已经先阅读了手册(尽管我承认我应该提到这一点),而且我确实需要双色。 – Jonas 2010-03-15 03:33:36

3

我从来没有使用它,但有一个由SebastianHölz在Mathworks文件交换中称为CLINE的提交,这似乎有关。

+0

这几乎是我需要的。无论如何,很高兴知道克莱因存在。 – Jonas 2010-03-15 03:36:02