欢迎光临散文网 会员登陆 & 注册

MATLAB绘图系列教程 | 复杂数据图叠加,hold on,子图布局调整

2021-03-12 23:17 作者:图通道  | 我要投稿

一、利用棋盘格思想创建freestyle的子图

先聊在MATLAB里如何正确地创建子图——即正确使用subplot函数。

首先来看函数的说明文档:

subplot(m,n,p) 将当前图窗划分为m×n的网格,并在p指定的位置创建坐标区。按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。

此外,subplot命令会将新创建的坐标区设为当前坐标区——可以认为是正在活动的坐标区;或者更直白地讲,就是你再运行一次plot函数之后图像默认出现的坐标区!

下面用一个简单的示意图来解释一下。图图想要绘制一张数据图,其位于整个画面的中下部位置。那么首先需要将整个figure大概分成一个3×3的网格,中下部对应的网格坐标是(3,3)。按照matlab内部的对应关系,这应该是第8个棋盘格。只要执行subplot(3,3,8)命令即可创建。

subplot(3,3,8)
subplot(3,3,8)

同理,再执行一个subplot(3,3,2)命令会在整个画面的中上部创建一个坐标区。

subplot(3,3,2) & subplot(3,3,8)
subplot(3,3,2) & subplot(3,3,8)

•上面的subplot(3,3,8)命令我们可以简写成subplot(338);

•subplot(3,3,2)& subplot(3,3,8)两条命令我们可以一起合并写成subplot(3,3,[2 8])

有了上面的思路我们就可以创建各种各样的坐标区进行绘制,对子图的位置和形式也不再有限制!!

下方给出一个示例,利用“棋盘格”的思想进行subplot函数的布置!

在命令行窗口输入:

>> plotedit on

可以打开编辑模式,进一步自由调整子图的位置和大小:

二、你真的理解频频出现出现的hold on吗?

再来详细聊聊hold on到底是什么,可能你在很多的MATLAB文件中看到过这个命令,但是却从来没有去深究过这个命令!

先来看看官方帮助文档的介绍:

hold on: 保留当前坐标区中的绘图,从而使新添加到坐标区中的绘图不会删除现有绘图。如果不存在坐标区,hold命令会创建坐标区。

从上面解释中我们可以得到下方信息:

•hold on针对的是一个坐标区(中的绘图);

•如果不加指明,指的就是当前坐标区;

•如果没有任何坐标区,hold on命令会新建一个坐标区。

听着有一些复杂,但是其实也很好理解,建议阅读一下图图前期的文章{戳这里是超链接}——关于一个figure窗口中所有对象的层次结构,并且牢牢记住当前图窗、当前坐标轴、当前对象这三个概念。有了上述三个概念,并且在每次绘图之前思考我的当前坐标轴是什么,就不会搞错了。

我们还是从简单的绘图看起,首先创建一些初始数据

接着我们绘制第一张图,此时hod on被注释掉了,我们发现应该出现两条线的图窗上仅出现了一条线。

当我们绘制第二张图,此时hod on没有注释掉时,我们发现两条线都出现了。

以上的内容相信大家以前都已经非常熟悉,下面我们看看如果有多个子图怎么办。

首先创建一些子图,其中返回值ax1,ax2,ax3是对应子图的句柄(指针)。

分别用和不用hold on命令来在这些图窗上绘制图,看看会有什么结果:

大家发现只有ax2对应的坐标区仅有一条线,而其他两个坐标区都有两条线,这就是hold on在起作用~

三、复杂形式的数据图绘制案例

本推送属于绘图系列教程中非常重要的一环:介绍一组稍复杂的MATLAB绘图命令。

实现的示例图(demo)如下所示:



该图中结合了柱状图,折线图和散点图。其中:

  • 柱状图有渐变颜色的填充;

  • 折线图与柱状图分属两个不同的平面;

  • 散点图的Edge具有不同的颜色设置;

  • 含有观察视角的设置方式;

下面分块介绍代码:

A

f.Color='w';代表将图窗的颜色设置成了白色。



B


随机生成了一些数据进行绘制,其中BarHandle LineHandel PointHandel 三个分别是图形句柄(指针),方便后续控制点、线的样式。


C


绘图后的数值控制。

D


E


坐标轴视角控制View属性。

完整代码

完整的教程请关注公众号:图通道



MATLAB绘图系列教程 | 复杂数据图叠加,hold on,子图布局调整的评论 (共 条)

分享到微博请遵守国家法律