Попросите построить прямоугольный импульс с контролируемым нарастанием / спадом

Я хотел бы построить серию прямоугольных импульсов для ввода векторных данных. Профиль графика создаст нарастающий фронт импульса для положительного числа и создаст спадающий фронт для отрицательного числа. Сюжет должен выделяться цветом для каждого представленного номера.

Например, если векторный вход X равен [1 -1 2 -2 3 4 1 -4 -1 -3] Амплитуда данных "1" равна 5, Амплитуда данных "2" равна 4, Амплитуда данных "3" равна 3 и амплитуда данных '4' равна 2

Итак, вход X получил индекс от t(1) до t(10). Вывод графика или диаграммы должен выглядеть как вставленное изображение

Как бы я мог написать код MATLAB для этой работы?

Спасибо. B.Bundit

1 ответ

Сюжет очень маленький, но я думаю, что вы хотите что-то вроде bar в матлаб. Документация здесь. Если у вас есть вектор, который вы измените, то вы можете создать вектор значений для построения графика, используя cumsum,

X=[1 -1 2 -2 3 4 1 -4 -1 -3];
Xplot=cumsum([5,X(2:end)]); % //so 5 will be your initial value

Поскольку приведенный выше график имеет разную ширину столбцов, вам также понадобится вектор центра каждой точки данных и ширина каждой точки данных.

means= [1 2 3 4 5 6 7 8 9 10];
widths=[1 1 1 1 1 1 1 2 1 1];

Для разных цветовых графиков вы можете сделать:

colors=['r','g','k','b','c','m','y','r','g','k'];
for i=1:length(X)
    h=bar(means(i),Xplot(i),widths(i));
    if i==1, hold on; end
    set(h,'FaceColor',colors(i));
end
% //This will label each bar, or you could define your axes before the loop
set(gca,'XTickLabel',means);

Вы можете изучить другие свойства, чтобы установить здесь. Класс Barseries не имеет FaceAlpha собственности, поэтому я не уверен, что вы можете сделать их прозрачными. Однако вы можете установить FaceColor никому и иметь EdgeColor быть выбранным по вашему выбору. Обратите внимание, что цвет ребер задается триплетом RGB, а не буквенным кодом.

Возможно, вам также придется прибегнуть к данным по ширине, чтобы самые широкие столбцы отображались в последнюю очередь и, таким образом, находились сверху. Это будет выглядеть так:

[widths_sorted,sort_idx]=sort(widths,'ascending');
Xplot_sorted=Xplot(sorted_idx);
means_sorted=means(sorted_idx);
Другие вопросы по тегам