手动设置';FaceVertexCData';MATLAB中一个补丁的实现

手动设置';FaceVertexCData';MATLAB中一个补丁的实现,matlab,pdf,plot,ghostscript,Matlab,Pdf,Plot,Ghostscript,在手动设置补丁颜色后,我在尝试生成矢量PDF绘图时遇到了一个问题 使用调用set(…)设置面片面的颜色和顶点以设置面片的“FaceVertexCData”属性后,“savefig”和“saveas”生成的PDF输出将被光栅化,不再采用矢量格式。如果“FaceVertexData”未更改,则不会发生这种情况 比如说, clear all; close all; h = bar([1 2 3 ; 3 2 1 ; 3 4 4]); saveas(gcf, 'barplot.pdf', 'pdf');

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

使用调用set(…)设置面片面的颜色和顶点以设置面片的“FaceVertexCData”属性后,“savefig”和“saveas”生成的PDF输出将被光栅化,不再采用矢量格式。如果“FaceVertexData”未更改,则不会发生这种情况

比如说,

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)

我已经解决了这个问题

为子孙后代:

解决方法是不直接指定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的painters渲染器的一个问题,也会影响打印;当前在导出图中没有可用的修复程序(导出为位图除外)。建议的解决方法是避免使用RGB为修补程序着色。首先,尝试在图形的颜色映射中使用颜色-如有必要,请更改颜色映射。如果您使用的是pcolor,请尝试使用uimagesc(在文件交换上)。”


(,于2013年6月11日访问)。

为什么将此标记为Ghostscript?如果Matlab使用Ghostscript将PostScript转换为PDF,那么我可以通过检查中间PostScript来告诉您为什么要渲染网格,但我需要查看它。