MATLAB 矩阵数据可视化imagesc 以及 如何多图共用一个 colorbar

当遇到需要查看一个二维矩阵数据中值的大小分布情况时可以使用 MATLAB 把矩阵以图像的形式展现出来,这样更直观。MATLAB 的可视化函数之一是 imagesc( ),还有其他的方法,这里只介绍下 imagesc。

目录

1、单一作图

2、同时绘制多图并共用 colorbar


1、单一作图

在 matlab 中定义一个 5*5 的矩阵如下:

data = reshape(linspace(1, 25, 25), [5, 5])'

将矩阵 data 直接传入 imagesc( ) 函数即可绘制相应的图像:

imagesc(data);
colorbar;  % colorbar 的作用是生成一个代表颜色值的条状图例

颜色像素块的亮度跟矩阵中值的大小有关,值越大对应的像素块就越亮,反之,值越小相应的像素块就越暗。像素块的颜色风格可以更换,使用以下函数:

colormap(cool);

具体的参数有以下这些:

parula	turbo	hsv	    hot	    cool	spring	summer	
autumn	winter	gray	bone	copper	pink	jet	    
lines	colorcube	prismflag	white

当然也可以自定义,但一般给定的选择就足够用了。

2、同时绘制多图并共用 colorbar

第一种种情况是不共用同一个 colorbar,这样直接使用 subplot(m,n,k) 函数依次创建子图即可:

data = reshape(linspace(1, 25, 25), [5, 5])';

%% 创建一个一行两列的子图,子图的顺序是由左到右,由上到下。当前是第一个子图
subplot(1,2,1);   
imagesc(data);
colorbar;
colormap("winter");  % 以最后一个 colormap 的设置为准,不信你试试,这里设置了也没用
ax = gca;   % 全称get current axes(个人猜想),获取当前坐标区的属性,用于后续的设置
ax.FontName = 'kaiti';  % 楷体的拼音,经实验,无所谓大小写。如果是英文,可以设置为 'Times New Roman'
ax.FontSize = 10;  % 10 号字体
subtitle("这是第一个子图的标题"); % 这是子标题的定义方法

%% 当前是第二个子图
subplot(1,2,2);
imagesc(data);
colorbar;
colormap("summer");
ax = gca;  
ax.FontName = 'kaiti'; 
ax.FontSize = 10; 
subtitle("这是第二个子图的标题"); % 这是子标题的定义方法

%% 这是总标题的定义方法
sgtitle(["这是总标题", "像这样使用字符串数组的方式可以实现标题分行"], ...
         "FontSize", 15, "Fontname", 'KaiTi'); 

这第二种情况是一张图中的所有子图共用一个 colorbar,应该也是用的最多的吧?(我猜的)。这时就不能使用 subplot(m,n,k) 函数创建子图了,官方提供的方法是使用 tiledlayout(m, n) 函数和 nexttile 设置子图,看字面意思应该就能明白咋用的了,看一下下面的代码意会吧:

data = reshape(linspace(1, 25, 25), [5, 5])';
%% 创建一个一行两列的子图,子图的顺序是由左到右
tiledlayout(1,2);  
%% 当前是第一个子图
nexttile
imagesc(data);
ax = gca;   % 全称get current axes(个人猜想),获取当前坐标区的属性,用于后续的设置
ax.FontName = 'kaiti';  % 楷体的拼音,经实验,无所谓大小写。如果是英文,可以设置为 'Times New Roman'
ax.FontSize = 10;  % 10 号字体
subtitle("这是第一个子图的标题"); % 这是子标题的定义方法

%% 当前是第二个子图
nexttile
imagesc(data);
ax = gca;  
ax.FontName = 'kaiti'; 
ax.FontSize = 10; 
subtitle("这是第二个子图的标题"); % 这是子标题的定义方法

%% 共用 colorbar
cb = colorbar;
cb.Layout.Tile = 'east';  % 这里不知道啥意思的话可以默念:"上北下南, 左西右东"
%% 这是总标题的定义方法
sgtitle(["这是总标题", "像这样使用字符串数组的方式可以实现标题分行"], ...
         "FontSize", 15, "Fontname", 'KaiTi'); 

猜你喜欢

转载自blog.csdn.net/Flag_ing/article/details/128566138
今日推荐