1

我正在处理来自井的数据,有时该工具不会接收到任何信号,并且该间隔将为空白 = NaN。我想在这条线的区域下阴影,但不在没有数据的部分。

例如:x=[1 2 3 NaN NaN 6 7] y=[5 6 6.5 NaN NaN 6 8]

不需要从数据中删除 NaN。我尝试使用填充和区域,但不起作用任何想法?

4

2 回答 2

0

我不知道使用 NaN 绘制面积图的内在 MATLAB 函数,但您可以遍历“好”值的每个部分并分别绘制它们,如下所示:

function testShade()

x=[1 2 3 NaN NaN 6 7]
y=[5 6 6.5 NaN NaN 6 8]

figure(89);
clf;
plot(x,y, '-rx', 'linewidth', 3);
hold on;
areaWithNaN(x,y);

function areaWithNaN(x,y)

badValues = isnan(x);

while(~isempty(badValues))

    ind = find(badValues, 1, 'last');

    % if we didn't find anything then plot everything that remains:
    if isempty(ind)
        ind = 0;
    end

    % If there are multiple bad values in a row then trim them off. This
    % could be slow and optimized later:
    if ind == length(badValues)
        badValues= badValues(1:end-1);
        continue;
    end

    area(x(ind+1:length(badValues)), y(ind+1:length(badValues)));

    % remove the bad values we no longer care about:
    badValues= badValues(1:ind-1);

end
于 2013-10-02T18:19:38.423 回答
0

任何插值函数都将填补缺失的点。示例:给定数据集:

x=1:5;
y=[11 12 NaN 15 30 NaN];

创建一个没有 Nan 的数据集;

x1=x;
y1=y;
x1(isnan(y))=[];
y1(isnan(x))=[];

使用插值

yNew=interp1(x1,y1,x);

这是最简单的插值,用户类型可以在interp1函数的帮助部分找到

于 2013-10-02T19:13:44.437 回答