【问题标题】:MATLAB: How to NOT export data outside plot axis to SVGMATLAB:如何不将绘图轴外的数据导出到 SVG
【发布时间】:2012-04-15 20:27:33
【问题描述】:

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

我正在使用 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。

【问题讨论】:

  • 如果你有一个崩溃的文档,而且它是有效的 SVG,你会把它提交给 Inkscape 团队吗?我认为他们会欢迎任何机会来提高他们的负载弹性。
  • 我之前已经做过了:bugs.launchpad.net/inkscape/+bug/888559。不幸的是,它仍然没有修复。此外,我正在使用 Inkscape 将绘图导出为 PDF+TeX 的功能。对于大型多段线,此导出需要大量时间。
  • 啊,谢谢,你已经尽力了! :)

标签: matlab svg plot export inkscape


【解决方案1】:

位于(放大)轴之外的曲线的所有值都应设置为 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);

【讨论】:

  • 谢谢。我相信在 plot2svg 中的错误得到纠正之前,这是最好的选择。然而,一个建议。上述算法移除了可见区域之外的所有数据点。您应该在每个方向上保留一个点,以便曲线到达边界。与此同时,我做了或多或少与解决方法相同的事情:因为我的数据被绘制在一个单独的函数中(它是许多曲线,而不仅仅是一条),我只是将感兴趣的区域传递给它,它只绘制可见的东西。
猜你喜欢
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2019-04-26
  • 2018-10-25
  • 1970-01-01
相关资源
最近更新 更多