我使用gridxy function(因为原始网格无法正确修改),效果非常好。
但是在这个例子中,网格被绘制在导出的png中的前景中:
figure(1); clf;
x = [0:0.1:10];
y = sin(x*pi/2).* x;
xtemp = [x(1) ; x(:) ; x(end)] ;
ytemp = [0 ; y(:) ; 0 ] ;
% plot
hplot = fill(xtemp,ytemp, 'b');
set(hplot, 'FaceColor' , [0.5, 0.5, 0.75])
set(hplot, 'EdgeColor' , [0, 0, 0.25])
hgrid = gridxy(get(gca,'XTick'),get(gca,'YTick'),'Color',[0.6 0.6 0.6],'Linestyle','--', 'LineWidth', 0.6);
print(gcf, '-r400', ['test' '.png'], '-dpng');
在此导出图像中可以看到:
答案 0 :(得分:1)
我没有完整的解释,但至少是一个有效的解决方案。
首先,似乎将图形的RenderMode
属性设置为opengl
或zbuffer
会使屏幕上的图像看起来像打印的图像(网格在顶部),然后设置它到painters
使网格返回到背景。在print
的帮助下:
关于渲染器的说明:打印数字时,MATLAB并不总是使用 与屏幕上相同的渲染器。这是出于效率原因。那里 然而,在这种情况下,印刷输出并不完全像 屏幕表示因此。在这些实例中指定 -zbuffer或-opengl更可能为您提供模拟屏幕的输出。
但是,尝试使用每个可用的渲染器,即painters
,zbuffer
或opengl
会产生一些不同的结果,但所有渲染器都在顶部:
% Problem still exists in all 3 options:
print(gcf, '-r100', ['test1' '.png'], '-dpng','-painters');
print(gcf, '-r100', ['test1' '.png'], '-dpng','-zbuffer');
print(gcf, '-r100', ['test1' '.png'], '-dpng','-opengl');
在文件toolbox\matlab\graphics\private\render.m
的第142行放置一个断点,然后使用print
选项调用-painters
,显示传递给hardcopy
的第三个输入是{{1 }}。如果您将其更改为-dzbuffer
:
-dpainters
然后点击F5继续,生成的图像中的网格变为背景。