在背景中绘制网格

时间:2012-02-22 07:51:12

标签: matlab background grid

我使用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');

在此导出图像中可以看到:

enter image description here

1 个答案:

答案 0 :(得分:1)

我没有完整的解释,但至少是一个有效的解决方案。

首先,似乎将图形的RenderMode属性设置为openglzbuffer会使屏幕上的图像看起来像打印的图像(网格在顶部),然后设置它到painters使网格返回到背景。在print的帮助下:

  

关于渲染器的说明:打印数字时,MATLAB并不总是使用   与屏幕上相同的渲染器。这是出于效率原因。那里   然而,在这种情况下,印刷输出并不完全像   屏幕表示因此。在这些实例中指定   -zbuffer或-opengl更可能为您提供模拟屏幕的输出。

但是,尝试使用每个可用的渲染器,即painterszbufferopengl会产生一些不同的结果,但所有渲染器都在顶部:

% 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继续,生成的图像中的网格变为背景。