Matlab meshgrid 绘制二维网格 |
您所在的位置:网站首页 › 童话书的作者 › 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=1,x=2和x=3。其画图次序为:X第1列和Y的第1列(红线),X第2列和Y第2列(绿线),以及X第3列和Y的第3列(蓝线)。 接着plot(Y,X), 继续查看绘图情况,如下图:有三条水平线,分别是y=1,y=2和y=3。其画图次序为:Y第1列和X的第1列(红线),Y第2列和X第2列(绿线),以及Y第3列和X的第3列(蓝线)。 可以发现,利用plot命令画矩阵时,它会按照对应列进行绘图。且,第一个矩阵会作为横坐标值、第二个矩阵作为纵坐标值进行绘图。 接着我们再研究一下,如何在plot(X,Y)的基础上继续把我们想要的水平线画上,即y=1,y=2,…,y=5。 先看一下下图中的y=1的水平线,其坐标点分别为(1,1),(2,1)和(3,1),这三个坐标值分别对应X矩阵的第1行和Y矩阵的第1行。这样我们就可以把X和Y矩阵转置再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 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |