Два временных ряда и затенение между ними ... MATLAB - PullRequest
2 голосов
/ 08 сентября 2011

Я использую MATLAB для построения двух линий временного ряда ... (линия минимума и максимума)

У меня есть точки, сходящиеся в одной точке в конце данных.

Я пытаюсь заполнить область между линиями, а затем нанести другие линии поверх затененной области.

Вот моя проблема:

Когда я использую «заливку», он делает именно то, что я хочу… но рисует линию от последней точки данных до начальной точки данных. Как мне от этого избавиться?

Вот очень расплывчатый набросок моих 2 примеров:

image

image2

Линия под графиком - это то, о чем я говорю ...

Есть идеи, как этого избежать?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Я предполагаю, что вы создаете заливку с

fill([xData1;xData2],[yData1;yData2])

где xData1 - массив данных x-1 для вашей первой кривой. Это приведет к появлению многоугольника странной формы, поскольку «углы» многоугольника не упорядочены должным образом.

Вместо этого вы должны сделать

fill([xData1;xData2(end:-1:1)],[yData1;yData2(end:-1:1])

т.е. переверните порядок одного из двух наборов данных.

3 голосов
/ 08 сентября 2011

Как объяснил @Jonas (победите меня), вам нужно правильно упорядочить данные двух временных рядов.Позвольте мне добавить пример к этому:

%# first series
x1 = linspace(pi/4, 5*pi/4, 100);
y1 = cos(x1);

%# second series
x2 = linspace(pi/4, 5*pi/4, 100);
y2 = sin(x2);

subplot(121), fill([x1 x2], [y1 y2], 'r')
subplot(122), fill([x1 fliplr(x2)], [y1 fliplr(y2)], 'r')
hold on
plot(x1,y1, 'Color','b', 'LineWidth',3)
plot(x2,y2, 'Color','g', 'LineWidth',3)

enter image description here

...