Matlab meshgrid 绘制二维网格

最近要用matlab画二维网格,网上查阅和实践后,做一下总结。

一、利用meshgrid绘制二维网格的正确做法

xtick = linspace(10,20,51);

ytick = linspace(0,2*pi,21);

[X,Y] = meshgrid(xtick,ytick);

plot(X, Y, 'k', X', Y', 'k');

axis([10 20 0 2*pi]);

绘图结果如下:

到这儿就结束了。接下来的内容是我走过的坑和原因分析,不感兴趣的可以直接跳过。

二、错误示例

一开始经过网上搜索,发现有二维网格绘制的相关例子,一个简单例子如下:

xtick = linspace(0,10,21);

ytick = linspace(0,10,21);

[X,Y] = meshgrid(xtick,ytick);

plot(X,Y,'k',Y,X,'k');

绘图如下:

一看就是我想要的图,直接根据这个例子,开始动手:

xtick = linspace(10,20,51);

ytick = linspace(0,2*pi,21);

[X,Y] = meshgrid(xtick,ytick);

plot(X, Y, 'k', Y, X, 'k');

画出来是这样的,傻眼了。。。网格没有画到一起,和我想的不一样。。。

经过仔细研究meshgrid这个函数的输出,以及画出来的图,又重新修改了程序,如第一部分的正确示例所示(只有plot命令做了修改)。

三、原因

首先研究一下Meshgrid的输入输出

直接截取官方说明:

[X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。

举个官方的例子:

x=1:3;

y=1:5;

[X,Y]=meshgrid(x,y);

输出X,Y看看长什么样

plot(X,Y),查看是如何画图的,如下图:有三条竖直线,分别是x=1x=2x=3。其画图次序为:X1列和Y的第1列(红线),X2列和Y2列(绿线),以及X3列和Y的第3列(蓝线)。

接着plot(Y,X), 继续查看绘图情况,如下图:有三条水平线,分别是y=1y=2y=3。其画图次序为:Y1列和X的第1列(红线),Y2列和X2列(绿线),以及Y3列和X的第3列(蓝线)。

可以发现,利用plot命令画矩阵时,它会按照对应列进行绘图。且,第一个矩阵会作为横坐标值、第二个矩阵作为纵坐标值进行绘图。

接着我们再研究一下,如何在plot(X,Y)的基础上继续把我们想要的水平线画上,即y=1y=2,…,y=5

先看一下下图中的y=1的水平线,其坐标点分别为(1,1),(2,1)(3,1),这三个坐标值分别对应X矩阵的第1行和Y矩阵的第1行。这样我们就可以把XY矩阵转置再plot(X',Y')就可以得到5条水平线。

最后,plot(X,Y,'k',X',Y','k');可以得到下图。

总结:出错的原因在于没有真正理解用plot命令画两个矩阵时程序是如何执行的。

注:如果横坐标和纵坐标的坐标范围和格点步长是一样的,那么X’Y是相同的,Y’X是相同的,所以用plot(X,Y,'k',Y,X,'k')不会出现问题。

看来还是不能偷懒-_-!

(原创-转载请注明出处)

参考:

https://ww2.mathworks.cn/help/matlab/ref/meshgrid.html

https://blog.csdn.net/zhanghanqmx/article/details/121891071

猜你喜欢

转载自blog.csdn.net/changan824/article/details/128672953