MATLAB:如何不将绘图轴外的数据导出到SVG

时间:2012-04-15 20:27:34

标签: matlab svg plot export inkscape

可能是一个太特殊的问题,但万一有人遇到类似的问题。

我正在使用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 64bit,plot2svg 2010年11月10日,Win 7 Pro 64。

1 个答案:

答案 0 :(得分: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);