Matlab画colormap的一种色彩搭配方法
声学与振动数据分析经常需要画colormap,来识别是结构频率共振,还是激励源阶次问题,比如图1,横坐标表示电机的转速,负值表示CW(顺时针)方向转动,正值表示CCW逆时针方向转动。Y轴表示对应的声音或振动的频率值,颜色(Z轴)表示对应声音或振动不同转速不同频率下的幅值(强度)。
图(1)
那么如何画图1 呢,使用imagesc比较容易得到一个彩图,如图2所示。
图(2)
Matlab也内置了一些色阶卡,但是渐变色阶标尺不太容易操作,所使用的渐变颜色组合感觉使用起来也不太习惯。
如何定制自己的colormap 的colorbar呢?如何能达到图1的效果呢?下面做一些尝试(代码):
clc;
clear;
close all;
导入数据
load('D:\Matlab\Bing_s_Matlab_Projects\13_build_colormap\SOFA_data.mat');
%fmax=2000Hz
%f_resl=8Hz
%speed range = -2300rpm:10rpm:2300rpm
f1=figure;
创建一个colormap使用五种颜色渐变
定义自己所取的六个色阶点
RGB 红 | 绿 | 蓝 值
黑色 000 000 000
蓝色 000 000 255
品红 255 000 255
纯红 255 000 000
黄色 255 255 000
白色 255 255 255
mycolorpoint= [0 0 0; %黑
0 0 255; %蓝
255 0 255; %品红
255 0 0; %纯红
255 255 0; %黄
255 255 255] ; %白
定义颜色标尺取值范围:
cmin=10;
cmax=40;
clims=[cmin cmax]; % 定义颜色标尺范围
定义色阶点
mycolorposition=linspace(cmin,cmax,6);
定义插值个数100个
inp_100=linspace(cmin,cmax,100); % 插值数目100个
通过6个色阶点来插值100个颜色渐变标尺
mycolormap_r=interp1(mycolorposition,mycolorpoint(:,1),inp_100,'linear','extrap');
mycolormap_g=interp1(mycolorposition,mycolorpoint(:,2),inp_100,'linear','extrap');
mycolormap_b=interp1(mycolorposition,mycolorpoint(:,3),inp_100,'linear','extrap');
mycolor=[mycolormap_r',mycolormap_g',mycolormap_b']/256;
mycolor=round(mycolor*10^4)/10^4;%保留4位小数
设置横坐标,纵坐标
%%-------------设置坐标-----------------
X=[-2300 2300];
Y=[0 2000];
% -----------设置坐标-------------
画出图形:
imagesc(X,Y,SOFA_data,clims)
设置Y方向
ax = gca;
ax.YDir='normal'; % 设置图片Y的方向
画出标尺
colormap(mycolor);
c=colorbar;
c.Label.String = 'dB(A)';
xlabel('motor speed/rpm')
% xlabel2('2')
ylabel('freqency /Hz')
参考:
1. CSDN博主「hyhhyh21」:https://blog.csdn.net/weixin_42943114/article/details/81811556