1. 程式人生 > >matlab三維散點圖畫法

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

        清涼一夏,祝大家學習愉快!