Matlab绘图工具箱Gramm
Gramm工具箱教程
Gramm工具箱用于matlab绘图,特别是多组数据之间对比的图,内含线性拟合、95%置信区间绘制等常规统计,就不用再去为编写脚本语句。Gramm包含多种常用图表的examples.m和gramm cheat sheet,仅只用找到自己想绘制的图形,然后将对应examples语句改写即可,方便快捷。
下载
https://github.com/piermorel/gramm
使用
运行examples.m,查看想要绘制的类似图形。
例如我想绘制例子中的第四个子图
找到相应的源代码
从说明文档里知道这个图叫做Repeated trajectories
在examples.m查找Repeated trajectories即可定位到相应代码
%% Methods for visualizing repeated trajectories:
% gramm supports 2D inputs for X and Y data (as 2D array or cell of
% arrays), which is particularly useful for representing repeated
% trajectories. Here for example we generate 50 trajectories, each of
% length 40. The grouping data is then given per trajectory and not per
% data point. Here the color grouping variable is thus given as a 1x50% cellstr.%We generate 50 trajectories of length 40, with 3 groups
N=50;
nx=40;
cval={'A' 'B' 'C'};
cind=randi(3,N,1);
c=cval(cind);
x=linspace(0,3,nx);
y=arrayfun(@(c)sin(x*c)+randn(1,nx)/10+x*randn/5,cind,'UniformOutput',false);clear g
g(1,1)=gramm('x',x,'y',y,'color',c);
g(1,2)=copy(g(1));
g(2,1)=copy(g(1));
g(2,2)=copy(g(1));g(1,1).geom_point();
g(1,1).set_title('geom_point()');g(1,2).geom_line();
g(1,2).set_title('geom_line()');g(2,1).stat_smooth();
g(2,1).set_point_options('base_size',3);
g(2,1).set_title('stat_smooth()');g(2,2).stat_summary();
g(2,2).set_title('stat_summary()');g.set_title('Visualization of repeated trajectories ');figure('Position',[100 100 800 550]);
g.draw();
我们来读一下这段代码(看我的注释)
% gramm supports 2D inputs for X and Y data (as 2D array or cell of
% arrays), which is particularly useful for representing repeated
% trajectories. Here for example we generate 50 trajectories, each of
% length 40. The grouping data is then given per trajectory and not per
% data point. Here the color grouping variable is thus given as a 1x50
% cellstr.
Gramm支持2D的输入数据(可以用2D数组或者cell类型,
任君挑选,从array和cell的区别大家应该能猜到为什么提供两种,
而不是固定一种,对的,就是数据长度或数据类型的原因,
具体大家可以回去看array和cell基础,很多编程语言开头都会讲的),特别是用来表征轨迹的重复性。作者生成了个50次repeated轨迹的数据,数据长40,数据按照每次轨迹来分组,并且制定Color grouping variable是一个1*50的字符串cell类型**在Gramm中,大家要明确group这个概念。grouping data和color grouping variable等
都是很重要的参数(包括其他可以用来group的参数)。大家把握gramm的目的就好,
gramm是为了分组对比而生的(还有其他功能,例如分组完成统计)。这个group会导致
可以绘制多(两)张之间形成对比,也可以在一张图片里按照颜色绘制多条曲线(或其
他形状)**%We generate 50 trajectories of length 40, with 3 groups
N=50; % 50次轨迹
nx=40; % number of x的缩写
cval={'A' 'B' 'C'}; % cval,color of value的缩写
cind=randi(3,N,1); % color of index的缩写, randi是matlab自带函数,作用是产生均匀分布的伪随机整数序列,这里的randi(3,N,1)等同于randi(3,[N,1]),就是要产生一个最大值为3的50*1的均匀分布随机整数数,这里就是1,2,3会随机产生,总共会有50个,大家可以用sum(cind==3),sum(cind==2),sum(cind==1)来查看每次运行产生的情况,每次应该都是不一样的。c=cval(cind); %按照cind的索引取cval的值,那cval有50个值,1,2,3就是代表要取cval第1个值,就是A,以此类推就是B,C,最后把这50个值返回给c
x=linspace(0,3,nx); %linspace是很多语言的内置函数,用来线性的空格,这里是从0到3,中间给40个坑,为什么是3呢?
y=arrayfun(@(c)sin(x*c)+randn(1,nx)/10+x*randn/5,cind,'UniformOutput',false);%内联函数,类似的还有cellfun,structfun等等,跟lamda函数的用法是一样的,
就是一种不需要去申明函数名称的匿名用法,优点是简便,不然得像常规函数
一样去申明。Apply a function to each element of an array,在这里就是说
有个以c为因变量的函数sin(x*c)+randn(1,nx)/10+x*randn/5,其中c的值从cind里取,
每取一个就带到函数里去求函数值,这里cind有50个值,得到的y也就
有50个值(只是这50个值,是由50个cell值组成的,因为函数内的randn(1,nx)产生
的是40个均值为1的正态分布值);UniformOutput为false,在help arrayfun里的
解释是说结果值可以是cell类型等任意类型,如果这个值是true,返回值只能
是array型,我们跟着作者的步伐走就行,不纠结到底用true还是false,
咱们就用false。
以上,就把2D数据值及其group都准备好了,接下来就是要条用Gramm了clear g %清除工作空间中的object g
g(1,1)=gramm('x',x,'y',y,'color',c);
g(1,2)=copy(g(1));
g(2,1)=copy(g(1));
g(2,2)=copy(g(1)); %这上面貌似是2*2的矩阵形式来组织整个object gg(1,1).geom_point(); %绘制点图,就是将x,y的值按照2D形式画在图片上,
geom_point()按照group(A B C)来分组显示各组的数据点
g(1,1).set_title('geom_point()');g(1,2).geom_line(); %绘制线图,就是在点图的基础上,把每次trajectory的40个点连起来
g(1,2).set_title('geom_line()');g(2,1).stat_smooth(); %绘制平滑图,在线图的基础上,进行平滑操作
g(2,1).set_point_options('base_size',3);
g(2,1).set_title('stat_smooth()');g(2,2).stat_summary(); %绘制统计图,mean&95% CI,我特地试了下
stat_summary("type","std"),半透明区域很大,见下图
看来标准差跟置信区间差的不是一点点啊。
g(2,2).set_title('stat_summary()');g.set_title('Visualization of repeated trajectories '); %整个g的标题figure('Position',[100 100 800 550]); %这里指定了屏幕[left bottom width height],貌似单位应该是inch,不确定
g.draw(); %绘画呈现
绘制自己的图
如文章开头所说,我想单独绘制第4张图。
数据方面跟这个例子里的不一样,我的每次trajectory的数据点个数是不一样的,有的是40个点,有的是38个点,有的是36个点等等,而且这些还是同组内部就存在不同。我的数据会分为4组,pre-sci和4wks,8wks和12wks
,每组里面还分为hip, knee和ankle三组数据,到底怎么样展示才更有显著性呢?
我打算先按照一个时期分三组(hip、knee和ankle)的形式来绘制:
A. 解决每次trajector点数不一样的问题
我有30次的trajectory,我先画Line图,然后把每条line都重采样成(那个时期,例如pre-sci一次可能要48个点)最大值,重采样的函数resample,写个简单循环就能完成30次的数据都统一长度,而且这种拉伸数据对于步态数据是合理的。
B. 编程
在组织好原始数据之后,可以确定
N = 30;
nx = 65;
cval={‘Hip’ ‘Knee’ ‘Ankle’};
cind=repmat(cval,1,N);
x=linspace(0,3,nx);
Y = y’; %因为我的数据是列排布,源程序是行排布,按照源程序走
clear g
g = gramm(‘x’,x,‘y’,Y,‘color’,cind);
g.stat_summary();
g.set_title('12 wks '); %整个g的标题
figure(‘Position’,[100 100 800 550]);
g.draw();
得到:
C 改进
存在的问题:
- 我想要的是上中下三条分开的曲线
- 曲线没有平滑,显得实验次数过少,要么增实验trial,要么就平滑,我选择平滑
针对上面两个问题,改进方法如下:
上中下排列
仿照Grouping option in gramm得第(3,1)个图添加g.facet_grid(cind,[]) %按cind里的group行排列画布
平滑
g.state_summary(‘type’, ‘fitnormalci’)
Enjoy it!
Matlab绘图工具箱Gramm相关推荐
- Matlab之绘图工具箱大全
目录 一.序言 二.绘图工具箱的使用 1.输入数据 2.绘图工具箱的使用 2.1 plot工具箱的使用 2.2线图 2.3 针状图与阶梯图 2.4条形图 2.5散点图 2.6饼图 2.7直方图 2.8 ...
- 如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)
如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱) 转载:https://blog.csdn.net/xgxyxs/article/details/53265318 最近一段 ...
- matlab数理统计工具箱,Matlab数理统计工具箱
Matlab数理统计工具箱应用简介 1. 概述 Matlab的数理统计工具箱是Matlab工具箱中较为简单的一个,其牵扯的数学知识是大家都很熟悉的数理统计,因此在本文中,我们将不再对数理统计的知识进行 ...
- matlab仿真plant函数,(整理)matlab预测控制工具箱函数.
精品文档 精品文档 MATLAB 预测控制工具箱函数 1通用的传递函数转变为MPC 传递函数模型 (1) 2MPC 传递函数模型转换为MPC 阶跃响应模型 (1) 3基于阶跃响应模型的控制器设计和仿真 ...
- matlab 取点画图,matlab绘图小技巧-图像光滑数据取点
原标题:matlab绘图小技巧-图像光滑&数据取点 小助理之前介绍过Matlab,,一款计算机.医学与生物学的软件,今天转载一篇实操,简单易上手~ 用cftool插值绘图得到拟合后的图像,然后 ...
- Matlab机器人工具箱(0)——旋转与平移变换
Matlab机器人工具箱(0)--旋转与平移变换 前言 旋转变换 旋转矩阵与可视化 欧拉角 RPY角 角轴 单位四元数 平移与旋转组合 总结 参考资料 前言 本文主要介绍如何使用matlab工具箱对旋 ...
- Matlab绘图案例,MATLAB画图大法,附详细代码
目录 1. 使用subplot创建多个子图 2. 绘制误差棒图 3. 绘制条形堆积图 4. 绘制堆积面积图 5. 绘制直方图并拟合曲线 6. 绘制等高线图 7. 绘制光滑的曲线 8. 绘制彩虹图 9. ...
- Matlab优化工具箱和模拟退火算法
Matlab优化工具箱主要有以下4种求解器: 1.最小值优化 2.多目标最小值优化 3.方程求解器 4.最小二乘(曲线拟合)求解器 一.最小值优化: 1.标量最小值优化:使用函数fminbnd 例:对 ...
- MATLAB图像处理工具箱
版权说明 ,转自 https://blog.csdn.net/BAR_WORKSHOP/article/details/81009900 自己在学习过程中查阅资料整理了MATLAB图像处理工具箱中函数 ...
最新文章
- java float内存结构_Java后端开发岗必备技能:Java并发中的内存模型
- Silverlight+WCF 新手实例 象棋 棋子(三)
- html5怎么改为vue_【面试需要Vue全家桶】一文带你看透Vue前端路由
- POJ2421 Constructing Roads 最小生成树
- java-回调机制详解
- Vue项目启动后Error: Cannot find module ‘xxx’的解决方法
- python旋转matplotlib绘制的三维图
- Oracle字符到数值转换错误
- 玩音响发烧友必看的博客
- Google谷歌关键词监控系统
- Vue生命周期中对mounted、beforeUpdate、updated的理解
- 国内首家中高端自由职业者共享平台——易分之一,即将上线运营
- 超好看的导航页面(静态页面)
- 高级shell编程笔记(第三十三章 杂项)
- 数学物理方法 04 解析延拓
- CRMEB商业版聊天模块的学习(一)
- 笔记本投影仪连接方法
- Java毕业设计——>Thymeleaf+SpringBoot+Mybatis实现的齐贤易游网旅游信息管理系统
- 机器学习基石2(noise和error)
- lol 8.21服务器维护,LOL8.21PBE更新_LOL8.21PBE更新内容介绍_快吧游戏