Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在Matlab中绘制多色线

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

我知道我可以这样做:

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);

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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