使用Matlab2014b的锯齿形轮廓

使用Matlab2014b的锯齿形轮廓,matlab,plot,maps,matlab-hg2,Matlab,Plot,Maps,Matlab Hg2,我正在使用Matlab绘制一些地图,这些地图使用mapshow从形状文件绘制国家边界。然后我使用export\u fig包将它们导出为PDF和EPS格式。使用Matlab2014a,这一切都很好,但我刚刚升级到Matlab2014b,以利用其他改进的功能,现在我的国家边界都是参差不齐的。边框仅在保存的文件版本上看起来是锯齿状的。如果我放大“体形”窗口,轮廓就不是这样了 下面是一些重要的代码片段。这是一个自定义的shapefile,所以我不知道如何将它放在这里,以便人们可以复制它 此位读入shap

我正在使用Matlab绘制一些地图,这些地图使用
mapshow
从形状文件绘制国家边界。然后我使用
export\u fig
包将它们导出为PDF和EPS格式。使用Matlab2014a,这一切都很好,但我刚刚升级到Matlab2014b,以利用其他改进的功能,现在我的国家边界都是参差不齐的。边框仅在保存的文件版本上看起来是锯齿状的。如果我放大“体形”窗口,轮廓就不是这样了

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

此位读入shapefile并打印它。如果相关,则显示类型为“polygon”,因此去掉了
“FaceColor”
,这样我就可以看到下面正在打印的内容(图像背景中的绿色位,使用
pcolor
打印)

这是我导出数字的方式

export_fig test.eps -r600 -painters
export_fig test.pdf -r600 -painters
这是Matlab 2014a中具有平滑边框的版本:

这与图像大致相同,具有Matlab 2014b中的锯齿状边框:

有人知道为什么会出现这些差异吗?我希望边框与第一幅图像中的边框相同,但我需要Matlab 2014b的“改进”功能来处理同一幅图像中的其他内容。我需要改变什么


编辑添加:我一直与
export\u fig
的创建者联系,他认为这是由于Matlab现在使用斜接而不是圆接造成的。显然我得写信给MathWorks投诉。我没有将此作为答案,因为其他人可能能够为我提供解决方案。

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

Matlab承认这是已知的错误。对我来说,第一次修复是有效的

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

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

fixeps('input.eps'、'output.eps'、'LJ')%将线条连接更改为圆形

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

可能相关:我在使用Matlab2014b/Yosemite创建地图的EPS或PDF时遇到类似问题。2014b中的向量输出似乎存在一些问题,包括我在另一个线程中看到的latex符号:。希望MathWorks能尽快解决这些问题。这真的让人瘫痪,因为约塞米蒂不能运行旧版本的Matlab。我认为较低版本看起来很漂亮。我不认为这是问题所在,因为我没有使用标记。实际上,问题似乎出在
export_fig
上,因为该图形在Matlab figure窗口中很好,但在导出时却不是这样。
export\u fig
的创建者实际上为我研究了它,他认为这是因为Matlab现在使用斜接而不是圆连接。他修不好:(谢谢。我星期一回到办公室后会试试这个。
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);