【问题标题】:Jagged outline using Matlab 2014b使用 Matlab 2014b 的锯齿状轮廓
【发布时间】:2014-12-05 19:56:32
【问题描述】:

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

这里是重要的代码的 sn-ps。这是一个自定义的 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 的带有平滑边框的版本:

这与图像的大致相同区域,带有来自 Matlab 2014b 的锯齿状边框:

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

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

【问题讨论】:

  • 我在使用 Matlab 2014b / Yosemite 创建地图的 EPS 或 PDF 时遇到了类似的问题。 2014b 中的矢量输出似乎存在几个问题,包括我在另一个线程中看到的乳胶符号:mathworks.com/matlabcentral/answers/…。希望 MathWorks 尽快修复这些问题。这真的很麻痹,因为 Yosemite 无法运行旧版本的 Matlab。
  • 我觉得低版本更好看

标签: matlab plot maps matlab-hg2


【解决方案1】:

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

【讨论】:

  • 谢谢。我会在星期一回到办公室时尝试一下。
【解决方案2】:

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

【讨论】:

  • 我不认为这是问题所在,因为我没有使用标记。实际上,问题似乎出在export_fig 上,因为该图形在 Matlab 图形窗口中很好,但在导出时却没有。 export_fig 的创建者实际上已经为我研究过了,他认为这是因为 Matlab 现在使用的是斜接而不是圆形连接。他无法修复它:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
相关资源
最近更新 更多