在MATLAB中手动设置补丁的“FaceVertexCData”后,栅格化PDF输出

时间:2013-06-11 14:54:58

标签: matlab pdf plot ghostscript

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

使用set(...)调用设置补丁面和顶点的颜色以设置补丁的“ FaceVertexCData ”属性后,“savefig”和“savefig”生成的PDF输出'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');

问题的原因是什么?怎么解决这个问题?任何提示都将受到欢迎。

非常感谢。

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

1 个答案:

答案 0 :(得分: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颜色的补丁对象的图形而不是索引,则会将此视为警告colormap,使用painters渲染器(矢量输出的默认渲染器)。例如,如果你使用pcolor会出现这个问题。这是MATLAB的painters渲染器的一个问题,它也影响打印; export_fig目前没有可用的修复(除了导出到位图之外)。建议的解决方法是避免使用RGB着色补丁。首先,尝试使用图的颜色图中的颜色 - 如果需要,更改颜色图。如果您使用的是pcolor,请尝试使用uimagesc(在文件交换)代替。“

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