我想用两个颜色的虚线绘制一条垂直线(我希望使用任何方向,但我现在都希望垂直即可),例如红色-蓝色-红色-蓝色-...
我知道我可以这样做:
plot([1,1],[0,1],'r'), hold on, plot([1,1],[0,1],'--b') 但是,由于我需要能够移动这条线,所以它只能有一个手柄。我该怎么办?
编辑谢谢您的回答。我想我确实应该提供更多信息。
我有一些数据分为不同的部分。我希望能够手动调整类之间的边界。为此,我在分类边界处绘制垂直线,并使用
可拖动的方式允许移动这些线。
对于红色和蓝色类之间的边界,我想有一条红色/蓝色线。
plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6) 是我目前实际使用的。但是,它并不是那么漂亮(如果我想要相等的间距,这将成为一种真正的痛苦,并且我想给两种颜色相同的权重),并且我想有可能使用三种颜色(而不是使用标记边缘和脸色不同,因为它使我的眼睛流血)。
不幸的是,draggable不允许我使用多个句柄,并且用hggroup对行进行分组似乎无法创建可拖动的对象。
cline看起来是一种很有前途的方法,但是彩虹色不适用于我的应用程序。
回答:
您可以使用已有的代码,只需将每行中的句柄连接到句柄向量中即可。当您想同时更改两行的属性时,
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
更新:既然您提到您正在使用
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);
更多&回答...