伙伴云客服论坛»论坛 S区 S软件开发 查看内容

0 评论

0 收藏

分享

MATLAB全网最全的colormap的使用教程详解

目录

    示例图片前言颜色展示使用方法实际例子
      demo1 曲面图demo2 imagescdemo3 灰度图demo4 特殊地形配色demo5 多colormapdemo6 帅气的分形demo7 渐变柱状图demo8 散点图demo9 气泡图
    另(建议略过)完


示例图片

MATLAB全网最全的colormap的使用教程详解-1.png

MATLAB全网最全的colormap的使用教程详解-2.png


前言

众所周知,MATLAB中的colormap只要少得可怜的几种:
MATLAB全网最全的colormap的使用教程详解-3.png

有很多应用在很特殊的图形中的colormap几乎都没有,而每次写代码都要去找颜色的图属实太费事,因而就有了开发集成包的想法,我之前出过一篇使用python全部配色的文章,但是代码写的比较飘导致老版本用不了,这次使用了比较根底的代码和调用方式,争取能让更多人能用上。
matplotlab颜色新增了一些,但这哪够,于是我将:
    matplotlabscicomapcmasherviscm
包全部集成了进来,终于有了这套包含200个colormap的工具函数slanCM

颜色展示

Perceptually Uniform Sequential 感知一致 colormap:
MATLAB全网最全的colormap的使用教程详解-4.png

Pure Sequential 颜色较纯双方向渐变:
MATLAB全网最全的colormap的使用教程详解-5.png

较复杂渐变:
MATLAB全网最全的colormap的使用教程详解-6.png

MATLAB全网最全的colormap的使用教程详解-7.png

MATLAB全网最全的colormap的使用教程详解-8.png

Diverging 双方向渐变:
MATLAB全网最全的colormap的使用教程详解-9.png

Cyclic 循环渐变(两侧颜色可以对接在一起):
MATLAB全网最全的colormap的使用教程详解-10.png

Miscellaneous 混杂渐变色,用于一些山地、光谱等特殊图绘制:
MATLAB全网最全的colormap的使用教程详解-11.png

Qualitative 离散colormap:
MATLAB全网最全的colormap的使用教程详解-12.png


使用方法

不指定获取颜色个数会默认256色,举例获取[163]号彩虹色(rainbow),以下两种写法等价:
    slanCM(‘rainbow’)slanCM(163)
第二个参数可以指定获取颜色数量,例如获取30颜色:
    slanCM(‘rainbow’,30)slanCM(163,30)
将获取的颜色放入colormap函或者某些图像的CData即可,例如:
colormap(slanCM(‘rainbow’))

实际例子


demo1 曲面图

使用上述
colormap(slanCM(‘rainbow’))
停止颜色修改:
% demo1
surf(peaks,'EdgeColor','w','EdgeAlpha',.3)
% 使用slanCM的彩虹配色
colormap(slanCM('rainbow'))

% 修饰一下
ax=gca;
ax.Projection='perspective';
ax.LineWidth=1.2;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
view(-37,42)
MATLAB全网最全的colormap的使用教程详解-13.png


demo2 imagesc

使用100号配色:
% demo2
XData=rand(15,15);
XData=XData+XData.';
H=fspecial('average',3);
XData=imfilter(XData,H,'replicate');

imagesc(XData)
% 使用slanCM的100号配色
colormap(slanCM(100))
hold on

ax=gca;
ax.DataAspectRatio=[1,1,1];
ax.LineWidth=1.2;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
view(-37,42)
MATLAB全网最全的colormap的使用教程详解-14.png


demo3 灰度图

使用离散颜色:
% demo3
rgbImage=imread("peppers.png");
imagesc(rgb2gray(rgbImage))

colormap(slanCM('prism2'))
MATLAB全网最全的colormap的使用教程详解-15.png


demo4 特殊地形配色

使用特殊地形配色terrain:
% demo4
X=linspace(0,1,200)';
CL=(-cos(X*2*pi)+1).^.2;
r=(X-.5)'.^2+(X-.5).^2;
surf(X,X',abs(ifftn(exp(7i*rand(200))./r.^.9)).*(CL*CL')*30,'EdgeColor','none')

colormap(slanCM('terrain'))
light
material dull
view(59.1823,56.1559)

% 修饰一下
ax=gca;
ax.Projection='perspective';
ax.LineWidth=.8;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
MATLAB全网最全的colormap的使用教程详解-16.png

加个光照:
MATLAB全网最全的colormap的使用教程详解-17.png


demo5 多colormap

% demo5
X=linspace(0,1,200)';
CL=(-cos(X*2*pi)+1).^.2;
r=(X-.5)'.^2+(X-.5).^2;
Z=abs(ifftn(exp(7i*rand(200))./r.^.9)).*(CL*CL')*30;

ax1=axes('Parent',gcf,'OuterPosition',[0,1/2,1/2,1/2],'LooseInset',[0,0,0,0]);
contourf(Z,'EdgeColor','none')
ax1.Colormap=slanCM('tokyo',200);

ax2=axes('Parent',gcf,'OuterPosition',[1/2,1/2,1/2,1/2],'LooseInset',[0,0,0,0]);
contourf(Z,'EdgeColor','none')
ax2.Colormap=slanCM('sepia',200);

ax3=axes('Parent',gcf,'OuterPosition',[0,0,1/2,1/2],'LooseInset',[0,0,0,0]);
contourf(Z,'EdgeColor','none')
ax3.Colormap=slanCM('turku',200);

ax4=axes('Parent',gcf,'OuterPosition',[1/2,0,1/2,1/2],'LooseInset',[0,0,0,0]);
contourf(Z,'EdgeColor','none')
ax4.Colormap=slanCM('copper2',200);
MATLAB全网最全的colormap的使用教程详解-18.png


demo6 帅气的分形

% demo6
% MvLevi :https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/5/entries/10775
C=-9:9e-3:9;D=-9:9e-3:9;
for q=1:2001
    for j=1:2001
        X=.5;
        for i=1:5
            if mod(i,2)==0
                X(i+1)=X(i)-C(q)*(.5+.3*cos(X(i)))^-1;
            else
                X(i+1)=X(i)-D(j)*(.5+.3*cos(X(i)))^-1;
            end
        end
        P=diff(X);
        L(q,j)=mean(log(abs(P)));
    end
end
pcolor(C,D,-L)
shading flat
axis off
caxis([-3.5 3.5])

colormap(slanCM('twilight'))
MATLAB全网最全的colormap的使用教程详解-19.png


demo7 渐变柱状图

多试了几个颜色:
% demo7
X=randi([2,15],[1,25])+rand([1,25]);
b=bar(X);

CMap=slanCM('hsv');
b.FaceColor='flat';
b.CData=slanCM(188,length(b.XData));
% 42 56 63 100 133 187 188

% 修饰一下
ax=gca;hold on;grid on
ax.DataAspectRatio=[1,1,1];
ax.LineWidth=1.2;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
MATLAB全网最全的colormap的使用教程详解-20.png

MATLAB全网最全的colormap的使用教程详解-21.png

MATLAB全网最全的colormap的使用教程详解-22.png

MATLAB全网最全的colormap的使用教程详解-23.png

MATLAB全网最全的colormap的使用教程详解-24.png

MATLAB全网最全的colormap的使用教程详解-25.png

MATLAB全网最全的colormap的使用教程详解-26.png


demo8 散点图

% demo8
rng('default')
for i = 1:20000
  x = -0.4 + 0.8*randi([0 1],1,18);
  A = gallery('circul',x);
  E(:,i) = eig(A);
end
scatter(real(E(:)),imag(E(:)),8,'filled','CData',slanCM('twilight',length(E(:))))
xlabel('Re(E)')
ylabel('Im(E)')
xlim([-3 3])
ylim([-3 3])
axis square
MATLAB全网最全的colormap的使用教程详解-27.png


demo9 气泡图

% demo9
x=1:30;
[~,ind]=sort(rand(1,30));
x=x(ind);
y=rand(1,30);
sz=sort(rand(1,30));

% 100 102 94
bubblechart(x,y,sz,'CData',slanCM(94,30));

% 修饰一些
ax=gca;hold on
ax.LineWidth=.8;
MATLAB全网最全的colormap的使用教程详解-28.png

MATLAB全网最全的colormap的使用教程详解-29.png

MATLAB全网最全的colormap的使用教程详解-30.png


另(建议略过)

鉴于一部分人问过我咋从python获取颜色,这里给两段python代码:
matplotlab获取全部颜色:
import numpy as np
import matplotlib.pyplot as plt

cmaps = [('Perceptually Uniform Sequential', [
            'viridis', 'plasma', 'inferno', 'magma', 'cividis']),
         ('Sequential', [
            'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds', 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu', 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']),
         ('Sequential (2)', [
            'binary', 'gist_yarg', 'gist_gray', 'gray', 'bone', 'pink', 'spring', 'summer', 'autumn', 'winter', 'cool', 'Wistia', 'hot', 'afmhot', 'gist_heat', 'copper']),
         ('Diverging', [
            'PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic']),
         ('Cyclic', ['twilight', 'twilight_shifted', 'hsv']),
         ('Qualitative', [
            'Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'Set1', 'Set2', 'Set3', 'tab10', 'tab20', 'tab20b', 'tab20c']),
         ('Miscellaneous', [
            'flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern', 'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', 'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral', 'gist_ncar'])]
def plot_color_gradients(cmap_category, cmap_list):
    print(cmap_category)
    print(cmap_list)
    for color in cmap_list:
        np.savetxt(color+'.txt', np.c_[plt.get_cmap(color)(np.linspace(0, 1, 256))],fmt='%f',delimiter='\t')
for cmap_category, cmap_list in cmaps:
    plot_color_gradients(cmap_category, cmap_list)
scicomap获取全部颜色:
import numpy as np
import matplotlib.pyplot as plt
import scicomap as sc
import numpy as np

sc_map = sc.SciCoMap()
typeList=sc_map.get_ctype()
print(typeList)
sc_dic=sc.get_cmap_dict()

for i in typeList:
    tdic=sc_dic
    print('-----------------')
    for j in tdic.keys():
        color=tdic[j]
        np.savetxt(j+'.txt', np.c_[plt.get_cmap(color)(np.linspace(0, 1, 256))],fmt='%f',delimiter='\t')
        print(j)



两百组数据整理起来真真真真的巨累,希望大家该点赞的点赞,该在看的在看!!
file exchange:
Zhaoxu Liu (2022). 200 colormap (https://www.mathworks.com/matlabcentral/fileexchange/120088-200-colormap), MATLAB Central File Exchange. 检索来源 2022/11/6.
以上就是MATLAB全网最全的colormap的使用教程详解的详细内容,更多关于MATLAB colormap的资料请关注网站其它相关文章!

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

零代码研究员
注册会员
主题 23
回复 24
粉丝 0
|网站地图
快速回复 返回顶部 返回列表