本文是吴恩达《机器学习》视频笔记第30篇,对应第2周第12个视频。
“Octave Tutorial——Plotting on data”
01
—
笔记
上个视频讲了如何对数据进行计算,本节课讲解怎样把数据用图形的方式绘制出来。
一图胜千言。相对于冷冰冰的数字,生动的图形可以更好的反映一些信息,也更利于我们在数据探索、预处理等阶段感性认识数据的内在规律或信息。本视频就讲解Octave图形化数据的一些工具和对应的方法。
首先,当然是定义一个数组,作为x;然后,就就求数组的sin值,作为y。假设公式为:
代码很简单,就2行:
>>t=[0:0.01:0.98];
>>y1=sin(2*pi*4*t);
然后,绘制这个正弦曲线,就更简单了:
>>plot(t,y1)
结果如下图:
类似方法,我们再画一个余弦图像。
>>y2=cos(2*pi*4*t);
>>plot(t,y2)
绘制的结果为:
问题来了,上图你可以看出来,figure的名称还是Figure1,但是图变成了余弦图了,我们刚刚画的正弦图被新的图给覆盖了。
如果想把正弦、余弦都显示出来呢?这个时候就要用hold on来把当前的图保持住,然后再在上面叠加。代码如下:
>>hold on;
>>plot(t,y1,'r'); %指定曲线的颜色
>>xlabel('time'); %给x轴加标签
>>ylabel('value');%给y轴加标签
>>legend('sin','cos'); %加图例
>>title('my plot'); %加标题
绘制后结果为:
我们想要将绘制的图形保存到硬盘上,怎么办呢?也很简单,一条命令:
>>print -dpng 'myPlot.png'; %用print函数,前面是图片类型,后面是图片名称
那图片被保存到哪里去了呢?使用pwd命令来查看一下当前的工作路径。
>>pwd
ans = C:\Users\gao
这个时候,在硬盘的目录“C:\Users\gao”下面就会有一个名为“myPlot.png”的文件。
当然,如果你想保存到其它路径下的话,可以先用cd命令改变一下Octave的工作路径。
保存完之后,就可以使用“Close”命令把Figue给关闭。
如果想要在不同的Figure窗口中画图的话,就需要使用figure函数开多一个窗口。比如:
>>figure(1);plot(t,y1);
>>figure(2);plot(t,y2);
这个时候,就同时有了两个Figure窗口,分别绘制了正弦y1和余弦y2.
还有一种办法,是在一个Figure窗中,分成几个格子,每个格子里画一种图形。这个时候就要用subplot函数了。
>>subplot(1,2,1); %1行2列的格子,然后在第1个格子里画图。>>plot(t,y1);
得到一个这样的图像:
值得注意的是,这个时候我们的图形被绘制在了Figure2上,即最后活动的那个Figure窗上。
类似方法,想绘制第一行第2列上,就使用代码:
>>subplot(1,2,2);>>plot(t,y2);
就是先使用subplot指定绘制的格子数和第几个格子,然后用同样的plot函数绘制图形。
最后结果为:
可以用clf命令把Figure中已经绘制的图形给擦除掉。
我们经常会使用不同的颜色啊、形状啊什么的来表示不同的数值。在Octave中,可以使用imagesc函数将数据给图形化。
比如,我们定义一个magic矩阵,然后用imagesc来看看。
>>A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>>imagesc(A)
就可以得到下面这样一个图,就是在颜色和数值大小之间建立一个映射关系,然后在一个图中把magic矩阵给显示出来了,就可以很醒目的看出来数据比较大的或比较小的值在整个矩阵中的比例多少。
也可以转成灰度的。还可以使用help命令来查看imagesc的帮助。
当然了,数据可视化的技巧还有很多,几分钟很难讲完。更多的操作,后面碰到了再说。