сетка в фоновом режиме - PullRequest
3 голосов
/ 22 февраля 2012

Я использую функцию gridxy (поскольку исходная сетка не может быть изменена должным образом), которая работает очень хорошо.

Но в этом примере сетка отображается на переднем плане в экспортированном 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 Ответ

1 голос
/ 22 февраля 2012

У меня нет полного объяснения, но, по крайней мере, есть рабочее решение.

Прежде всего, кажется, что установка свойства 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');

Установка точки останова в строке 142 в файле toolbox\matlab\graphics\private\render.m, а затем вызов print с параметром -painters, показывает, что 3-й вход, переданный hardcopy, равен -dzbuffer.Если вы измените его на -dpainters:

inputargs{3}='-dpainters' % while in breakpoint

, а затем нажмете F5, чтобы продолжить, сетка на полученном изображении перейдет в фоновый режим.

...