查看原文
其他

R语言ggtern包画三元图详解

阿越 医学和生信笔记 2023-02-25

R语言画三元相图的包:ggtern

基本用法

# install.packages("ggtern")
library(ggtern)
## Warning: package 'ggtern' was built under R version 4.0.5
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.0.5
## Registered S3 methods overwritten by 'ggtern':
## method from
## grid.draw.ggplot ggplot2
## plot.ggplot ggplot2
## print.ggplot ggplot2
## --
## Remember to cite, run citation(package = 'ggtern') for further info.
## --
##
## Attaching package: 'ggtern'
## The following objects are masked from 'package:ggplot2':
##
## aes, annotate, ggplot, ggplot_build, ggplot_gtable, ggplotGrob, ggsave,
## layer_data, theme_bw, theme_classic, theme_dark, theme_gray, theme_light,
## theme_linedraw, theme_minimal, theme_void
## 基本用法
df = data.frame(x = runif(50),
y = runif(50),
z = runif(50),
Value = runif(50,1,10),
Group = as.factor(round(runif(50,1,2))))
ggtern(data=df,aes(x,y,z,color=Group)) +
theme_rgbw() +
geom_point() + geom_path() +
labs(x="X",y="Y",z="Z",title="Title")
plot of chunk unnamed-chunk-2

geom_xxx

此包支持很多geom_xxx,下面一一介绍。

## geom_crosshair_tern,geom_Tmark,geom_Rmark,geom_Lmark

set.seed(1)
df = data.frame(x=runif(10),y=runif(10),z=runif(10))
base = ggtern(df,aes(x,y,z)) + geom_point()
p1 <- base + geom_crosshair_tern()
p2 <- base + geom_Tmark()
p3 <- base + geom_Rmark()
p4 <- base + geom_Lmark()

library(ggExtra)
grid.arrange(p1,p2,p3,p4)
plot of chunk unnamed-chunk-3
## geom_confidence_tern
data(Feldspar)
ggtern(data=Feldspar,aes(An,Ab,Or)) +
geom_point() +
geom_confidence_tern()
plot of chunk unnamed-chunk-4
## geom_density_tern
data('Feldspar')
p1 <- ggtern(Feldspar,aes(Ab,An,Or)) +
geom_density_tern(aes(color=..level..),bins=5) +
geom_point()

data('Feldspar')
p2 <- ggtern(data=Feldspar,aes(Ab,An,Or)) +
stat_density_tern(
geom='polygon',
aes(fill=..level..),
bins=5,
color='grey') +
geom_point()
grid.arrange(p1,p2)
plot of chunk unnamed-chunk-5
## stat_interpolate_tern
data(Feldspar)
ggtern(Feldspar,aes(Ab,An,Or,value=T.C)) +
stat_interpolate_tern(geom="polygon",
formula=value~x+y,
method=lm,n=100,
breaks=seq(0,1000,by=100),
aes(fill=..level..),expand=1) +
geom_point()
plot of chunk unnamed-chunk-6
## geom_line
ggtern() +
geom_Tline(Tintercept=.5,arrow=arrow(), colour='red') +
geom_Lline(Lintercept=.2, colour='green') +
geom_Rline(Rintercept=.1, colour='blue')
plot of chunk unnamed-chunk-7
## geom_Xisoprop
data(Feldspar)
ggtern(data=Feldspar,aes(Ab,An,Or)) +
geom_Tisoprop(value=0.5) +
geom_Lisoprop(value=0.5) +
geom_Risoprop(value=0.5) +
geom_point()
plot of chunk unnamed-chunk-8
## geom_errorbar
tmp <- data.frame(x=1/3,
y=1/3,
z=1/3,
Min=1/3-1/6,
Max=1/3+1/6)
ggtern(data=tmp,aes(x,y,z)) +
geom_point() +
geom_errorbarT(aes(Tmin=Min,Tmax=Max),colour='red')+
geom_errorbarL(aes(Lmin=Min,Lmax=Max),colour='green')+
geom_errorbarR(aes(Rmin=Min,Rmax=Max),colour='blue')
plot of chunk unnamed-chunk-9
## geom_smooth_tern
data(Feldspar)
ggtern(data=Feldspar,aes(Ab,An,Or,group=Feldspar)) +
geom_smooth_tern(method=lm,fullrange=TRUE,colour='red') +
geom_point() +
labs(title="Example Smoothing")
plot of chunk unnamed-chunk-10
## geom_point_swap
data(Feldspar)
ggtern(Feldspar,aes(Ab,An,Or)) +
stat_confidence_tern(geom='polygon',aes(fill=..level..),color='white') +
geom_mask() +
geom_point_swap(aes(colour=T.C,shape=Feldspar),fill='black',size=5) +
scale_shape_manual(values=c(21,24)) +
scale_color_gradient(low='green',high='red') +
labs(title="Feldspar",color="Temperature",fill='Confidence')
plot of chunk unnamed-chunk-11
##
data(Feldspar)
x = ggtern(Feldspar,aes(Ab,An,Or,label=Experiment)) + geom_point()

#Default Behaviour
x + geom_label()
plot of chunk unnamed-chunk-12
## geom_label_viewport
library(ggplot2)
data(Feldspar)
base = ggtern(data=Feldspar,aes(Ab,An,Or)) +
geom_mask() +
geom_point() +
geom_label_viewport(x=0.5,y=0.5,label="Middle",color='red') +
geom_label_viewport(x=1.0,y=1.0,label="Top Right",color='blue') +
geom_label_viewport(x=0.0,y=0.0,label="Bottom Left",color='green') +
geom_label_viewport(x=0.0,y=1.0,label="Top Left",color='orange') +
geom_label_viewport(x=1.0,y=0.0,label="Bottom Right",color='magenta')

P1 <- base + geom_label_viewport(x=0.9,y=0.5,label="Clipping Turned Off",color='purple',hjust=0,clip='on')
P2 <- base + geom_label_viewport(x=0.9,y=0.5,label="Clipping Turned Off",color='purple',hjust=0,clip='off')

grid.arrange(base, p1, p2, ncol=3)
plot of chunk unnamed-chunk-13
## geom_text_viewport
library(ggplot2)
data(Feldspar)
base = ggtern(data=Feldspar,aes(Ab,An,Or)) +
geom_mask() +
geom_point() +
geom_text_viewport(x=0.5,y=0.5,label="Middle",color='red') +
geom_text_viewport(x=1.0,y=1.0,label="Top Right",color='blue') +
geom_text_viewport(x=0.0,y=0.0,label="Bottom Left",color='green') +
geom_text_viewport(x=0.0,y=1.0,label="Top Left",color='orange') +
geom_text_viewport(x=1.0,y=0.0,label="Bottom Right",color='magenta')
base
plot of chunk unnamed-chunk-14
## geom_mean_ellipse
data(Feldspar)
p1 <- ggtern(data=Feldspar,aes(An,Ab,Or)) +
geom_point() +
geom_mean_ellipse()
p2 <- ggtern(data=Feldspar,aes(Ab,An,Or)) +
theme_bw() +
stat_mean_ellipse(geom='polygon',steps=500,fill='red',color='black') +
geom_point()
grid.arrange(p1,p2,ncol=2)
plot of chunk unnamed-chunk-15
## geom_hex_tern
set.seed(1)
n = 1000
df = data.frame(x = runif(n),
y = runif(n),
z = runif(n),
wt = runif(n))
ggtern(df,aes(x,y,z)) +
geom_hex_tern(binwidth=0.05,
aes(value=wt),
fun=mean)
plot of chunk unnamed-chunk-16
## geom_tri_tern
set.seed(1)
n = 1000
df = data.frame(x = runif(n),
y = runif(n),
z = runif(n),
wt = runif(n))
#Equivalent of Hexbin
ggtern(df,aes(x,y,z)) +
geom_tri_tern(bins=10,aes(fill=..count..)) +
geom_point(size=0.25)
plot of chunk unnamed-chunk-17

本文内容主要来自于ggtern官网[1],已做适当修改。


欢迎大家关注我的公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!

参考资料

[1]

ggtern: http://www.ggtern.com/


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存