数据可视化之美-以matlab为工具

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

问题+可视化场景+数据=故事

绝大多数可视化故事会以某类问题作为开场,引导读者进入某个主题或者场景中,在该主题或场景中,数据所蕴含的意义最为丰富。故事的多个关键部分会作为一些组成环节嵌入到可视化的特定场景中。可视化场景经常是作为信息图片或者可视化的介绍文本的一部分。 可视化场景提供了解答下述问题的信息:

  • 我们正在看的是什么数据?
  • 这份数据存在于什么时间段内?
  • 哪些显著的时间或者变化影响了这些数据?

数据可视化主要旨在借助于图形化手段,清晰有效的传达与沟通信息。Matlab作为高校中常使用的工具之一,其可视化能力非常强。
本文将从可视化的基础讲起,也介绍一些数据可视化的作品(包含部分代码)。

Matlab可视化基础(见下图,该图源自一位中科大的博士),里面涉及到画图的一些基础内容,其github链接,文末会提供源码下载:
github.com/Pjer-zhang/…

image.png

数据可视化作品(Matlab版本,含代码)

1、 三维切片图:通过切片观测三维数据的变化

相信理工科方面的科研人员经常会遇到做三维切片图的时候。切片主要是通过二维切片来展示,在matlab中主要是通过slice来展示切片。

三维体切片平面 - MATLAB slice

1.1 简单示例

在这里x,y,z为空间上的三个轴,v是属性值 注意切片的属性值。

[X,Y,Z] = meshgrid(-2:.2:2);
V = X.*exp(-X.^2-Y.^2-Z.^2);

xslice = [-1.2,0.8,2];   
yslice = [];
zslice = 0;
slice(X,Y,Z,V,xslice,yslice,zslice)
复制代码

image.png

1.2 稍复杂的示例

1.	[x,y,z,v] = flow;  %%flow()函数可以生成几个三维向量
2.	x1 = min(min(min(x)));x2 = max(max(max(x)));  %此处x为25*50*25的矩阵。
3.	y1 = min(min(min(x)));y2 = max(max(max(x)));
4.	z1 = min(min(min(x)));y2 = max(max(max(x)));
5.	sx = linspace(x1+1.5,x2,5);
6.	sy = 0;
7.	sz = 0;
8.	slice(x,y,z,v,sx,sy,sz);
9.	view([-38,38]);shading interp;
10.	colormap jet;
11.	
12.	set(gcf,'color',[1 1 1])

复制代码

example1.png

1.3 现实的案例:空气污染物

三维空间分布往往能够更加直观地展示大气中的物质分布情况。

image.png

2、三维流场

相对于二维的quiver箭头,三维的箭头为quiver3。

1.	[x, y, z] = meshgrid(-0.8:0.2:0.8, -0.8:0.2:0.8, -0.8:0.8:0.8);  
2.	  
3.	% Calculate homogenous turbulence values at each (x,y,z)  
4.	u = sin(pi*x).*cos(pi*y).*cos(pi*z);  
5.	v = -cos(pi*x).*sin(pi*y).*cos(pi*z);  
6.	w = sqrt(2/3)*cos(pi*x).*cos(pi*y).*sin(pi*z);  
7.	  
8.	% Draw a 3 dimensional quiver plot using the quiver3 function  
9.	figure  
10.	quiver3(x, y, z, u, v, z)  
11.	  
12.	% Set the axis limits  
13.	axis([-1 1 -1 1 -1 1])  
14.	  
15.	% Add title and axis labels  
16.	title('Turbulence Values')  
17.	xlabel('x')  
18.	ylabel('x')  
19.	zlabel('z') 

复制代码

example2.png

3、流场的涡量切片

这里的切片如上文中的1.3一致。

1.	close all  
2.	load wind  % 利用matlab提供的示例数据  
3.	  
4.	mycmp=[[ones(20,1),(0.05:0.05:1)',(0.05:0.05:1)'];[(1:-0.05:0.05)',(1:-0.05:0.05)',ones(20,1)]];  
5.	cav = curl(x,y,z,u,v,w); %计算旋度  
6.	h = slice(x,y,z,cav,[90 134],59,0); %切片  
7.	shading interp  
8.	daspect([1 1 1]);   
9.	axis tight  
10.	colormap(mycmp);  
11.	caxis([-5,5])   
12.	camlight   
13.	set([h(1),h(2)],'ambientstrength',.6);  

复制代码

example3.png

4、运动的流场

image.png

5、三维流带图

example5.png

6、流管图

example3.png

7、三维速度场全貌

example4.png

8、运动的地球

SphericalSpin2.gif

猜你喜欢

转载自juejin.im/post/7110200425378217992
今日推荐