【问题标题】:How I can get specific values from Matlab Figure如何从 Matlab Figure 获取特定值
【发布时间】:2014-07-31 11:57:33
【问题描述】:

我想从 Matlab Figure 中获取一些特定值。值的数量可以是 3、5、10、50 或任何 N 个整数。就像在示例图片中一样,

我想以例如 A=(430,0.56) 的形式获取 A、B、C 的值。

A,B,C 不是 Plot 的一部分。我只是在 Photoshop 中写了它们,以帮助澄清问题。

注意:每次执行代码时,输​​入值可能不同。

输入值(Graph Values)的长度也可以随时变化。

【问题讨论】:

  • 那些点(A、B、C)等是什么?它们实际上是作为一个单独的系列绘制的吗?如果图表上尚未标记,请查看 ginput 函数
  • A,B,C 或不是 Plot 的一部分。我只是在 Photoshop 中编写它们以了解问题。

标签: matlab plot matlab-figure


【解决方案1】:

先打开图,然后用with获取线的x和y坐标

line = get(gca, 'Children');   % Get the line object in the current axis of the figure.
x = get(line, 'XData');   % Get the abscissas.
y = get(line, 'YData');   % Get the ordinates.

要在横坐标大于或等于xi的点处获得值yi,您可以这样写

id = find(x>=xi, 1, 'first');   % On the opposite try find(x<=xi, 1, 'last');
yi = y(id);

或者你可以做一个线性插值

yi = interp1(x, y, xi);

要提取横坐标x1x2 之间的值,您可以遵循这两种策略。第一个你可以写

ids = find(x>=x1 & x<=x2);
xReduced = x(ids);   % A subset of x.
yReduced = y(ids);   % A subset of y.

第一行将x1 之后的点集与x2 之前的点集相交,并返回索引。如果您选择插值,则可以构建一组新的点,并在该集合上进行插值。

xReduced = x1:step:x2;   % As an alternative you can use linspace(x1, x2, nPoints);
yReduced = interp1(x, y, xReduced);

【讨论】:

  • 如果我想从 A 点到 B 点取值范围怎么办?
  • 但是你没有解释代码。比如什么是“xi”?
  • 对不起,我认为代码是不言自明的。我添加了一些 cmets。
【解决方案2】:
hc=get(gca,'children');
data=get(hc,{'xdata','ydata'});
t=data{1};
y=data{2};
tA=250;tB=1000; %tA is starting Point and tB is the last point of data as ur figure
yinterval=y(t>=tA & t<=tB);
display(yinterval);

试试这个代码,它对我有用代码是根据时间和 Y 数字。

【讨论】:

  • 一些解释会改善这个答案。
【解决方案3】:

如果你有一个图表并且你只想找出图表上任意点的值,你可以使用ginput 函数,或者到目前为止最简单的解决方案是使用 interactive data cursor 内置在图形窗口中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多