首页 文章

在MATLAB中,单击透明线是不可能的?

提问于
浏览
3

所以我有3行(技术补丁)启用了一些透明度 . 这些线由补丁线FEX提交生成 . 通过在数据的末尾添加NaN使得补丁看起来像线条,FEX条目非常有效,因此它不会在我的行的 endpoints 之间创建一个大的黑色补丁 .

我的台词看起来像这样

__        __
  \      /
_  \    /  _
 \  \__/  /
  \______/

贴片从左 endpoints 延伸到右 endpoints ,沿顶部的直线延伸,然后沿着底部的线延伸 . 实际的补丁是隐藏的(未绘制),所以用户看到的只是线条

问题是如果我想点击顶行的底部驼峰,它就像我点击底线一样,因为它是该补丁的一部分 .

我想过几个解决方法,并希望你们能指出我的解决方案中可能错过的缺陷或添加想法 .

解决方法#1

理想情况下,我会在透明线上创建一个实际线(线系列对象) . 我会在补丁上关闭测试,我会让实际的线条看不见,但是打开测试 . 我99%确定存在的问题是,如果visibilty关闭,则无法单击该对象 . 如果有人解决该问题(记录或以其他方式),那将是很好的 .

解决方法#2

将补丁线hittest属性关闭 . 制作模拟线objs . 遵循补丁线coords . 并且线宽非常小,以使线理想地几乎看不见,并且命中测试点击指向这些线 . 以前有人试过这样的事吗? (我在工作,现在不能尝试)

解决方法#3

注意我真的不想这样做当然可以关闭补丁/线对象的hittest并使用轴按钮来找出它最接近的补丁obj(只是线部分) .

再一次,任何有关我可能的工作,一般情况等的人都会非常感激 .

谢谢,肖恩

2 回答

  • 0

    这个问题可以通过两个粗线贴片来说明,其中一个贴片不平行于轴:

    patch([2 8 8],[5 10 10],'w','EdgeColor','b','EdgeAlpha',0.4,'LineWidth',3)
    patch([2 8 8],[4  4  4],'w','EdgeColor','r','EdgeAlpha',0.4,'LineWidth',3)
    xlim([0 10])
    ylim([3 11])
    

    您不能选择那些与其中一个轴平行的线 .

    • 解决方法#1:不可能 .

    • 解决方法#2:非常明显,为什么你需要透明线呢?

    • 解决方法#3:唯一的方法......

    解决方法替代方案:向TMW提交技术请求以提高修补程序的可点击性 .

  • 0

    奥列格,你的初始帖子不知何故激励我提出我优雅的解决方案 . (不要问我怎么样,只要接受我的“谢谢”哈哈)

    我问题的优雅解决方案要求我超越补丁属性并转向轴子命令 . 假设没有任何一条线相互交叉,我能够按顺序绘制它们,其中底部是第一个,然后是第二个,等等,直到我到达顶部(有效地重新排列子顺序) .

    如果有其他人偶然发现这一点,你可以做什么(假设你的线不相交)是在你的情节中对第一个Y(或任何值)进行排序,从最低到最高(在这种情况下),并确保你的sort函数返回指标 .

    我没有把电脑放在我面前,但是你最终做的是有效地制作一个连续的循环,循环遍历各个指标 .

    就像是:

    for i=[6 2 5 4 1 3]
    
      plot(X(:,i),Y(:,i))
    
    end
    

    第6列是我的最低数据,第2列在情节等方面排名第二 .

相关问题