代码之家  ›  专栏  ›  技术社区  ›  Jonas

在Matlab中绘制多色线

  •  14
  • Jonas  · 技术社区  · 15 年前

    我知道我可以这样做:

    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)
    

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

    cline 看起来是一个很有前途的方法,但彩虹颜色将不适用于我的应用程序。

    3 回复  |  直到 15 年前
        1
  •  6
  •   gnovice    15 年前

    您可以使用现有的代码,只需将每行的句柄连接到句柄向量中。如果要同时更改两行的属性,则 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 拖动 :

    当 移动的对象可以作为

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

    • 绘制两条线,保存每条线的句柄(即。 h1 h2 ).
    • 把把手分别放在 '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(h1,@motionFcn);
      draggable(h2,@motionFcn);
      
        2
  •  3
  •   mtrw    15 年前

    我从来没用过,但塞巴斯蒂安·赫兹的一个作品叫 CLINE 在Mathworks文件交换上似乎有关联。

        3
  •  1
  •   Ben Hocking    15 年前

    documentation on 2-D line plots . 具体来说,这个例子:

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