绘制二维表面的等高线图
环境
首先需要Matlab软件,没有安装的话可以用Matlab Online代替,缺点是速度慢,有时候会卡。Matlab Online登录的网址:
MATLAB (mathworks.com)
全部代码
进去之后来到Demo.m脚本:
clc;clear;close all;
% 加载数据
Data = csvread('shangye.csv');
% 导入colormap库
addpath('../slanCM');
% 绘制等高线图
[Rows, Cols] = size(Data);
[X, Y] = meshgrid(1:Cols, 1:Rows);
ax = figure('NumberTitle','off','Name','等高线法','Color','w');
contourf(X, Y, Data, 'LineColor','none');
% 这里就是随便写,reds可以换成任何其他的名字
% 参考:https://zhuanlan.zhihu.com/p/580945672
col = slanCM('reds');
colormap(col);
colorbar;
axis equal;
% 关闭坐标轴
axis off;
% 设置colorbar的上下限
clim([-0.75, 0.75]);
% 关闭colorbar上的数值显示
colorbar('Ticks', []);
% 保存图片,可以修改名字,存下来的图就在当前文件夹
exportgraphics(ax, './Save.png', 'Resolution', 500);
im = im2gray(Data);
imwrite(im, 'gray.png');
代码解析
原始数据读取
加载原始数据,数据存储在shangye.csv的文件中,里面是一个数值矩阵,维度大小为256x256,可以将shangye.csv修改成任意的其他名字的csv文件。
% 加载数据
Data = csvread('shangye.csv');
image.png
导入colorbar库
由于matlab自带的colorbar并不是很好看,所以采用了知乎上用户slandarer的colorbar库,参考:
https://zhuanlan.zhihu.com/p/580945672
addpath('../slanCM');
绘图
用contouf函数绘制二维登高线图
[Rows, Cols] = size(Data);
[X, Y] = meshgrid(1:Cols, 1:Rows);
ax = figure('NumberTitle','off','Name','等高线法','Color','w');
contourf(X, Y, Data, 'LineColor','none');
选择colorbar的颜色
下面的代码选择了名为reds的colorbar,也可以改成其他的名字,参考知乎上的介绍即可。
col = slanCM('reds');
image.png
比如改成BuPu的colorbar
col = slanCM('BuPu');
image.png
显示colorbar
这行代码用于显示colorbar。
colorbar;
坐标轴显示与关闭
默认情况下是显示坐标轴的,坐标轴的标签默认是从1到256,关闭坐标轴的代码:
axis off;
显示坐标轴:
image.png
关闭坐标轴:
image.png
colorbar的动态范围
默认情况下colorbar的动态范围就是原始二维数据的最小值到最大值。但是在有的情况下需要做横向对比,需要有一个统一的动态范围,因此下面这行代码可以任意设置colorbar的动态范围:
clim([-0.75, 0.75]);
上面就是将动态范围设置成了-0.75到0.75。
默认动态范围:
image.png
设置后的动态范围:
image.png
关闭colorbar数值显示
colorbar上也有坐标轴,有刻度显示,可以用以下代码关闭坐标轴显示
colorbar('Ticks', []);
image.png
图像保存
以下代码用于保存绘制的等高线图(包括colorbar),其中Save.png表示保存的图像名字,500表示图片的dpi,dpi越高图像越清晰,右键可以下载图像。
exportgraphics(ax, './Save.png', 'Resolution', 500);
image.png