可能是一个太特殊的问题,但万一有人遇到类似的问题。
我正在使用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。
答案 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);