matlab三维散点图画法

        软件版本:MATLAB R2016a.使用scatter3()函数画散点图。初始数据进行处理之后,写入新的文本文档中,每行的数据类型为%d %d %d %f中间以空格分离。将每行的前面三个整形作为三维空间的x,y,z坐标,%f一列对应的数据作为颜色值,颜色将会随着最后一列值的变化而变化。

        一开始的部分代码:

for n = 1:12000
	tline = fgetl(fidin);
	tline = str2num(tline); 
	x = tline(:,1);
	y = tline(:,2);
	z = tline(:,3);
	c = tline(:,4);
	scatter3(x,y,z,20,c,'filled');
	if n == 1   
		caxis([0 1.16e+08]); 
		colormap(spring(1e+6)); 
		map = colormap;
		map(1,:) = [0 0 0];
		colormap(map);
		colorbar;
		title(['Timestep = ', num2str((j-1)*10),', Stage',num2str(m+22)]);
		xlabel('x');
		ylabel('y');
		zlabel('z');
    end
end


        上述代码的主要时间花在scatter3函数上,可以通过MATLAB界面上方的“运行并计时”得出。上述代码效率较低,画12000个点要花上10多秒钟。我的电脑配置是酷睿i5,双核四线程。后来我发现主要的原因是一行一行读取文本数据所致。正确的方法是一次性将所有的点画出,不要一行一行的将数据读出再一个一个点画。

        改进后的代码如下:

        fidin = fopen(filename, 'rt');
        A = textscan(fidin, '%d %d %d %f');
        scatter3(A{1}, A{2}, A{3}, 10, A{4}, 'fill');
        caxis([0 1e+07]); 
        colormap(jet(1e+6)); 
        map = colormap;
        map(1,:) = [1 1 1];
        colormap(map);
        colorbar;
        title(['Timestep = ', num2str((i-1)*10),', Stage',num2str(j+22)]);
        xlabel('x');
        ylabel('y');
        zlabel('z');


        此时的程序执行速度明显提升,12000个点不到3秒钟就可以画完,效果也很好。

        清凉一夏,祝大家学习愉快!

猜你喜欢

转载自blog.csdn.net/u012822181/article/details/76574210