Octave中数据的可视化—ML Note 30
本文是吴恩达《机器学习》视频笔记第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:Usersgao
这个时候,在硬盘的目录“C:Usersgao”下面就会有一个名为“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函数绘制图形。
最后结果为:
imagesc的用处
可以用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的帮助。
当然了,数据可视化的技巧还有很多,几分钟很难讲完。更多的操作,后面碰到了再说。
- 大牛教你使用7种卷积神经网络进行物体检测!
- Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. ..
- 别对我说谎!你的小九九我都知道
- Spring集成RabbitMQ-使用RabbitMQ更方便
- Nodejs学习笔记(三)--- 模块
- 使用JClouds在Java中获取和发布云服务器
- Silverlight单元测试框架
- Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步
- 让你感觉不真实的13个伟大科学成就和发现
- 分析Silverlight跨域调用
- Spring集成RabbiMQ-Spring AMQP新特性
- Nodejs学习笔记(二)--- 事件模块
- 巧用FireFox来调试Silverlight
- Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- sam2tsv用法
- GridSearchCV (scikit learn) 确定超参数
- 10k+点赞的SpringBoot后台管理系统竟然出了详细教程!爱了!
- 数据库备份和恢复
- 在jupyter里面运行conda虚拟环境的R
- 重新夺回对 /etc/resolv.conf 的控制权
- plsql
- 打卡群2刷题总结1008——环形链表
- Oracle数据库的对象
- 打卡群刷题总结1008——加油站
- 打卡群刷题总结1005——跳跃游戏
- 真是活久见,在 Minecraft 的虚拟游戏里竟然还能管理 Kubernetes!
- 打卡群2刷题总结1007——反转链表
- 打卡群2刷题总结1001——两数之和 II - 输入有序数组
- 复杂一点的SQL语句