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秒钟就可以画完,效果也很好。

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

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值