3

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

我的线条看起来像这样

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

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

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

我已经想到了一些解决方法,并希望你们能指出缺陷或添加我可能在我的解决方法中遗漏的想法。

解决方法 #1

理想情况下,我会在透明线条上创建一条实际线条(线条系列 obj.)。我会在补丁上关闭 hittest,我会让实际的线不可见,但打开 hittest。我 99% 肯定存在的问题是,如果关闭可见性,则无法单击该对象。如果有人可以解决该问题(记录在案或以其他方式),那就太好了。

解决方法 #2

将 patchline hittest 属性关闭。制作模拟线对象。遵循补丁线坐标。并且具有非常非常小的线宽,以便理想情况下使线几乎不可见,并且命中测试点击指向这些线。有没有人尝试过这样的事情?(我在工作,现在不能尝试)

解决方法 #3

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

再一次,任何关于我可能的工作、一般情况等的见解都将不胜感激。

谢谢,肖恩

4

2 回答 2

0

奥列格,你最初的帖子不知何故启发了我想出我优雅的解决方案。(不要问我怎么做,接受我的“谢谢”哈哈)

我的问题的优雅解决方案要求我超越补丁属性并转向轴子顺序。在没有一条线会相互交叉的假设下,我能够按照下面的顺序排列它们,然后是第二低的,依此类推,直到我到达顶部(有效地重新排列子顺序)。

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

我面前没有我的电脑,但你最终做的是有效地制作一个连续的 for 循环,循环遍历索引。

就像是:

for i=[6 2 5 4 1 3]

  plot(X(:,i),Y(:,i))

end

第 6 列是我的最低数据,第 2 列是绘图中第二低的数据,依此类推。

于 2013-06-18T19:29:27.340 回答
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 提交技术请求以提高补丁的可点击性。

于 2013-06-18T19:11:39.007 回答