4

おそらくあまりにも特別な質問ですが、誰かが同様の問題に直面した場合に備えて。

私はplot2svgを使用して、MatlabからInkscapeへのプロットを取得しています。かなり厄介な問題を除いて、問題なく動作します。曲線のズーム部分だけを表示したい場合は、plot2svgが曲線全体を「キャプチャ」してからクリップします。その結果、SVGファイルはそれよりもはるかに大きくなり、Inkscapeが複雑な曲線でクラッシュすることさえあります。

SVGをエクスポートする前に、軸の外側のデータを削除する方法が役立ちます。ブラッシング(ブラッシングされていないものを削除)を試しましたが、plot2svgが失敗します:

Attempted to access parts(1); index out of bounds because numel(parts)=0.

Error in plot2svg>line2svg (line 2237)
    if parts(1)~=1

Error in plot2svg>axchild2svg (line 1365)
    line2svg(fid,groupax,axpos,x,y,scolorname,linestyle,linewidth)

Error in plot2svg>axes2svg (line 1042)
group = axchild2svg(fid,id,axIdString,ax,group,paperpos,axchild,axpos,groupax,projection,boundingBoxAxes);

Error in plot2svg (line 221)
    group=axes2svg(fid,id,ax(j),group,paperpos);

誰かが解決策を提案できますか?MatlabでEPSまたはPDFエクスポートを使用することは避けたいと思います。これは、それらの品質がplot2svgよりもはるかに悪いためです。

Matlab 2011b 64ビット、plot2svg 2010年11月10日、Win 7Pro64。

4

1 に答える 1

0

(ズームインされた)軸の外側にある曲線のすべての値は、NaNに設定する必要があります。Matlabはこれらのポイントを描画しないため、plot2svgはそれらをエクスポートしません。ただし、これにはズーム後に曲線を再描画することが含まれます。

曲線をプロットするときは、必ず曲線のハンドルを保存してください。

figure(1)  
h = plot(yourXdata, yourYdata);

次に、関心のある領域を拡大し、その後、次のコードを実行します。

figure(1)
hold on  
myXlim = xlim;  
myYlim = ylim;  

% crop your data  
yourXdata(yourXdata < myXlim(1)) = NaN;  
yourXdata(yourXdata > myXlim(2)) = NaN;  

yourYdata(yourYdata < myYlim(1)) = NaN;  
yourYdata(yourYdata > myYlim(2)) = NaN;  

% delete old curve and draw the new one  
delete(h);
plot(yourXdata, yourYdata);
于 2012-04-23T14:45:44.293 に答える