2012-04-15 26 views
4

可能是一個太特殊的問題,但以防萬一有人遇到類似的問題。MATLAB:如何不導出繪圖軸以外的數據到SVG

我使用plot2svg從Matlab到Inkscape的繪圖。它工作正常,除了一個非常惱人的問題。如果我想僅顯示曲線的縮放部分,則plot2svg「捕捉」整個曲線,然後剪切它。因此,SVG文件比它大得多,有時Inkscape甚至會在複雜的曲線上崩潰。

在導出SVG之前,有一些方法可以刪除軸外的數據。我試過刷牙(去除unbrushed),但隨後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 10 - 11月,2010年,Win 7的臨64

+0

如果你有一個crashy文檔,它是有效的SVG,你會將它提交給Inkscape團隊嗎?我認爲他們會歡迎任何機會來提高他們的加載彈性。 – halfer 2012-04-16 13:48:09

+0

我已經做了一段時間:https://bugs.launchpad.net/inkscape/+bug/888559。不幸的是,它仍然沒有修復。此外,我使用Inkscape將圖紙導出爲PDF + TeX的功能。此出口需要大量的多段線。 – texnic 2012-04-17 07:02:23

+0

啊謝謝,你已經完成了你的一切! ':)' – halfer 2012-04-17 12:14:12

回答

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

謝謝。我相信這是最好的選擇,直到plot2svg中的錯誤得到糾正。然而一個建議。上述算法去除可見區域外的所有數據點。你應該在每個方向上保持一個點,讓曲線到達邊界。與此同時,我已經做了或多或少的和解決方法相同的事情:因爲我的數據被繪製在一個單獨的函數中(它是多條曲線,而不僅僅是一條曲線),我只是將感興趣的區域傳遞給它,將會看到的東西。 – texnic 2012-04-23 19:15:39