对于pca , nmds, pcoa 这些排序分析来说,我们可以从图中看出样本的排列规则,比如分成了几组。

为例样本分组更加的直观,我们可以根据实验设计时的样本分组情况,对属于同一个group的样本添加1个椭圆或者其他多边形。

新版本的ggplot2 中提供了stat_ellipse 这个stat, 可以方便的实现上面的效果。

代码示例:

ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) +
geom_point() +
stat_ellipse(level = 0.8) +
stat_ellipse(level = 0.9)

效果图如下:

通过stat_ellipse 简单有方便,其中的level 参数指定了拟合椭圆的路径时的置信度,这个数值越大,椭圆覆盖的点就越多;

这里我添加两个椭圆,只是为了美观,ggplot2 图层叠加的语法使得添加多个椭圆这么方便,不得不为其设计者点赞;

在旧版本的ggplot2 中, 是没有stat_ellipse; 而官方的开发者在新版的ggplot2 中加入了这一功能,可想而知这个应用的受欢迎程度,

除了添加椭圆,也可以使用多边形来描述分组,也很美观,只不过代码没有椭圆那么简洁

代码示例:

library(ggplot2)
library(plyr)
ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) +
geom_point() +
stat_ellipse()
# faithful
# x y group
# 1 2 1
# 1 3 1
# 2 5 2
# 1 3 2
faithful$group <- 1
faithful$group[data$eruptions > 3] <- 2
find_hull <- function(df) df[chull(df[[1]], df[[2]]), ]
hulls <- ddply(faithful, "group", find_hull)
ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) +
geom_point() +
geom_polygon(data = hulls, alpha = 0.5, aes(fill = factor(group)),show.legend = F)

效果图如下:

由于没有内置的stat 函数,所以添加了许多代码来计算对应的多边形的路径,如果将其写成对应的stat 函数,会更加的方便。

pca , nmds , pcoa 图添加分组的椭圆的更多相关文章

  1. PCA和PCoA

    讲解很详细:http://blog.genesino.com/2016/10/PCA/ PCA分析一般流程: 中心化(centering, 均值中心化,或者中位数中心化),定标(scale,如果数据没 ...

  2. 【mq】从零开始实现 mq-11-消费者消息回执添加分组信息 pull message ack groupName

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  3. StarUML中时序图添加小人

    转载于 http://blog.csdn.net/longyuhome/article/details/9011629 在看时序图的例子的时候,发现有些的时序图上有小人的图标,可是一些UML工具却没有 ...

  4. ECharts 报表事件联动系列二:柱状图,饼状图添加事件

    代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  5. ECharts饼状图添加事件

    和柱状图添加事件没有区别,详情如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content ...

  6. 将阿里矢量图添加到element-ui

    在阿里矢量图的操作 选择需要的图标添加至购物车   选择图标 将购物车中的图标, 添加至项目   添加至项目 会自动跳转到我的项目   项目页面 在 更多操作 中选择 编辑项目   更多操作 将 Fo ...

  7. echarts堆叠图添加总量

    echarts在使用中往往会遇到需要展示总量信息的情况,比较典型的就是3维统计的堆叠柱状图 堆叠是在柱状图的基础上,给几项设置同一stack来实现的.不考虑在tips中实现总和,有两种方式可以实现总和 ...

  8. Echarts 关系图 添加点击事件

    /*实现的效果是:在关系图上加点击事件,点击某个点,得到改点代表的内容,并且实现一个跳转效果. 关键代码已用红色标出*/ <!DOCTYPE html> <html lang=&qu ...

  9. 利用动态图添加Loading动画

    opacity:CSS3中的属性,调节透明度,一般取值0.5 添加思想: 1.对超链接添加点击事件,通过new {@onclick="showLoading()"} Html.Ac ...

随机推荐

  1. 张量系列-Tensor(01)

    张量——N-dim 数组 1. 数组的创建 2. 符号数组的创建 3. 一维数组改变形状创建 4. 切片操作 5. 符号数组操作 6. 数组转化为列表 7. 维度为2的数组可以转化为矩阵  

  2. Angular features and services overview

    模块(Modules) 组件(Components) 模板(Templates) 元数据(Metadata) 数据绑定(Data binding) 指令(Directives) 服务(Services ...

  3. PCB封装步骤教程

    疑问解答:为什么要封装? 就是元器件往PCB板上焊接时在板上的焊盘尺寸. 这里我以AT89C51单片机为例: 1.首先新建一个PCB元件库. 再找一个路径保存起来命名为DIP40,方便以后寻找 选择菜 ...

  4. C# 的枚Enum

    简短的解释: enum 关键字用来声明枚举,一种包含一组被称为枚举数列表的 enum myType{ a, b, c,} int num = 1;Console.Write((myType)num); ...

  5. Reactor 3 学习笔记(1)

    Reactor 3 与之前学习的RxJava是同一类(反应式编程)框架,基本概念大致差不多,简单记录一下: Reactor 3 利用了java 8中的CompletableFuture.Stream. ...

  6. TThread深入分析

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是 对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synch ...

  7. JSON序列——根据JSON生成事务性SQL

    JSON序列——根据JSON生成事务性SQL procedure TForm1.Button5Click(Sender: TObject); begin var json: string :='' + ...

  8. AVL树平衡旋转详解

    AVL树平衡旋转详解 概述 AVL树又叫做平衡二叉树.前言部分我也有说到,AVL树的前提是二叉排序树(BST或叫做二叉查找树).由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, ...

  9. password、文件MD5加密,passwordsha256、sha384、sha512Hex等加密

    package encryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io. ...

  10. C# System.IO.File

    using System; using System.IO; class Test { public static void Main() { string path = @"c:\temp ...