3

mapshowシェープファイルから国境をプロットするために使用するMatlab を使用して、いくつかのマップをプロットしています。export_fig次に、パッケージを使用して PDF と EPS 形式の両方にエクスポートします。これは、Matlab 2014a を使用して完全に正常に機能しましたが、Matlab 2014b にアップグレードして、改善された他の機能を利用したところ、国境がギザギザになりました。境界線は、保存されたバージョンのファイルでのみギザギザに見えます。Figure ウィンドウを拡大すると、アウトラインはそうではありません。

重要なコードのスニペットを次に示します。これはカスタム シェープファイルなので、複製できるようにここに配置する方法がわかりません。

このビットはシェープファイルを読み込んでプロットします。関連する場合、表示タイプは「ポリゴン」であるため、 を削除して、'FaceColor'下にプロットしているものを確認できます (画像の背景にある緑色のビット、 を使用してプロットpcolor)。

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

このビットは、図をエクスポートする方法です。

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

これは、Matlab 2014a の境界線が滑らかなバージョンです。 2014a バージョン

これは画像のほぼ同じ領域で、Matlab 2014b のギザギザの境界線があります。 ここに画像の説明を入力

なぜこれらの違いが生じているのか、誰にもわかりませんか?境界線を最初の画像のようにしたいのですが、同じ画像の別のものについては、Matlab 2014b の「改善された」機能が必要です。何を変更する必要がありますか?

追加する編集:私はの作成者と連絡を取り合っており、export_fig彼は、Matlabがラウンド結合ではなくマイトレッド結合を使用していることが原因であると考えています。どうやら私は文句を言うためにMathWorksに書かなければなりません。他の誰かが私に解決策を提供できるかもしれないので、私はこれを答えとして入れませんでした。

4

2 に答える 2

3

Matlab は、これが既知のバグであることを認めました。私にとっては、最初の修正が機能しました。

ベクトル形式でエクスポートする際の Figure のギザギザの線の問題は、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);
于 2014-10-31T20:50:16.373 に答える
0

「MarkerSize」オプションが原因であることがわかった同様の問題がありました。バージョン 2014b では図の単位を継承しているようです。たとえば、センチメートル単位の数値があり、('MarkerSize', 10) を要求すると、10 は (2014a のように) ポイントとしてではなく、cm として解釈されます。フィギュアの単位をptに変更することでこれを修正しました。

于 2014-10-14T09:26:58.800 に答える