1

在手动设置色块颜色后,我在尝试生成矢量 PDF 图时遇到了问题。

使用调用 set(...) 设置补丁的“ FaceVertexCData ”属性设置补丁面和顶点的颜色后,“savefig”和“saveas”生成的 PDF 输出将被光栅化,不再以矢量形式显示格式。如果不更改“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');

问题的原因是什么?如何解决?欢迎任何提示。

非常感谢。

编辑:MATLAB 版本:OS X 上的 8.0.0.783 (R2012b)

4

1 回答 1

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');

以下有关此的信息是相关的:

“Painter 模式尚不支持 RGB 颜色数据 - 如果您尝试导出包含面或顶点颜色指定为 RGB 颜色而不是颜色映射索引的补丁对象的图形,您将看到此警告,使用画家渲染器(矢量输出的默认渲染器)。例如,如果您使用 pcolor,可能会出现此问题。这是 MATLAB 的画家渲染器的问题,它也会影响打印;目前 export_fig 中没有可用的修复程序(除了导出到位图)。建议的解决方法是避免使用 RGB 着色补丁。首先,尝试在图形的颜色图中使用颜色 - 如有必要,更改颜色图。如果您使用 pcolor,请尝试使用 uimagesc(在文件交换中)反而。”

https://sites.google.com/site/oliverwoodford/software/export_fig,2013年 6 月 11 日访问)。

于 2013-06-12T08:26:26.850 回答