Gramm工具箱教程

Gramm工具箱用于matlab绘图,特别是多组数据之间对比的图,内含线性拟合、95%置信区间绘制等常规统计,就不用再去为编写脚本语句。Gramm包含多种常用图表的examples.m和gramm cheat sheet,仅只用找到自己想绘制的图形,然后将对应examples语句改写即可,方便快捷。

下载

https://github.com/piermorel/gramm

使用

  1. 运行examples.m,查看想要绘制的类似图形。

例如我想绘制例子中的第四个子图

  1. 找到相应的源代码

从说明文档里知道这个图叫做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();
  1. 我们来读一下这段代码(看我的注释)

% 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();  %绘画呈现

  1. 绘制自己的图

如文章开头所说,我想单独绘制第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 改进
存在的问题:

  1. 我想要的是上中下三条分开的曲线
  2. 曲线没有平滑,显得实验次数过少,要么增实验trial,要么就平滑,我选择平滑

针对上面两个问题,改进方法如下:
上中下排列
仿照Grouping option in gramm得第(3,1)个图添加g.facet_grid(cind,[]) %按cind里的group行排列画布
平滑
g.state_summary(‘type’, ‘fitnormalci’)

Enjoy it!

Matlab绘图工具箱Gramm相关推荐

  1. Matlab之绘图工具箱大全

    目录 一.序言 二.绘图工具箱的使用 1.输入数据 2.绘图工具箱的使用 2.1 plot工具箱的使用 2.2线图 2.3 针状图与阶梯图 2.4条形图 2.5散点图 2.6饼图 2.7直方图 2.8 ...

  2. 如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)

    如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱) 转载:https://blog.csdn.net/xgxyxs/article/details/53265318 最近一段 ...

  3. matlab数理统计工具箱,Matlab数理统计工具箱

    Matlab数理统计工具箱应用简介 1. 概述 Matlab的数理统计工具箱是Matlab工具箱中较为简单的一个,其牵扯的数学知识是大家都很熟悉的数理统计,因此在本文中,我们将不再对数理统计的知识进行 ...

  4. matlab仿真plant函数,(整理)matlab预测控制工具箱函数.

    精品文档 精品文档 MATLAB 预测控制工具箱函数 1通用的传递函数转变为MPC 传递函数模型 (1) 2MPC 传递函数模型转换为MPC 阶跃响应模型 (1) 3基于阶跃响应模型的控制器设计和仿真 ...

  5. matlab 取点画图,matlab绘图小技巧-图像光滑数据取点

    原标题:matlab绘图小技巧-图像光滑&数据取点 小助理之前介绍过Matlab,,一款计算机.医学与生物学的软件,今天转载一篇实操,简单易上手~ 用cftool插值绘图得到拟合后的图像,然后 ...

  6. Matlab机器人工具箱(0)——旋转与平移变换

    Matlab机器人工具箱(0)--旋转与平移变换 前言 旋转变换 旋转矩阵与可视化 欧拉角 RPY角 角轴 单位四元数 平移与旋转组合 总结 参考资料 前言 本文主要介绍如何使用matlab工具箱对旋 ...

  7. Matlab绘图案例,MATLAB画图大法,附详细代码

    目录 1. 使用subplot创建多个子图 2. 绘制误差棒图 3. 绘制条形堆积图 4. 绘制堆积面积图 5. 绘制直方图并拟合曲线 6. 绘制等高线图 7. 绘制光滑的曲线 8. 绘制彩虹图 9. ...

  8. Matlab优化工具箱和模拟退火算法

    Matlab优化工具箱主要有以下4种求解器: 1.最小值优化 2.多目标最小值优化 3.方程求解器 4.最小二乘(曲线拟合)求解器 一.最小值优化: 1.标量最小值优化:使用函数fminbnd 例:对 ...

  9. MATLAB图像处理工具箱

    版权说明 ,转自 https://blog.csdn.net/BAR_WORKSHOP/article/details/81009900 自己在学习过程中查阅资料整理了MATLAB图像处理工具箱中函数 ...

最新文章

  1. java float内存结构_Java后端开发岗必备技能:Java并发中的内存模型
  2. Silverlight+WCF 新手实例 象棋 棋子(三)
  3. html5怎么改为vue_【面试需要Vue全家桶】一文带你看透Vue前端路由
  4. POJ2421 Constructing Roads 最小生成树
  5. java-回调机制详解
  6. Vue项目启动后Error: Cannot find module ‘xxx’的解决方法
  7. python旋转matplotlib绘制的三维图
  8. Oracle字符到数值转换错误
  9. 玩音响发烧友必看的博客
  10. Google谷歌关键词监控系统
  11. Vue生命周期中对mounted、beforeUpdate、updated的理解
  12. 国内首家中高端自由职业者共享平台——易分之一,即将上线运营
  13. 超好看的导航页面(静态页面)
  14. 高级shell编程笔记(第三十三章 杂项)
  15. 数学物理方法 04 解析延拓
  16. CRMEB商业版聊天模块的学习(一)
  17. 笔记本投影仪连接方法
  18. Java毕业设计——>Thymeleaf+SpringBoot+Mybatis实现的齐贤易游网旅游信息管理系统
  19. 机器学习基石2(noise和error)
  20. lol 8.21服务器维护,LOL8.21PBE更新_LOL8.21PBE更新内容介绍_快吧游戏

热门文章

  1. 13.56MHz 非接触读卡器芯片
  2. 字体文件压缩——字蛛(FontSpider)
  3. LDAP安装、使用。
  4. 10分钟带你梳理中国电商行业的底层逻辑
  5. ajax上传文件之ajaxfileupload使用详解
  6. 回收站里的文件删除了怎么恢复
  7. Linux 网络之netstat
  8. [附源码]java毕业设计家居装修网站
  9. 解决WindowsForm窗体假死的状态
  10. 给你的宠物做个玩具吧