Раскрашивание графика частично в Matlab

Я собираюсь изобразить параметр, называемый силой, в терминах частоты. мой график будет полулогическим графиком (я имею в виду, что в направлении «Y» он должен быть логарифмическим), но, как я знаю, сила отрицательна на некоторых частотах, поэтому на логарифмическом графике ее нельзя нарисовать. В общем, думаю, что я хочу, чтобы я хотел нарисовать полулогарифмическую силу и иметь отрицательные части также на графике другим цветом. полулогия(частота,абс(сила(2800,:))) Я не знаю, как изменить цвета отрицательных частей. Спасибо


person hossein.kh    schedule 28.11.2017    source источник


Ответы (2)


Я бы использовал логическое индексирование:

freq = 0:1000; % frequency vector
force = 10*rand(size(freq))-5; % some random data between -5 and +5
semilogy(freq(force>0),force(force>0),'b-',freq(force<0),abs(force(force<0)),'r-')

что дает следующий сюжет:

введите здесь описание изображения

person am304    schedule 28.11.2017
comment
но проблема здесь в том, что сила - это 2D-матрица, это означает, что мне нужно определить фазу силы для построения графика. под силой(2800,частота) я имел в виду, что рисуют силу по частоте в ее 2800-м фазовом угле. - person hossein.kh; 28.11.2017
comment
Вы не сказали, что force была 2D-матрицей в вашем вопросе - person am304; 28.11.2017
comment
так что у вас нет никаких предложений для 2D? - person hossein.kh; 07.12.2017
comment
Боюсь, я не совсем понимаю, что вы пытаетесь сделать. Если force — это двумерная матрица, то force(2800,:) — это вектор, который можно построить против frequency согласно моему ответу. Взгляните на Как создать минимальный, полный и проверяемый пример, чтобы узнать, как лучше всего задать вопрос и получить получить хороший ответ. - person am304; 08.12.2017

Этот ответ в основном такой же, как этот другой ответ, но с небольшим количеством деталей.

Возьмите следующий пример набора данных:

freq = linspace(0, 2*pi);
force = 1e6*sinc(freq);

force — это вектор, содержащий положительные и отрицательные значения, поэтому, если мы используем semilogy с этими данными мы получим логарифмический график только положительных значений (как вы упомянули):

>> semilogy(freq, force, 'b*');
Warning: Negative data ignored

полулогические только положительные значения

Если вы хотите построить абсолютное значение отрицательных значений, вы можете использовать логическое индексирование, чтобы найти индексы отрицательных значений следующим образом:

idx = force < 0;

Затем отобразите эти значения красным цветом на тех же осях:

hold on;
semilogy(freq(idx), abs(force(idx)), 'r*');

полулогия положительных и отрицательных значений

Вы также можете использовать этот синтаксис для получения того же результата:

semilogy(freq, force, 'b*', freq(idx), abs(force(idx)), 'r*');
person codeaviator    schedule 28.11.2017