在MATLAB中如何在保持轴为矢量图形的同时光栅化曲面图?

thigvfpy  于 2023-01-09  发布在  Matlab
关注(0)|答案(1)|浏览(188)

我正在MATLAB中制作一个3D曲面图,我想将曲面图光栅化(以保存图像大小和加载速度),同时将图形的其余部分(例如轴、标签、标题等)保留为矢量图形。我该如何做呢?现在我有以下内容:

x = linspace(-2, 2, 201);
y = linspace(-2, 2, 201);
[X, Y] = meshgrid(x, y);
Z = sin(sqrt(X.^2 + Y.^2));

fig = figure;

colormap parula
surf(X, Y, Z, 'FaceColor', 'interp', 'EdgeColor', 'none', 'FaceLighting', 'gouraud')
daspect([4 4 1])
axis tight
view(-50, 30)
camlight left

exportgraphics(fig, 'test_matlab_02.pdf', 'ContentType', 'vector')

如果我将ContentType设置为vector,则整个图形为矢量图形。如果我将ContentType设置为image,则整个图形变为栅格化。如何为图形中的其余要素绘制带有矢量图形的栅格化曲面图?

envsm3lx

envsm3lx1#

文件交换提供vecrast,在这种情况下可能会工作。它应该能够合并光栅和矢量格式。
vecrast函数的描述中可以看出:
vecrast是一个允许自动保存具有矢量和光栅混合内容的图形的功能。更具体地说,创建感兴趣的图形的两个副本,光栅图形和矢量图形。面片、表面、轮廓、图像和灯光保留在rasterFigure中,但从vectorFigure中删除。rasterFigure然后保存为具有所需分辨率的临时.png图像。png文件随后插入到vectorFigure中,结果保存在单个矢量文件中。
该函数能够处理2D和3D图,如注解中所述:

  • 光栅图形的图形平滑(抗锯齿)被关闭。这将提高图像边界的清晰度,同时大大减小文件大小。您可以通过设置'GraphicsSmoothing','on'(第97行)在脚本中更改此选项。
  • 建议使用不低于300 dpi的分辨率。这可以确保在光栅图像边缘进行插值不会导致图像溢出指定轴(在第一个示例中使用20dpi进行测试,您将明白我的意思)。
  • 引入堆叠选项是为了适应2D和3D绘图,这两种绘图分别要求图像在轴的后面或前面。这种差异可以在下面的示例中看到。
  • 我强烈建议看一下tightPlots函数,它允许设置图形的精确大小。

相关问题