在 Matlab 中部分着色绘图

Coloring a plot partially in Matlab

我将根据频率绘制一个称为力的参数。 我的图将是一个半逻辑图(我的意思是在 "Y" 方向上它应该是对数的)但是据我所知力在某些频率下是负的所以在对数图中它不能被绘制。 总而言之,我想要的是我想绘制半对数力,并在图形中以不同的颜色绘制负数部分。 半学(频率,abs(力(2800,:))) 我不知道如何更改负片的颜色。 谢谢

我会用 logical indexing:

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-')

给出了以下情节:

这个答案与基本相同,但更详细一些。

采用以下示例数据集:

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

force 是一个包含正值和负值的向量,因此,如果我们对这些数据使用 semilogy,我们将只得到正值的对数图(如您所述):

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

如果要绘制负值的绝对值,可以使用 logical indexing 找到负值的索引,如下所示:

idx = force < 0;

然后在同一轴上用红色绘制这些值:

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

您也可以使用此语法产生相同的结果:

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