Вы должны разделить ваши данные на 2 серии: для положительных и отрицательных значений y
.Тогда вы можете построить оба на одной фигуре.
Обратите внимание, что поскольку функция bar
использует относительную ширину полос, она зависит от минимального расстояния между значениями x
в ряду данных.Если эти числа различаются в двух рядах данных, необходимо откорректировать ширину полосы.
ipos = y>=0;
ineg = y<0;
dpos = min(diff(sort(x(ipos))));
dneg = min(diff(sort(x(ineg))));
w = 0.8;
bar(x(ipos),y(ipos),w);
hold on
bar(x(ineg), y(ineg), w*dpos/dneg, 'facecolor','r');
hold off
Если у вас более 2 значений на x
, вы можете использовать другой подход для удаленияуникальные значения через несколько итераций.В этом случае некоторые значения могут перекрываться, поэтому сначала выполните сортировку y
.
xx = x;
yy = y;
cla
hold on
w = 0.8;
while ~isempty(xx)
[xu, idx] = unique(xx);
yu = yy(idx);
xx(idx) = [];
yy(idx) = [];
d = min(diff(sort(xu)));
bar(xu,yu,w/d);
end
hold off
clear xx yy xu yu d