二维表面等高线图绘制

绘制二维表面的等高线图

环境

首先需要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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容