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 7 Pro 64。

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 回答