【问题标题】:How to prevent the fill command in MATLAB from creating boxes without "corners"如何防止 MATLAB 中的填充命令创建没有“角”的框
【发布时间】:2013-06-26 08:52:39
【问题描述】:

我目前在 MATLAB 中使用填充命令来创建使用“填充”命令创建的框图(实际代码基于 this StackOverflow Question

我的问题是我创建的盒子没有“角”。我附上了一个说明问题的PNG。请注意,由于图像被大量渲染,因此您必须仔细查看,尽管在此示例中,我的箭头也看起来很奇怪,因为它们也没有边缘)

我想知道是否有人知道可能出了什么问题?在我使用填充命令后,这些框会立即以这种方式出现,其结构如下:

fill(X,Y,MyFaceColor,'FaceAlpha',0.5,'EdgeColor', MyEdgeColor,'LineStyle','','LineWidth',box_line_width,'EdgeAlpha',1)

【问题讨论】:

  • 有趣的 Q. 另一个奇怪的问题:我一直在玩 rectangle 作为对此的答案,它有效但不允许透明。但是,如果您使用矩形后使用fillpatch,矩形角(正确)会变得有趣!
  • 啊!原因是渲染器。使用透明图形对象将渲染器设置为opengl。这可以通过使用set(gcf,'renderer','painters'); 覆盖 - 这将有助于您的角落(它们仍然不是很好),但您的透明度不起作用。这似乎是 opengl 渲染器的错误,我尝试使用它,但找不到简单的解决方法,缺少手动绘制线条。也许有一种已知的方法可以做到这一点?
  • 啊,“opengl”与“画家”的两难境地。我之前在尝试将图片导出为 PDF 时遇到了这个问题。不幸的是,您无能为力。感谢您的尝试!

标签: matlab matlab-figure


【解决方案1】:

如果没有明确定义,函数fill 似乎会为角标记留出空间。因此,使用 marker 属性调用 fill 将解决您的问题。但是,由于标记和线宽似乎适用于不同的比例,因此您必须使用标记大小来获得平滑的边缘。

例子:

fill(X,Y,'r','FaceAlpha',0.5,'EdgeColor', 'k',...
    'LineWidth', 5,'EdgeAlpha',1 , 'marker', '.', 'markersize', 15)

【讨论】:

  • 谢谢!你知道同样的想法是否适用于箭头吗?
  • @BerkU。如果您使用fill 创建它们,是的。
  • 不错的技巧。 +1。这就是为什么矢量图形在 Matlab 中很难,甚至更难。真正的矢量图形程序(Adobe Illustrator 等)允许更改线条的“端盖”样式和对齐属性。甚至 CSS 的画布在绘制矢量时也具有这种能力。我不知道new HG2 是否会解决这个问题,但我认为这是一个值得filing 使用 The MathWorks 的错误。
  • @horchler:实际上,Mathworks 并不认为这是一个错误,而是将其宣传为一个功能:mathworks.de/de/help/matlab/visualize/…
  • @H.Muster:好文章!我并不是说您将标记放在角落的想法是一个错误。很高兴我们拥有它,它可以作为一种解决方法。相反,我的意思是不能简单地调整端盖样式,而必须采用繁琐的方案才能获得具有任意线条粗细的框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多