3

我正在使用 Matlab 绘制一些地图,这些地图用于mapshow从 shapefile 绘制国家边界。然后我使用包将它们导出为 PDF 和 EPS 格式export_fig。这使用 Matlab 2014a 完全正常,但我刚刚升级到 Matlab 2014b 以利用其他改进的东西,现在我的国家边界都是锯齿状的。边框仅在文件的保存版本上看起来参差不齐。如果我放大图形窗口,轮廓不是那样的。

以下是重要的代码片段。这是一个自定义的 shapefile,所以我不知道如何将它放在这里以便人们可以复制它。

该位读取 shapefile 并绘制它。如果相关,显示类型是“多边形”,因此去掉了,'FaceColor'所以我可以看到我在下面绘制的内容(图像背景中的绿色位,使用 绘制pcolor)。

thaiborder=shaperead('Thailandborder');
mapshow(thaiborder,'FaceColor','none');

这就是我导出图形的方式。

export_fig test.eps -r600 -painters
export_fig test.pdf -r600 -painters

这是来自 Matlab 2014a 的带有平滑边框的版本: 2014a版

这与图像的大致相同区域,带有来自 Matlab 2014b 的锯齿状边框: 在此处输入图像描述

有谁知道为什么会出现这些差异?我希望边框与第一张图像中的一样,但我需要 Matlab 2014b 的“改进”功能来处理同一图像中的另一件事。我需要改变什么?

编辑添加:我一直在与的创建者联系,export_fig他认为这是由 Matlab 现在使用斜接而不是圆形连接引起的。显然我必须写信给 MathWorks 投诉。我没有将此作为答案,因为其他人可能能够为我提供解决方案。

4

2 回答 2

3

Matlab 承认这是已知的错误。对我来说,第一个修复工作。

以矢量格式导出时图形上的锯齿线问题是 MATLAB R2014b 中的一个已知错误。它与向量格式中使用的 linejoins 和meterlimits 的组合相关联。

要解决此问题,请使用附加的函数 fixeps 对 EPS 文件进行后期处理。您可以使用以下方法之一来调用此 fixeps 函数。

fixeps('input.eps','output.eps','LJ') % 将linejoins更改为round

fixeps('input.eps','output.eps','ML') % 将修正斜接限制

function fixeps(inname,outname,fixmode)
if nargin==2
    fixmode = 'LJ';
end
fi = fopen(inname,'r');
fo = fopen(outname,'w');
tline = fgets(fi);
while ischar(tline)
    if (strcmp(tline,['10.0 ML' 10])) % Replace 10.0 miterlimit
        switch (fixmode)
            case 'LJ'
                fwrite(fo,['1 LJ' 10]); % With round linejoin
            case 'ML'
                fwrite(fo,['2.5 ML' 10]); % With smaller miterlimit
        end
    else
        fwrite(fo,tline);
    end
    tline = fgets(fi);
end
fclose(fo);
fclose(fi);
于 2014-10-31T20:50:16.373 回答
0

我有一个类似的问题,我发现是由“MarkerSize”选项引起的。似乎在 2014b 版本中它继承了图形的单位。例如,如果我有一个以厘米为单位的数字并且我要求 ('MarkerSize', 10),则 10 将不会被解释为点(如 2014a 中),而是被解释为厘米。我通过将图形单位更改为 pt 来解决此问题。

于 2014-10-14T09:26:58.800 回答