显示通过填充区域的Matlab绘图线

问题描述 投票:1回答:2

我编写了一个程序,该程序创建六边形的网格,有些是黑色的,有些是白色。这是随机完成的。然后,我随机选择一个六边形子集,在其边缘放置红色菱形。该脚本旨在使用材料(模型)来构建具有晶粒(六边形)和孔隙空间(菱形)的假装岩石微结构。我正在使用fill()命令创建每个形状。问题是,当我填充红色菱形时,它下面的六边形的边缘仍然显示出来。我尝试发布图片,但是由于这是我第一次发布,因此不允许发布。不过,如果有人想看,我可以发电子邮件。

因此创建黑色六边形:

h= fill(hexXY(i,j,1)+vx,hexXY(i,j,2)+vy,'k');

set(h,'edgecolor','k')

hexXY矩阵保存六边形中心的x和y坐标,将其添加到vx和vy数组中可得出六边形上每个点的顶点。然后,我用钻石做同样的事情:

h=fill(hexXY(i,j,1)+dvx,hexXY(i,j,2)+dvy,'r');

set(h,'edgecolor','r')

但是,正如我所说,六边形的黑色边缘通过红色显示。我按照您绘制顶点的顺序提供了顶点,尽管我认为这并不重要。我尝试使用uistack并使用补丁,但均不适合我。我不能将六边形边缘颜色设置为none,因为我也有白色六边形,如果将背景颜色设置为黑色,则白色六边形之间会出现黑线。我删除了必须删除黑色或白色六边形的边缘,因为在两个接触的地方,边缘会产生混乱的像素化。

有人可以帮我弄清楚如何正确填充红色钻石吗?

编辑:我之前没有提到,这仅在保存图形时发生。您无法在图形窗口中看到它。我尝试使用print()和hgexport(),并将渲染器更改为无济于事。这是一个小例子,数字从我的代码中拉出以运行:

hold on
v1=[0.3929 0.4107 0.3929 0.3571 0.3393 0.3571];
v2=[0.6907 0.6598 0.6288 0.6288 0.6598 0.6907];
h= fill(v1,v2,'k');
set(h,'edgecolor','k')

v3=[0.3750 0.3929 0.3750 0.3571 0.3750];
v4=[0.6366 0.6288 0.6211 0.6288 0.6366];
h=fill(v3,v4,'r');
set(h,'edgecolor','r')

set(gca,'position',[0 0 1 1],'units','normalized')
set(gcf,'PaperUnits','Inches','PaperPosition',[0 0 5 5]);
hgexport(gcf, 'test', hgexport('factorystyle'), 'Format', 'tiff','Resolution',600);

这里是用hgexport保存的图像:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9ZNmg5Mi5wbmcifQ==” alt =“在此处输入图像描述”>

matlab fill edges
2个回答
1
投票

尝试使边缘透明:

set(h,'edgealpha',0)

有些奇怪的原因导致了最初的问题。如果命令保持简单,则一切看起来都很好:

h1= fill([1,2,3,3,2,1],[2,4,3,2,0,1],'m');
set(h1,'edgecolor','m')

hold on
h2= fill([2,3,2.5],[2,1,pi],'g');
set(h2,'edgecolor','g')

但是当前景三角形改变时背景边缘会向前移动。

set(h2,'edgealpha',0) % an example of what can cause the problem to appear.

我不知道是什么原因造成的。


1
投票

如果set(h,'edgealpha',0)不起作用(如@ user1739107]的建议,则可以尝试set(h,'edgecolor','none')

在OSX R2012b上,两种解决方案都可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.