gpt4 book ai didi

matlab - 为什么Matlab在保存时要加上这条线来作图?

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:09 25 4
gpt4 key购买 nike

我一直在尝试在 Matlab 中绘制一些不等式。

当它显示在 Matlab 图中时,它看起来是正确的:

enter image description here

但是当我保存图形时,我得到了这条烦人的黄线(无论是手动保存还是在代码中保存): enter image description here


生成图的代码是:

function [  ] = plotInequalities( ~ )

pRange = linspace(1/2,1,1000);
cRange = linspace(0,1,1000);
[P, C] = meshgrid(pRange,cRange);
ineq1 = P >= 2/3;
ineq2 = C.*P.*(3-4.*P)./(2.*P+C.*(2-4.*P)) >= 1-P;
ineq3 = C <= 3.*P.*(1-P)./(2.*(-6.*P.^2+6.*P-1));
rest = ~ineq1 & ~ineq2 & ~ineq3;
pl = figure
hold on
c = 2:5;
contourf(pRange, cRange, c(2) * ineq2, [c(2), c(2)], 'c')
contourf(pRange, cRange, c(3) * ineq3, [c(3), c(3)], 'y')
contourf(pRange, cRange, c(4) * rest, [c(4), c(4)], 'r')
contourf(pRange, cRange, c(1) * ineq1, [c(1), c(1)], 'b')
legend('\{A,AB\}', '\{A,B\}', '\{A,AB, B\}', '\{A\}')
xlabel('P')
ylabel('C')
saveas(pl, 'out.png','png');
end

我在 Windows 8 上使用 Matlab R2014a。


Any idea as to why this happens?

最佳答案

这是因为您的域 ineq1ineq3 之间存在重叠。

如果您将图形的渲染器设置为 painter 以外的任何东西(例如 openglzbuffer),您将看到代表您域的边框 ineq3(应隐藏在 ineq1 下)

当用 Matlab 引擎打印图形时(pngjpgtiff 等...),我不能强制 print 命令使用 painter 渲染器。如果您使用使用 gostscript 引擎呈现的格式之一(pdfbmppcxpcm)。 ..) 然后产生正确的输出。

如果您想坚持使用 png 输出,简单的方法是确保您的域之间没有重叠,然后再将它们发送到 contourf 函数。因此,在您的情况下,只需添加以下行:

ineq3(ineq3==ineq1) = false ;

就在你调用不同的contourf之前,输出将在图中保存的图像中正常(因为不会有鬼线混淆渲染引擎)。

当然,对于这种方法,重叠的顺序很重要。此解决方案假设您希望查看完整域 ineq1,并且它优先于域 ineq3。如果您想要不同的优先级,则必须更改哪个域覆盖另一个。

PS:如果您希望所有域的边界都可见,请考虑使用补丁和透明度,这样重叠会更加明显。

关于matlab - 为什么Matlab在保存时要加上这条线来作图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com