我正在使用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带有光滑边框的版本:
这与图像的区域大致相同,来自Matlab 2014b的锯齿状边框:
有谁知道为什么会出现这些差异?我希望边框与第一张图像中的边框相似,但我需要Matlab 2014b的“改进”功能,以便在同一图像中显示另一件事。我需要改变什么?
编辑添加:我一直与export_fig
的创建者保持联系,他认为这是由Matlab引起的,现在使用的是减少连接而不是圆形连接。显然我必须写信给MathWorks抱怨。我没有把这个作为答案,因为其他人可能能够为我提供解决方案。
答案 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来修复此问题。