什么是晒保基圖
勺话拢基圖(Sankey diagram),即煞鞑#基能量分流圖酸些,也叫桑基能量平衡圖檐蚜。它是一種特定類型的流程圖魄懂,圖中延伸的分支的寬度對應數(shù)據(jù)流量的大小,比較適用于用戶流量等數(shù)據(jù)的可視化分析闯第。因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機的能源效率圖”而聞名逢渔,此后便以其名字命名為“桑基圖”乡括。
用一個故事來介紹一下伤嗬基圖:
這個非常著名的圖是Charles Minard在1869年所作的拿破侖東征俄國的信息圖智厌。Charles Minard是信息圖表的之父,他是信息圖領域的創(chuàng)始者盲赊。這張圖描繪的是拿破侖在1812到1813年進攻俄國的情況铣鹏。它的背景是一個真實的地圖,西邊是波蘭的邊境哀蘑,東邊是莫斯科诚卸。圖上那條主線的寬度代表拿破侖軍隊的人數(shù),黃色表示進攻路線绘迁,黑色表示撤退的路線: 他開始于42萬人合溺,在向莫斯科進軍的過程中喪失了很多人,到達莫斯科時只剩下10萬人缀台,而最后從莫斯科活著返回的只剩下1萬人棠赛。
為什么說這個圖好呢,因為除了主線的寬度之外膛腐,這張圖還告訴了你更多的東西睛约。畫面下面的折線圖告訴你當時的溫度,其中最高的點是0度哲身,最低到達過零下30度辩涝,回城的黑線周圍嗨標注了月份,可以看出勘天,拿破侖的軍隊在達打到莫斯科的時候已經(jīng)是將近十月分了怔揩,等到完全撤離俄國已經(jīng)是12月份了,如果你仔細觀察脯丝,會發(fā)現(xiàn)在撤退過程中他們路過了一條叫Studienska的河沧踏,軍隊人數(shù)在河兩岸出現(xiàn)了劇減,原來那個時候天氣寒冷巾钉,軍隊長促情況下淌水過河,于是在這條寒冷的河中凍死了很多人秘案。
根據(jù)Edward Tufte所總結的信息設計原則:
- 這個圖讓顯示出了比較關系(Show comparisons, contrasts, differences)砰苍,比如軍隊人數(shù)的起始時候的寬度和結束時候的寬度的強烈對比,比如過那條河流的時候軍隊人數(shù)的劇烈的變化等等阱高。
- 這個圖解釋了因果關系(Show causality, mechanism, structure, explanation)赚导,比如時間,溫度和軍隊人數(shù)的關系赤惊。
- 這個圖有多個變量(Multivariate analysis)吼旧,1), 軍隊人數(shù)。 2), 地理的位置(經(jīng)度和緯度)3), 軍隊的行進方向未舟。 4), 溫度圈暗。 5), 時間掂为。
所有的這些信息都不是獨立存在的,他們結合在一起员串,將觀眾帶入當時的拿破侖的旅程勇哗,同時能讓人感受到無情的戰(zhàn)爭奪走人們生命的痛苦。
纱缙耄基圖怎么看
- 線條的走向
- 粗細的變化
- 節(jié)點間的比較
繪制屬于自己的捎担基圖
現(xiàn)如今的可視化軟件行業(yè)如此發(fā)達,制作此類擅祓校基圖已絕非難事扰法,從最高端的JS庫(D3、Echarts毅厚、highchart)到主流的數(shù)據(jù)科學編程工具(R塞颁、Python等)亦或者人人都能上手的自助式BI工具(PowerBI、Tableau等)都可以勝任此項工作卧斟。
library(ggalluvial)
#install.packages("ggalluvial")
library(reshape2)
mydata<-read.table("igraph//otu_table_group.g.relative.xls",header = T,sep = "\t")
mydata<-head(mydata,n=10)
mydata<-mydata[,-length(colnames(mydata))]
mydata<-melt(mydata,variable.name="Group",value.name="Abundance")
head(mydata)
ggplot(data = mydata,
aes(axis1 = Taxonomy, axis2 = Group,
weight = Abundance)) +
scale_x_discrete(limits = c("Taxonomy", "Group"), expand = c(.01, .05)) +
geom_alluvium(aes(fill = Taxonomy)) +
geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) +
#theme_minimal() +
#theme_tropical()
ggtitle("Taxonomy abundance in each group")
我們可以把各個層級都畫出來殴边,這樣看的更具體:
library(reshape2)
library(ggalluvial)
library(tidyverse)
mydata<-read.table("igraph//otu_table_group.g.relative.xls",header = T,sep = "\t")
mydata<-head(mydata,n=10)
mydata<-separate(data = mydata, col = Tax_detail, into = c("k", "p","c","o","f","g"), sep = ";")
#mydata$Tax_detail= gsub(";","\t",mydata$Tax_detail)
#mydata<-mydata[,-length(colnames(mydata))]
mydata<-melt(mydata,variable.name="Group",value.name="Abundance")
mydata$genus<-mydata$g
ggplot(data = mydata,
aes(axis1 = k, axis2 = p,axis3 = c,axis4 = o,axis5 = f,axis6 = g,axis7 = Group,
weight = Abundance)) +
scale_x_discrete(limits = c("k", "p","c","o","f","g","Group","Abundance"), expand = c(.01, .05)) +
geom_alluvium(aes(fill = genus)) +
geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) +
#theme_minimal() +
#theme_tropical()
#theme_matrix()
theme_bvbw()
ggtitle("Taxonomy abundance in each group")
最后,畫一個DNA:
#install.packages("riverplot")
library( riverplot )
plot.new()
par( usr= c( 0, 4, -2.5, 2.5 ) )
w <- 0.4
cols <- c( "blue", "green" )
init <- c( -0.8, -0.5 )
pos <- c( 1, -1 )
step <- 0.5
for( i in rep( rep( c( 1, 2 ), each= 2 ), 5 ) ) {
curveseg( init[i], init[i] + step, pos[1], pos[2], width= w, col= cols[i] )
init[i] <- init[i] + step
pos <- pos * -1
}
兩種不同的信息可視化
Sankey diagram
百度百科||烧溆铮基圖
纱赴叮基圖有何作用,砂逡遥基圖又是怎么做出來的是偷?
riverplot繪制桑基圖
流量結構分布圖——赡汲眩基圖(Sankey)
Alluvial Diagrams in ggplot2
ggalluvial:沖擊圖展示組間變化蛋铆、時間序列和復雜多屬性alluvial diagram
BioSankey
Calypso