origin三元相图_三元相图怎么看怎么画(附R代码示例)
什么是三元相图
三元图是重心图的一种,它有三个变量,但需要三者总和为恒定值。在一个等边三角形坐标系中,图中某一点的位置代表三个变量间的比例关系。在群体遗传学中,它被称做Finetti图;在博弈论中,常被称为simplex图。
在高通量测序分析领域中,最常用的是两组间的比较,展示的方式有火山图、曼哈顿图等,而三组互相两两比较需要展示三个图吗?就没有更好的展示方式了吗?三元图的引入解决了这一问题。近年来,常用于展示三组间的相对基因表达或OTU丰度,即美观,又有意义。
三元相图怎么看
常用三角形来表示三元合金的成分,这样的三角形称为浓度三角形或成分三角形(CompositionTriangle)。常用的成分三角形是等边三角形和直角三角形以及等腰三角形。是应用最为广泛的还是等边三角形,这里也主要介绍等边三角形的三元相图。
如图所示:
oa+ob+oc=AB=BC=CA
由于oa=bC=WA
ob=Ac=WB
oc=Ba=WC
因此,可用
oa代表A组元的含量,
ob代表B组元的含量,
oc代表C组元的含量。
所以你需要画一个等边三角形还模拟一下,需要注意的是箭头的方向,还有就是三角形是等边的很是对称,所以要把字母标好。相信我,你会乱的,然后就好了。
快速看谁多谁少
快速理解位置意义:重心图,你看目标点离那个角近,就是它在相应的组中相对比例高;反之离某个角远,其相对比例也低。
精确读三组比例
双平行线/小等边三角形法:由点向底边做两条平行线建立小正三角形,将底边分成三段,中间为顶部组所占比例,左段为右侧组比例,右段为左侧组比例。
垂线法:点向三条边做垂线,穿越的格数,即对角组中所占比例;
向各边零坐标方向作平行线法:按坐标系组的颜色和数值直接读各组比例;
三元图规律
三角形边平等线上的点,在平行线对应的顶点组所占比例是恒定的。
顶点到底边直线上的点,上面任意点中两底角组相对比例恒定。
三元图点大小的意义
通常代表基因/OTU的相对表达/丰度,而且为了防止点过大或过小,数据通常还需要经过log2变换,将表达范围从0-1百万,转换为0-20的区间;如果是OTU的千分比,则转换为0-10的区间。
三元图优点
打破了普通两两比较火山图展示方式,可将三组两两比较和三组的相对关系展示在同张图中;
两组只能比较一次,三组可以比较三次,可説的结果非常多;
三是个非常好的数字,2组比较太常见且单调,4组及以上信息量大让人晕,三组正好高端大气上档次,而且还有内涵。
用R绘制三元相图
Software、
根据wikipedia的介绍目前有以下方法可以绘制三元相图:
R packages:
Ternary, which employs the native plot functions;
Plot-ly, which uses a bespoke suite of plotting functions;
vcd, which contains the function ternaryplot;
ggtern, an extension to ggplot2.
ternary, a python library for ternary plotting
ternplot for Matlab
ternaryplot.com online tool for ternary plotting
当然,我们就介绍集中R做的三元相图。
用来作图的数据是这样的:
vcd 包
library(vcd)
data = read.table("otu_table_group.g.relative.xls",head=T,sep="\t",comment.char = "")
data1=head(data,n=12)
s=data1[c("AA","BB","CC")]
smM
smM
colors
ternaryplot(smM,prop_size = TRUE,grid_color = "black",labels_color = "black",main ="ternaryplot",labels = "outside",col=c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB","#98FB98","#F08080","#1E90FF","#7CFC00","#808000","#7B68EE","#483D8B"))
grid_legend(0.85, 0.7, 19,colors,data1[,1],frame = FALSE,size=1)
dev.off()
图片.png
?ternaryplot()# 获得示例文档。
ggtern包
喜欢(习惯)ggplot的朋友可能会更加喜欢ggtern包。它是基于ggplot2的,参数设置方面也是一致的。
library(ggtern)
?ggtern()
s$DD
colors
ggtern(data=s,aes(AA,BB,CC)) +
geom_point(aes(size=DD),col=colors) + #define data geometry
theme_showarrows() + #draw labeled arrows beside axes
ggtitle("My Favorite Color") + #add title
xlab("AA") + #replace default axis labels
ylab("CC") +
zlab("BB")+
theme(legend.position="none")
grid_legend(0.85, 0.7, 19,colors,data1[,1],frame = FALSE,size=1)
如果变量较多可采用核密度估算,并使用轮廓显示结果.
#Or you can apply a color gradient to space between the contour lines
ggtern(data=s,aes(AA,BB,CC)) + #define data sources
stat_density_tern(aes(fill=..level.., alpha=..level..),geom='polygon') +#now you need to use stat_density_tern
scale_fill_gradient2(high = "red") + #define the fill color
guides(color = "none", fill = "none", alpha = "none") +#we don't want to display legend items
#theme_bvbg()
#theme_bvbw()
#theme_bluelight()
theme_tropical()
#theme_matrix()
#theme_custom()
#theme_void()
#theme_rgbg()
#theme_bw()
#theme_minimal()
#theme_rgbw()
#theme_light()
#theme_dark()
ggtern(data=s,aes(AA,BB,CC)) +
stat_density_tern(aes(fill=..level.., alpha=..level..), geom='polygon') +
scale_fill_gradient2(high = "blue") +
geom_point() +
theme_showarrows() +
ggtitle("My Favorite Color") +
xlab("AA") +
ylab("BB") +
zlab("CC") +
guides(color = "none", fill = "none", alpha = "none")
Ternary
如果你想一步一步地构建一个三元相图那么Ternary也许是一个不错的选择。
#install.packages('Ternary')
library('Ternary')
par(mfrow=c(2, 2), mar=rep(0.5, 4))
for (dir in c('up', 'right', 'down', 'le')) {
TernaryPlot(point=dir, atip='A', btip='B', ctip='C', alab='Aness', blab='Bness', clab='Cness')
TernaryText(list(A=c(10, 01, 01), B=c(01, 10, 01), C=c(01, 01, 10)), col=cbPalette8[4], font=2)
}
par(mfrow=c(1, 2), mar=rep(0.3, 4))
TernaryPlot(alab="Redder\u2192", blab="Greener \u2192", clab="Bluer \u2192",
point='right', lab.cex=0.8, grid.minor.lines = 0,
grid.lty='solid', col=rgb(0.9, 0.9, 0.9), grid.col='white',
axis.col=rgb(0.6, 0.6, 0.6), ticks.col=rgb(0.6, 0.6, 0.6),
padding=0.08)
data_points
R = c(255, 0, 0),
O = c(240, 180, 52),
Y = c(210, 222, 102),
G = c(111, 222, 16),
B = c(25, 160, 243),
I = c(92, 12, 243),
V = c(225, 24, 208)
)
AddToTernary(points, data_points, bg=vapply(data_points, function (x) rgb(x[1], x[2], x[3], 128, maxColorValue=255), character(1)), pch=21, cex=2.8)
AddToTernary(text, data_points, names(data_points), cex=0.8, font=2)
legend('bottomright',
pch=21, pt.cex=1.8,
pt.bg=c(rgb(255, 0, 0, 128, NULL, 255),
rgb(240, 180, 52, 128, NULL, 255),
rgb(210, 222, 102, 128, NULL, 255),
rgb(111, 222, 16, 128, NULL, 255)),
legend=c('Red', 'Orange', 'Yellow', 'Green'),
cex=0.8, bty='n')
###
# Next plot:
###
TernaryPlot('Steam', 'Ice', 'Water',
grid.lines=5, grid.lty='dotted',
grid.minor.lines = 1, grid.minor.lty='dotted',
point='West')
HorizontalGrid()
middle_triangle
30, 40, 30,
30, 30, 40,
55, 20, 25
), ncol=3, byrow=TRUE)
TernaryPolygon(middle_triangle, col='#aaddfa', border='grey')
TernaryLines(list(c(0, 100, 0), middle_triangle[1, ]), col='grey')
TernaryLines(list(c(0, 0, 100), middle_triangle[2, ]), col='grey')
TernaryLines(list(c(100, 0, 0), middle_triangle[3, ]), col='grey')
origin三元相图_三元相图怎么看怎么画(附R代码示例)相关推荐
- java画方块_[求助]用Swing就画一个方块代码出错了
[求助]用Swing就画一个方块代码出错了 本意就是画个方块... 我都不行...郁闷..........帮帮我. 然后最好能告诉我下如果只想画个方块我写的代码哪句是废话..谢谢! 等待ING.... ...
- cv python 样例_【CV实战】OpenCV—Hello world代码示例
简介OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数 ...
- html登录界面设计代码_最简洁实现Github登录的JS代码示例
本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github 大纲 概述 实现思路分析 在Github官网 ...
- excel计算二元线性回归_多重共线性及解决方法(附R语言代码)
一.多重共线性及其危害 我有一组自变量: 它们满足下列关系: 那么我们称这四个变量间存在多重共线性. 这就意味着,一个变量可以被另外几个变量来解释,这就会带来两个后果 1.尽管系数估计的无偏性没有收到 ...
- java 微信发送模板的_微信开发:微信发送模板消息代码示例
最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码. 1.获取access token,至于acc ...
- java bitset用途_浅谈Java BitSet使用场景和代码示例
搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...
- bp神经网络预测python代码_机器学习之多层神经网络(附Python代码和数据)
1 引言 多层神经网络,Multiple-layers Perceptron (MLP),又被称为多层感知机,是机器学习中深度学习的典型算法.关于多层神经网络的算法原理,我们在Stata和R实现的文章 ...
- java集合框架的结构_集合框架(Collections Framework)详解及代码示例
简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...
- 距离矢量路由算法的java代码_八大排序算法比较(附Java代码)
冒泡排序 /*** 冒泡排序 比较好理解* 两两相比 较大的放后面* 时间复杂度O(n^2)*//*** 改进前的冒泡排序算法进行100,000数据排序运行时间为:3829ms* 优化后的冒泡排序算法 ...
最新文章
- mysql 数据库 数组类型转换_mysql数字类型的数据如何进行转换?
- C# CreateParams的使用(解决闪屏问题)
- controller需要捕获异常吗_Spring之Controller异常处理
- C#值类型和引用类型的不同
- java 使用json-lib 对象,String,json互转
- python是开源工具吗_微软最强 Python 自动化工具开源了!不用写一行代码
- PAT甲题题解-1091. Acute Stroke (30)-BFS
- @Valid不起效,发现BindingResult读取不到Error信息
- oracle 12c pdb开启和关闭,及设置开机自启动
- I00009 用1生成回文数
- 游戏开发者如何有效的编写游戏策划文档
- Userscript+ 去除广告
- 为什么远程计算机后会黑屏,电脑上钉钉怎么远程,为什么远程后黑屏?
- [NN]前向神经网络的tf.keras详细实现教学
- 基于uFUN开发板和扩展板的联网校准时钟
- 【MFC】Ribbon界面开发(一)
- 基于OpenGL的地形建模技术的研究与实现
- 同质化游戏做出不同点在于背景音乐
- ALSA-ASOC音频驱动框架简述
- 测试颜色度的软件是什么情况,分光测色仪的测色应用以及注意事项