使用Matlab 2014b的锯齿状轮廓

时间:2014-10-10 15:30:48

标签: matlab plot maps matlab-hg2

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

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

这个位读入shapefile并绘制它。显示类型是'polygon',如果它是相关的,那么摆脱'FaceColor'所以我可以看到我在下面绘制的内容(图像背景中的绿色位,使用pcolor绘制)

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

这一点是我输出数字的方式。

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

这是Matlab 2014a带有光滑边框的版本: 2014a version

这与图像的区域大致相同,来自Matlab 2014b的锯齿状边框: enter image description here

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

fixeps('input.eps','output.eps','ML')%将纠正miterlimit

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);

答案 1 :(得分:0)

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