Я собираюсь изобразить параметр, называемый силой, в терминах частоты. мой график будет полулогическим графиком (я имею в виду, что в направлении «Y» он должен быть логарифмическим), но, как я знаю, сила отрицательна на некоторых частотах, поэтому на логарифмическом графике ее нельзя нарисовать. В общем, думаю, что я хочу, чтобы я хотел нарисовать полулогарифмическую силу и иметь отрицательные части также на графике другим цветом. полулогия(частота,абс(сила(2800,:))) Я не знаю, как изменить цвета отрицательных частей. Спасибо
Раскрашивание графика частично в Matlab
Ответы (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
но проблема здесь в том, что сила - это 2D-матрица, это означает, что мне нужно определить фазу силы для построения графика. под силой(2800,частота) я имел в виду, что рисуют силу по частоте в ее 2800-м фазовом угле.
- person hossein.kh; 28.11.2017
Вы не сказали, что
force
была 2D-матрицей в вашем вопросе
- person am304; 28.11.2017
так что у вас нет никаких предложений для 2D?
- person hossein.kh; 07.12.2017
Боюсь, я не совсем понимаю, что вы пытаетесь сделать. Если
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