我想绘制一条垂直线(我更喜欢任何方向,但我现在很满意,只是垂直),双色破折号,比如红蓝红 - 蓝 - .
我知道我可以这样做:
plot([1,1],[0,1],'r'),
hold on,
plot([1,1],[0,1],'--b')
Run Code Online (Sandbox Code Playgroud)
但是,由于我需要能够移动线路,除此之外,它应该只有一个手柄.我怎么能这样做?
编辑 感谢您的回答.我想我确实应该提供更多信息.
我有一些数据被分类到不同的部分.我希望能够手动调整类之间的界限.为此,我在分类边界绘制垂直线,并使用draggable来移动线条.
对于红色和蓝色类之间的边界,我想要一条红色/蓝色线.
plot(ones(10,1),linspace(0,1,10),'-bs','MarkerFaceColor','r','MarkerEdgeColor','none','linewidth',6)
Run Code Online (Sandbox Code Playgroud)
是我目前正在使用的.然而,它不是那么漂亮(如果我想要相等的间距,它变成一个真正的痛苦,我想给两种颜色相同的重量),我希望有可能使用三种颜色(而不是标记边缘和面对不同,因为它让我的眼睛流血).
不幸的是,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
Run Code Online (Sandbox Code Playgroud)
更新:既然你提到你使用拖动从MathWorks的文件交换,这里是一个替代的解决方案.从draggable的描述:
移动对象时调用的函数可以作为可选参数提供,以便移动触发进一步的操作.
然后,您可以尝试以下解决方案:
h1和h2).将每个句柄放在'UserData'另一个的属性中:
set(h1,'UserData',h2);
set(h2,'UserData',h1);
Run Code Online (Sandbox Code Playgroud)创建以下功能:
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
Run Code Online (Sandbox Code Playgroud)打开两行的draggable,使用上面的函数作为移动任一对象时调用的函数:
draggable(h1,@motionFcn);
draggable(h2,@motionFcn);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
14310 次 |
| 最近记录: |