三元相圖怎么看怎么畫(附R代碼示例)

什么是三元相圖

三元圖是重心圖的一種,它有三個(gè)變量,但需要三者總和為恒定值谎懦。在一個(gè)等邊三角形坐標(biāo)系中,圖中某一點(diǎn)的位置代表三個(gè)變量間的比例關(guān)系溃斋。在群體遺傳學(xué)中界拦,它被稱做Finetti圖;在博弈論中梗劫,常被稱為simplex圖享甸。

在高通量測(cè)序分析領(lǐng)域中,最常用的是兩組間的比較梳侨,展示的方式有火山圖蛉威、曼哈頓圖等,而三組互相兩兩比較需要展示三個(gè)圖嗎走哺?就沒有更好的展示方式了嗎蚯嫌?三元圖的引入解決了這一問題。近年來丙躏,常用于展示三組間的相對(duì)基因表達(dá)或OTU豐度择示,即美觀,又有意義晒旅。

三元相圖怎么看

常用三角形來表示三元合金的成分栅盲,這樣的三角形稱為濃度三角形或成分三角形(CompositionTriangle)。常用的成分三角形是等邊三角形和直角三角形以及等腰三角形废恋。是應(yīng)用最為廣泛的還是等邊三角形谈秫,這里也主要介紹等邊三角形的三元相圖。

如圖所示:
oa+ob+oc=AB=BC=CA
由于oa=bC=WA
ob=Ac=WB
oc=Ba=WC
因此鱼鼓,可用
oa代表A組元的含量孝常,
ob代表B組元的含量,
oc代表C組元的含量蚓哩。


所以你需要畫一個(gè)等邊三角形還模擬一下构灸,需要注意的是箭頭的方向,還有就是三角形是等邊的很是對(duì)稱,所以要把字母標(biāo)好喜颁。相信我稠氮,你會(huì)亂的,然后就好了半开。

  • 快速看誰多誰少
    快速理解位置意義:重心圖隔披,你看目標(biāo)點(diǎn)離那個(gè)角近,就是它在相應(yīng)的組中相對(duì)比例高寂拆;反之離某個(gè)角遠(yuǎn)奢米,其相對(duì)比例也低。

  • 精確讀三組比例

  1. 雙平行線/小等邊三角形法:由點(diǎn)向底邊做兩條平行線建立小正三角形纠永,將底邊分成三段鬓长,中間為頂部組所占比例,左段為右側(cè)組比例尝江,右段為左側(cè)組比例涉波。

垂線法:點(diǎn)向三條邊做垂線,穿越的格數(shù)炭序,即對(duì)角組中所占比例啤覆;
向各邊零坐標(biāo)方向作平行線法:按坐標(biāo)系組的顏色和數(shù)值直接讀各組比例;

  • 三元圖規(guī)律
    三角形邊平等線上的點(diǎn)惭聂,在平行線對(duì)應(yīng)的頂點(diǎn)組所占比例是恒定的窗声。
    頂點(diǎn)到底邊直線上的點(diǎn),上面任意點(diǎn)中兩底角組相對(duì)比例恒定辜纲。

  • 三元圖點(diǎn)大小的意義
    通常代表基因/OTU的相對(duì)表達(dá)/豐度笨觅,而且為了防止點(diǎn)過大或過小,數(shù)據(jù)通常還需要經(jīng)過log2變換侨歉,將表達(dá)范圍從0-1百萬,轉(zhuǎn)換為0-20的區(qū)間揩魂;如果是OTU的千分比幽邓,則轉(zhuǎn)換為0-10的區(qū)間。

  • 三元圖優(yōu)點(diǎn)
    打破了普通兩兩比較火山圖展示方式火脉,可將三組兩兩比較和三組的相對(duì)關(guān)系展示在同張圖中牵舵;
    兩組只能比較一次,三組可以比較三次倦挂,可説的結(jié)果非常多畸颅;
    三是個(gè)非常好的數(shù)字,2組比較太常見且單調(diào)方援,4組及以上信息量大讓人暈没炒,三組正好高端大氣上檔次,而且還有內(nèi)涵犯戏。

用R繪制三元相圖

Software送火、
根據(jù)wikipedia的介紹目前有以下方法可以繪制三元相圖:

當(dāng)然拳话,我們就介紹集中R做的三元相圖。

用來作圖的數(shù)據(jù)是這樣的:


  • 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<-as.matrix(s)
                  
smM<-smM+0.000000000000000000001
colors<-c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB","#98FB98","#F08080","#1E90FF","#7CFC00","#808000","#7B68EE","#483D8B")
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包

喜歡(習(xí)慣)ggplot的朋友可能會(huì)更加喜歡ggtern包弃衍。它是基于ggplot2的,參數(shù)設(shè)置方面也是一致的坚俗。

library(ggtern)
?ggtern()
s$DD<-apply(s,1,sum)
colors<-c("#DC143C","#0000FF","#20B2AA","#FFA500","#9370DB","#98FB98","#F08080","#1E90FF","#7CFC00","#808000","#7B68EE","#483D8B")
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)

如果變量較多可采用核密度估算镜盯,并使用輪廓顯示結(jié)果.

#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

如果你想一步一步地構(gòu)建一個(gè)三元相圖那么Ternary也許是一個(gè)不錯(cuò)的選擇。

#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 <- list(
  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 <- matrix(c(
  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')

Ternary plot
百科三元相圖
擴(kuò)增子圖片解讀7三元圖:美的不要不要的猖败,再多用也不過分
Creating ternary plots with Ternary
DRAFT Triad Data Visualizations: Part 1
Legends (ggplot2)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末速缆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辙浑,更是在濱河造成了極大的恐慌激涤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件判呕,死亡現(xiàn)場(chǎng)離奇詭異倦踢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侠草,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門辱挥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人边涕,你說我怎么就攤上這事晤碘。” “怎么了功蜓?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵园爷,是天一觀的道長。 經(jīng)常有香客問我式撼,道長童社,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任著隆,我火速辦了婚禮扰楼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘美浦。我一直安慰自己弦赖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布浦辨。 她就那樣靜靜地躺著蹬竖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上案腺,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天庆冕,我揣著相機(jī)與錄音,去河邊找鬼劈榨。 笑死访递,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的同辣。 我是一名探鬼主播拷姿,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旱函!你這毒婦竟也來了响巢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤棒妨,失蹤者是張志新(化名)和其女友劉穎踪古,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體券腔,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伏穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纷纫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枕扫。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辱魁,靈堂內(nèi)的尸體忽然破棺而出烟瞧,到底是詐尸還是另有隱情,我是刑警寧澤染簇,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布参滴,位于F島的核電站,受9級(jí)特大地震影響锻弓,放射性物質(zhì)發(fā)生泄漏砾赔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一弥咪、第九天 我趴在偏房一處隱蔽的房頂上張望过蹂。 院中可真熱鬧十绑,春花似錦聚至、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春贷币,著一層夾襖步出監(jiān)牢的瞬間击胜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工役纹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偶摔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓促脉,卻偏偏與公主長得像辰斋,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘸味,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容