2015-01-01 23 views
3

我一直在試圖在Matlab中繪製一些不等式。爲什麼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,爲什麼出現這種情況?

+0

請給出更多細節。顯示用於生成圖的代碼,並保存圖(哪種格式?)。哪個版本的matlab(和平臺)也可能對你有用。 – Hoki

+0

@Hoki - 感謝您的評論。詳細信息添加 –

回答

3

這是因爲有您的域名ineq1ineq3之間的重疊。

如果你圖的渲染器設置爲別的比painter(如openglzbuffer),你會看到這代表您的域名ineq3(應該ineq1下隱藏)的邊界線

當圖是用Matlab引擎打印的(對於png,jpg,tiff等),我無法強制print命令使用painter渲染器。如果使用gostscript引擎呈現的格式(pdf,bmp,pcx,pcm,...),則會生成正確的輸出。

如果您想堅持輸出png,最簡單的方法是確保您的域之間沒有重疊,然後再將它們發送到contourf函數。所以你的情況只是添加一行:

ineq3(ineq3==ineq1) = false ; 

調用不同contourf之前,和輸出中會在圖保存(圖像中確定,因爲就沒有鬼線混淆渲染引擎)。

當然用這種方法,重疊的順序很重要。此解決方案假定您想要查看完整域ineq1,並且它優先於域ineq3。如果你想要一個不同的優先級,你必須改變哪個域覆蓋另一個域。

PS:如果您希望所有域的邊框都可見,請考慮使用補丁和透明度,以使重疊更明顯。

相關問題