Matlab 曲面图另存为真实矢量图形
Matlab surface plot save as true vector grafic
目标:
我正在尝试将 Matlab 曲面图导出为 .eps
矢量图形文件并将其包含在 LaTex 文档中。在同一个 LaTex 文档中使用它们将普通图导出为 .eps
效果非常好,并且在使用 Adobe Reader.
编译查看文档后它们显然仍然是矢量图形
示例:
命令 peaks
可用于创建如下所示的曲面图(导出为 .png
。是的,与导出为 [=10= 相比,这严重导致压缩伪影明显减少] 文件 ).
问题:
如果我将上面的示例图导出为 .eps
文件,编译我的 LaTex 文档,然后使用 Adobe Reader 查看它,该图显示丑陋的像素图形,如压缩伪像,请参阅下面的屏幕截图(在 Adobe Reader 中放大)。
这个问题实际上非常严重,即使不放大我的 4K 屏幕,压缩伪影也很明显。
我怀疑 Matlab 将图像嵌入到 .eps
文件中(如果可能的话)。
将图形导出为 .svg
会生成具有较少压缩伪影的像素图形(它也绝对不是矢量图形)。
问题:
如何强制 Matlab 将曲面图导出为真正的矢量图形?
你应该把图的'Renderer'
属性设为'painters'
:
peaks
set(gcf, 'Renderer', 'painters')
print(gcf, '-depsc', 'test.eps')
或直接将其作为输入参数提供给打印:
print(gcf, '-depsc', 'test.eps', '-painters')
这将生成真正的矢量图形。但是,我建议将图形导出为 pdf,因为我相信 latex 无论如何都会将 eps 转换为 pdf。
如果您使用 -dpdf
驱动程序调用 print
,Matlab 会将图形打印在一张大纸上。要将纸张裁剪为您的图形大小,您可以使用以下功能:
function saveFigPdf(fig, filename, figsize, resolution)
% saveFigPdf(fig, filename, figsize, resolution)
% figsize = [width height]
if ~exist('figsize', 'var') || isempty(figsize)
figsize = [8, 5];
end
if ~exist('resolution', 'var') || isempty(resolution)
resolution = '-r300';
end
% set paper settings
fig.PaperUnits = 'centimeters';
fig.PaperPositionMode = 'manual';
fig.PaperSize = figsize;
fig.PaperPosition = [0, 0, figsize(1), figsize(2)];
fig.Renderer = 'painters';
% print to pdf
print(fig, '-dpdf', filename, resolution);
end
目标:
我正在尝试将 Matlab 曲面图导出为 .eps
矢量图形文件并将其包含在 LaTex 文档中。在同一个 LaTex 文档中使用它们将普通图导出为 .eps
效果非常好,并且在使用 Adobe Reader.
示例:
命令 peaks
可用于创建如下所示的曲面图(导出为 .png
。是的,与导出为 [=10= 相比,这严重导致压缩伪影明显减少] 文件 ).
问题:
如果我将上面的示例图导出为 .eps
文件,编译我的 LaTex 文档,然后使用 Adobe Reader 查看它,该图显示丑陋的像素图形,如压缩伪像,请参阅下面的屏幕截图(在 Adobe Reader 中放大)。
这个问题实际上非常严重,即使不放大我的 4K 屏幕,压缩伪影也很明显。
我怀疑 Matlab 将图像嵌入到 .eps
文件中(如果可能的话)。
将图形导出为 .svg
会生成具有较少压缩伪影的像素图形(它也绝对不是矢量图形)。
问题:
如何强制 Matlab 将曲面图导出为真正的矢量图形?
你应该把图的'Renderer'
属性设为'painters'
:
peaks
set(gcf, 'Renderer', 'painters')
print(gcf, '-depsc', 'test.eps')
或直接将其作为输入参数提供给打印:
print(gcf, '-depsc', 'test.eps', '-painters')
这将生成真正的矢量图形。但是,我建议将图形导出为 pdf,因为我相信 latex 无论如何都会将 eps 转换为 pdf。
如果您使用 -dpdf
驱动程序调用 print
,Matlab 会将图形打印在一张大纸上。要将纸张裁剪为您的图形大小,您可以使用以下功能:
function saveFigPdf(fig, filename, figsize, resolution)
% saveFigPdf(fig, filename, figsize, resolution)
% figsize = [width height]
if ~exist('figsize', 'var') || isempty(figsize)
figsize = [8, 5];
end
if ~exist('resolution', 'var') || isempty(resolution)
resolution = '-r300';
end
% set paper settings
fig.PaperUnits = 'centimeters';
fig.PaperPositionMode = 'manual';
fig.PaperSize = figsize;
fig.PaperPosition = [0, 0, figsize(1), figsize(2)];
fig.Renderer = 'painters';
% print to pdf
print(fig, '-dpdf', filename, resolution);
end