在 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*');
我将根据频率绘制一个称为力的参数。 我的图将是一个半逻辑图(我的意思是在 "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*');