这里主要讲述两个方法用matlab画三维图形:
1.mesh函数
先看一个简单的例子:
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函数画的三维图,结果是:
这里需要注意一点:
矩阵Z的行列,Z的行是Y坐标系的值(meshgrid的右边位置的数y),Z的列是X坐标系的值(meshgrid的左边位置的数x)。
那下面讲下我怎么将自己的数据导入到Z矩阵中:
1.简单的方法是直接将数据输入到矩阵Z中,注意行列:
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');
结果是:
方法2用plot3画:
首先用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),它们相连了。