MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在Matlab中绘制多色线 (https://www.labfans.com/bbs/showthread.php?t=23206)

poster 2019-12-10 20:30

在Matlab中绘制多色线
 
我想用两个颜色的虚线绘制一条垂直线(我希望使用任何方向,但我现在都希望垂直即可),例如红色-蓝色-红色-蓝色-...

我知道我可以这样做:

plot([1,1],[0,1],'r'), hold on, plot([1,1],[0,1],'--b') 但是,由于我需要能够移动这条线,所以它只能有一个手柄。我该怎么办?

[B]编辑[/B]谢谢您的回答。我想我确实应该提供更多信息。

我有一些数据分为不同的部分。我希望能够手动调整类之间的边界。为此,我在分类边界处绘制垂直线,并使用[URL="http://www.mathworks.com/matlabcentral/fileexchange/4179-draggable"]可拖动的[/URL]方式允许移动这些线。

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

plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6) 是我目前实际使用的。但是,它并不是那么漂亮(如果我想要相等的间距,这将成为一种真正的痛苦,并且我想给两种颜色相同的权重),并且我想有可能使用三种颜色(而不是使用标记边缘和脸色不同,因为它使我的眼睛流血)。

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

[URL="http://www.mathworks.com/matlabcentral/fileexchange/14677-cline"]cline[/URL]看起来是一种很有前途的方法,但是彩虹色不适用于我的应用程序。



[B]回答:[/B]

您可以使用已有的代码,只需将每行中的句柄连接到句柄向量中即可。当您想同时更改两行的属性时, [URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/set.html"]SET[/URL]函数可以接受手柄向量作为参数。从[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/set.html"]SET[/URL]的文档中:
[INDENT] set(H,'PropertyName',PropertyValue,...)将命名属性设置为H标识的对象上的指定值。 H可以是句柄的向量,在这种情况下, set设置所有对象的属性值。

[/INDENT]这是一个例子:

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


[B]更新:[/B]既然您提到您正在使用[URL="http://www.mathworks.com/matlabcentral/fileexchange/"]MathWorks File Exchange中的[/URL] [URL="http://www.mathworks.com/matlabcentral/fileexchange/4179-draggable"]可拖动对象[/URL] ,这是另一种解决方案。从[URL="http://www.mathworks.com/matlabcentral/fileexchange/4179-draggable"]可拖动[/URL]的描述:
[INDENT]可以将移动对象时调用的功能作为可选参数提供,以便移动触发进一步的动作。

[/INDENT]然后,您可以尝试以下解决方案:
[LIST][*]绘制两条线,为每条线保存手柄(即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[*]使用上面的函数作为移动任一对象时调用的函数,打开两行的[URL="http://www.mathworks.com/matlabcentral/fileexchange/4179-draggable"]可拖动[/URL]对象:

draggable(h1,@motionFcn); draggable(h2,@motionFcn);[/LIST]
[url=https://stackoverflow.com/questions/2444575]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 04:53

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.