这并不是一个BUG,而是MATLAB底层图形渲染机制的一个已知特性(或者说是限制)。
简单来说,MATLAB有两种主要的渲染器:
问题原因: 当你在图中使用了复杂的文本格式(如LaTeX解释器生成的上下标、希腊字母)或者透明度(Transparency/Alpha),MATLAB的 Painters 渲染器可能无法完美将其转换为标准的PostScript/Vector指令。为了保证“所见即所得”,MATLAB会自动**回退(Fallback)**到 OpenGL 渲染器,这就导致原本应该是矢量的PDF或SVG被强行嵌入了一张高分辨率的位图。
解决方案1:
如果只需要PDF,且版本大于Matlab 2020
% 假设你的图句柄是 fig
fig = gcf;
% 导出为 PDF (强制矢量)
exportgraphics(fig, 'MyFigure.pdf', 'ContentType', 'vector');如果需要SVG,则先导出PDF,再通过Adobe Illustrator转为SVG。
解决方案2:
删除可能会导致图片变复杂的内容。如取消上下标,取消科学记数法。
下面这种网上能搜到的解决方案无效:
print(gcf, 'filePath2CIGD.svg', '-dsvg', '-painters');