這裏主要講述兩個方法用matlab畫三維圖形:node
1.mesh函數c++
先看一個簡單的例子:函數
1 x = 1:1:3; 2 y = 1:1:4; 3 [X, Y] = meshgrid(x, y); 4 Z = zeros(4,3); 5 Z = [ 1 2 3; 6 2 3 4; 7 3 4 5; 8 4 5 6] 9 mesh(X, Y, Z);
這是個簡單的用mesh函數畫的三維圖,結果是:spa
這裏須要注意一點:3d
矩陣Z的行列,Z的行是Y座標系的值(meshgrid的右邊位置的數y),Z的列是X座標系的值(meshgrid的左邊位置的數x)。code
那下面講下我怎麼將本身的數據導入到Z矩陣中:blog
1.簡單的方法是直接將數據輸入到矩陣Z中,注意行列:it
1 x = 1:1:22; 2 y = 1:1:101; 3 [X,Y] = meshgrid(x,y); 4 Z = zeros(101,22); 5 Z = [ 6 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 7 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 ; 8 1 1 1 1 1 2 2 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 9 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 10 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 11 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 12 1 1 1 1 2 2 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 13 1 1 1 1 1 1 1 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 14 1 1 1 1 1 1 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 15 1 1 1 1 2 2 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 16 1 1 1 2 2 2 3 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 ; 17 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 18 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 19 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 20 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ; 21 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 22 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 23 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 24 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 25 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 26 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 27 1 1 1 1 1 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 28 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 29 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ; 30 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 31 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 32 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 33 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 34 1 1 1 1 1 1 2 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ; 35 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 36 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 37 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 38 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 39 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 40 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 41 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 42 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 43 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 44 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 45 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 46 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 47 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 48 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 49 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 50 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 51 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 52 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 53 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 54 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 55 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 56 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 57 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 58 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 ; 59 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ; 60 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 61 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 62 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 63 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 64 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 65 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 66 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 67 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 68 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 69 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 70 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 71 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 72 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 73 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 74 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 75 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 76 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 77 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 78 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 79 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 80 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 81 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 82 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 83 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 84 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 85 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 86 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 87 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 ; 88 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 89 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 90 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 91 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 92 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 93 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 94 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 95 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 96 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; 97 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ; 98 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 99 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 100 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 101 1 1 2 2 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 102 1 1 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 103 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; 104 1 1 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 105 1 1 2 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 106 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 107 ]; 108 mesh(X, Y, Z); 109 xlabel('cluster'); 110 ylabel('mrf node'); 111 zlabel('max label num');
結果是:class
方法2用plot3畫:grid
首先用c++寫段代碼,注意數據存儲的方式:
1 fp = fopen("D://cluster_num_max.text", "w"); 2 if(fp) 3 { 4 for (GLong v = 0; v < mrf.size(); v++) 5 { 6 for (GLong k = 0; k < canopy; k++) 7 { 8 fprintf(fp, "%ld ", v + 1 ); 9 } 10 } 11 fprintf(fp, "\n"); 12 for (GLong v = 0; v < mrf.size(); v++) 13 { 14 for (GLong k = 0; k < canopy; k++) 15 { 16 fprintf(fp, "%ld ", k + 1 ); 17 } 18 } 19 fprintf(fp, "\n"); 20 for (GLong v = 0; v < mrf.size(); v++) 21 { 22 for (GLong k = 0; k < canopy; k++) 23 { 24 GLong lCanopyTemp = mrf[v].stClusterNum_min_max[k].lLabel_pruning_cluster_num_max; 25 fprintf(fp, "%ld ", lCanopyTemp ); 26 } 27 //fprintf(fp, ";\n");
28 } 29 } 30 //fprintf(fp, "\n");
31 fclose(fp); 32 fp = NULL;
獲得cluster_num_max.text後,matlab就能夠導入數據了。
1 load('D:\\cluster_num_max.text'); 2 y = cluster_num_max(1,:); 3 x = cluster_num_max(2,:); 4 z = cluster_num_max(3,:); 5 plot3(x,y,z); 6 xlabel('cluster'); 7 ylabel('mrf node'); 8 zlabel('max label num')
結果是:
補充mesh函數:
1 [x,y]=meshgrid(-8:0.5:8); 2 z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); 3 subplot(2,2,1); 4 mesh(x,y,z); 5 title('mesh(x,y,z)') 6 subplot(2,2,2); 7 meshc(x,y,z); 8 title('meshc(x,y,z)') 9 subplot(2,2,3); 10 meshz(x,y,z) 11 title('meshz(x,y,z)') 12 subplot(2,2,4); 13 surf(x,y,z); 14 title('surf(x,y,z)')
最後說一下plot3和mesh的圖怎麼不同
左圖是plot3,右圖是mesh。能夠看到當(1,4,1)數據緊接着是(2,1,1),它們相連了。