2014-10-10 89 views
3

我使用Matlab繪製了一些使用mapshow來從shapefile繪製國家邊界的地圖。然後使用export_fig軟件包將它們導出爲PDF和EPS格式。這使用Matlab 2014a完全正常,但我已經升級到Matlab 2014b以利用其他改進了的其他功能,現在我的國家邊界都是鋸齒狀的。該邊框僅在文件的保存版本上顯示爲鋸齒狀。如果我放大數字窗口,大綱不是那樣的。使用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 version

這是大致的圖像在同一地區,與Matlab的2014B的鋸齒狀邊界: enter image description here

不誰知道爲什麼這些差異正在發生?我希望邊界像第一個圖像一樣,但我需要Matlab 2014b的「改進」功能來處理同一圖像中的其他內容。我需要改變什麼?

修改添加:我一直在與export_fig的創建者聯繫,他認爲它是由Matlab現在使用斜角連接而不是圓形連接造成的。顯然我必須寫信給MathWorks來投訴。我沒有把這個作爲答案,因爲其他人可能能夠爲我提供一個解決方案。

+0

可能相關:http:// stackoverflow。com/q/24204762/2586922 – 2014-10-10 15:39:17

+0

我有一個類似的問題,用Matlab 2014b/Yosemite創建EPS或PDF地圖。看起來在2014b中有幾個向量輸出的問題,包括乳膠符號,就像我在另一個線程中看到的那樣:http://www.mathworks.com/matlabcentral/answers/157888-font-problems-when-exporting-as-eps 。希望MathWorks儘快解決這些問題。這真是癱瘓,因爲優勝美地不能運行老版本的Matlab。 – Nate 2014-10-18 16:36:11

+0

我認爲較低版本看起來更漂亮 – 2014-11-02 20:45:21

回答

0

我有一個類似的問題,我發現是由'MarkerSize'選項造成的。看來在版本2014b它繼承了圖的單位。例如,如果我有一個以釐米爲單位的數字,並且我要求('MarkerSize',10),則10不會被解釋爲點(如2014a),而會被解釋爲cm。我通過將圖形單位更改爲點來解決此問題。

+0

我不認爲這是問題,因爲我沒有使用標記。實際上,問題似乎與'export_fig'有關,因爲在Matlab圖形窗口中數字很好,但是在導出時沒有。 'export_fig'的創建者實際上已經對我進行了研究,他認爲這是因爲Matlab現在使用斜線而不是圓形連接。他無法修復:( – emmalgale 2014-10-14 12:30:42

3

Matlab確認這是已知的錯誤。對我來說,第一個修復工作。

以矢量格式輸出時鋸齒狀圖形的問題是MATLAB R2014b中的一個已知錯誤。它與矢量格式中使用的linejoins和meterlimits的組合相關聯。

要解決此問題,請使用附加的功能fixeps來後處理EPS文件。 您可以使用以下方法之一調用此fixeps函數。

fixeps( 'input.eps', 'output.eps', 'LJ')%將更改linejoins圓

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

)謝謝,週一我回到辦公室時我會試試這個。 – emmalgale 2014-11-01 09:59:22