【问题标题】:Extracting data points from a plot on a finer scale从更精细的绘图中提取数据点
【发布时间】:2013-09-11 16:48:03
【问题描述】:

我想从我在 matlab 中绘制的图形中提取数据。因此,我做了以下事情:

f = openfig('spline.fig');
xdata = get(gco, 'xdata');
ydata = get(gco, 'ydata');

这确实分别给了我xy 的数据点,但每个点之间的步长为0.5例如 1、1.5、2、2.5... )。我希望获得比这更好的数据点(例如 1、1.1、1.2、1.3、1.4...),以及这些 x 坐标的相应 y 坐标。我该怎么做?

【问题讨论】:

  • 如果你想要更好的分数,我建议interpolation。对此有很多问题(例如 here)。
  • 嗯,最简单的方法是使用您想要的步骤生成图形。否则你将不得不插值。在这种情况下,请查看拉格朗日插值。
  • 谢谢Eitan,我去看看。
  • 我想问题是:在绘制数据时,xData/yData 是否等于 plot(x,y) 中的 x,y?好吧,我不知道这一点,也对答案感兴趣......
  • 嘿 Werner,你用我想要的步骤生成无花果是什么意思?

标签: matlab


【解决方案1】:

你获得ydata 的方式不适合我,我会使用:

open testfigure.fig 
D = get(gca, 'Children');
ydata = get(D, 'YData'); 

我获得的ydata 包含用于绘制图形的原始y 数据。

现在,如果您需要更精细的数据分辨率,则必须自己进行插值。 以下是如何将此ydata 插值到 0.1 分辨率的简短示例:

  1. 定义新的 x 值 xi 以找到 y 值

    xi = 0:0.1:10;
    
  2. 插值ydata 以在xi 处查找新的yi 值:

    yi = interp1(xdata, ydata, xi); %// Using the default "linear"
    

您应该阅读您想要使用的方法类型(例如nearest neighbourspline),这取决于您的数据和要求。

【讨论】:

  • 谢谢,Fraukje!你介意告诉我在哪里可以找到关于我的问题的插值信息吗?或者我应该怎么做?谢谢!
  • 我应该使用样条插值吗? matlab有这个吗?
  • 如果您对此不熟悉,我建议您查看 interp1 函数,请参阅 (mathworks.nl/help/matlab/ref/interp1.html) 并查看一些示例
  • 这个可以处理样条插值,也可以使用函数spline
  • @EitanT 非常感谢。我只是在回答问题,所以我对你们的 cmets 真的很满意!
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多