在Matlab中部分着色绘图

时间:2017-11-28 14:39:35

标签: matlab plot figure

我将根据频率绘制一个名为force的参数。 我的情节将是一个半月形的情节(我的意思是" Y"方向它应该是对数的)但是我知道力在某些频率是负的,所以在对数图中它不能被绘制。 总而言之,我想要的想法是,我想绘制半对数的力,并且在图中也有不同颜色的负面部分。   semilogy(频率,ABS(力(2800,:))) 我不知道如何改变负面部分的颜色。 谢谢

2 个答案:

答案 0 :(得分:2)

这个答案与this other answer基本相同,但更详细一点。

采用以下样本数据集:

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

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

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

semilogy positive values only

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

idx = force < 0;

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

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

semilogy positive and negative values

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

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

答案 1 :(得分:1)

我会使用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-')

给出了以下情节:

enter image description here