首页 > 代码库 > matlab中画三维图形

matlab中画三维图形

这里主要讲述两个方法用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))

 

matlab中画三维图形