2013-06-11 4 views
1

У меня возникает проблема с созданием векторных графиков PDF после ручной настройки цветов патчей.Растрированный PDF-вывод после ручной установки «FaceVertexCData» патча в MATLAB

После установки цвета граней накладных и вершин, используя вызов для установки (...), чтобы установить свойство «FaceVertexCData» патча, вывод PDF произведенный как «savefig» и «SaveAs» является растрированный и больше не в векторном формате. Этого не происходит, если «FaceVertexCData» не изменяется.

Например,

clear all; close all; 
h = bar([1 2 3 ; 3 2 1 ; 3 4 4]); 
saveas(gcf, 'barplot.pdf', 'pdf'); 
savefig('barplot.pdf', 'pdf'); 

производит прекрасно векторизованную PDF из участков.

С другой стороны, следующий код будет производить уродливые векторизованные PDF сюжеты:

clear all; close all; 
h = bar([1 2 3 ; 3 2 1 ; 3 4 4]); 
ch = get(h,'children'); 
set(ch{1},'FaceVertexCData',[1 0 0 ; 0 1 0; 0 0 1]); 
set(ch{2},'FaceVertexCData',[1 0 0 ; 0 1 0; 0 0 1]); 
set(ch{3},'FaceVertexCData',[1 0 0 ; 0 1 0; 0 0 1]); 
saveas(gcf, 'barplot_savefig_FaceVertexCData.pdf', 'pdf'); 
savefig('barplot_saveas_FaceVertexCData.pdf', 'pdf'); 

Что является причиной этой проблемы? Как это можно решить? Любые подсказки будут приветствоваться.

Большое спасибо.

Edit: MATLAB Версия: 8.0.0.783 (R2012b) на OS X

+0

Почему это помечено для Ghostscript? Если Matlab использует Ghostscript для преобразования PostScript в PDF, то я, вероятно, могу рассказать вам, почему меш визуализируется путем изучения промежуточного PostScript, но мне нужно его увидеть. – KenS

ответ

0

Я решил эту проблему.

Для потомков:

Обойти это не указывать RGB цвета непосредственно, но определить их в цветовой карте, которая затем индексируются.

Следующий код будет решить эту проблему:

clear all; close all; 

% Make the bar plot 
h = bar([1 2 3 ; 3 2 1 ; 3 4 4]); 
ch = get(h,'children'); 

% Define the colors in a color map 
cMap = [1 0 0 ; 0 1 0; 0 0 1]; 
colormap(cMap); 

% Now set the FaceVertexCData by indexing into the colormap 
set(ch{1},'CDataMapping', 'direct', 'FaceVertexCData',[1 2 3]'); 
set(ch{2},'CDataMapping', 'direct', 'FaceVertexCData',[1 2 3]'); 
set(ch{3},'CDataMapping', 'direct', 'FaceVertexCData',[1 2 3]'); 

% Save out, this will produce vectorized PDF 
saveas(gcf, 'barplot_savefig_FaceVertexCData.pdf', 'pdf'); 
savefig('barplot_saveas_FaceVertexCData.pdf', 'pdf'); 

Следующая часть информации об этом актуальна:

«цветовые данные RGB еще не поддерживается в режиме Художника - вы увидите это как предупреждение, если вы попытаетесь экспортировать фигуру, содержащую объекты патчей, цвет лица или вершин которых указан как цвет RGB, а не индекс в цветовой палитре, используя средство рендеринга живописцев (средство рендеринга по умолчанию для векторного вывода). Эта проблема может возникнуть если вы используете pcolor, например. Это проблема с визуализатором матрасов MATLAB, что также влияет на pr INT; в настоящее время исправлений нет в export_fig (кроме экспорта в растровое изображение). Предлагаемое решение заключается в том, чтобы избежать окрашивания патчей с использованием RGB. Во-первых, попробуйте использовать цвета в цветовой гамме фигуры - при необходимости измените цветовую карту. Если вы используете pcolor, попробуйте использовать uimagesc (на обмен файлами) вместо этого.»

(https://sites.google.com/site/oliverwoodford/software/export_fig, доступ к 11 июня 2013).

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