2015-07-01 3 views
2

У меня проблема при печати 2D-графика в формате pdf в формате Matlab. Я пытаюсь напечатать следующий файл в файле (pdf, eps, svg, не имеет значения): Original plotMatlab print -dpdf создает нечеткие строки

Проблема в том, что в некоторых точках линия очень «застенчивая» (извините за недостаток лучшего слова). Я увеличил масштаб на верхней части, чтобы вы могли видеть, что я имею в виду: Zoomed in in matlab figure window

Это, очевидно, не представляет проблемы для окна фигуры Matlab. Но когда я печатаю его в формате PDF, это то, что он выглядит следующим образом:

Resulting PDF

Результат одинаков для PDF, SVG и EPS. Я думаю, проблема в том, что Matlab создает векторизованный путь (это хорошо!), Но линия пути слишком толстая, и каждый маленький всплеск можно увидеть.

Вот код, я использую для создания PDF:

sTitle = 'trajectory'; 
sFile = 'Data/trajectory.mat'; 
sPdfFile = 'pdfs/trajectory.pdf'; 
linewidth = 1; 
fontsize1 = 18; 

fig = figure; 

% Adjust figure window size 
set(fig, 'Position', [100 100 1400 800]); 

% Set title 
title(sTitle); 

% Get states 
[s, t] = load_data(some_data); 

% Draw trajectory 
plot(s(1,:), s(2,:), 'linewidth', linewidth); 

% Labels and stuff 
xlabel('x^W [m]', 'fontsize', fontsize1); 
ylabel('y^W [m]', 'fontsize', fontsize1); 
set(gca, 'fontsize', fontsize1) 

% Axis font 
set(gca      , ... 
    'FontName' , 'Helvetica'); 

set(gca, ... 
    'Box'   , 'on'  , ... 
    'TickDir'  , 'out'  , ... 
    'TickLength' , [.02 .02] , ... 
    'XMinorTick' , 'on'  , ... 
    'XGrid'  , 'on'  , ... 
    'XMinorGrid' , 'off'  , ... 
    'YMinorTick' , 'on'  , ... 
    'YGrid'  , 'on'  , ... 
    'XColor'  , [.3 .3 .3], ... 
    'YColor'  , [.3 .3 .3], ... 
    'XTick'  , -5:1:5, ... 
    'XTickLabelMode', 'auto', ... 
    'YTick'  , -5:1:5, ... 
    'LineWidth' , 1  ); 

% Adjust view 
axis([-2.5 2.5, -2.7 0.5]); 

% Correct data aspect ratio 
daspect([1,1,1]) 


% Print to PDF 
width = 10; 
height = 5; 
set(gcf, 'PaperPosition', [0 0 width height]); %Position plot at left hand corner with width 5 and height 5. 
set(gcf, 'PaperSize', [width height]); %Set the paper to have width 5 and height 5. 
print('-dpdf', '-r600', sPdfFile); 
+0

Линия '[s, т] = load_data (some_data)' делает ваш код unrunnable. Не могли бы вы предоставить минимальный рабочий пример? –

+0

@ LuisMendo Да, я знаю, но я не могу представить простой пример, который создает эти грязные данные. – Cat

ответ

2

Согласно this answer, это признанная ошибка, и отвечающему предусмотрели возможность для устранения проблемы для EPS файлов.

Поскольку вы создаете PDF-документ, я бы предложил использовать export_fig (требуется Ghostscript install), который на тестовом скрипте ниже создает плавную линию в подготовленном PDF-файле.

clc(); 
clear(); 

figure(1); 

% Get states 
n = 800; 
x = linspace(0,2*pi,n); 
s = [x.*cos(x);x.*sin(x)] + 0.3*exp(-0.3*[x;x]).*(rand(2,n)-0.5) ; 

% Draw trajectory 
plot(s(1,:), s(2,:), 'linewidth', 1); 
axis([-20,20,-20,20]); 
daspect([1,1,1]) 

% Print to PDF 
print('traj.pdf','-dpdf', '-r600'); 
export_fig('traj2.pdf','-dpdf','-r600'); 

print PDF выход:

[print PDF output image

export_fig PDF выход:

export_fig PDF output image

+0

Большое спасибо, я сразу же попробую! – Cat

+0

Я могу подтвердить, что 'export_fig' работает как шарм. Большое спасибо за ваши усилия! – Cat

Смежные вопросы