2010-03-15 86 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