matlab三維散點圖畫法
阿新 • • 發佈:2019-01-27
軟體版本: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秒鐘就可以畫完,效果也很好。
清涼一夏,祝大家學習愉快!