ggplot2: Sankey plot

https://www.jianshu.com/p/b066bb016a73
https://www.jianshu.com/p/1fc465b1a41d

基于 ggplot2 + ggforce

用于描述数据从一系列节点到另一系列节点之间的流动情况


Sankey plot

示例一

require(ggforce)
require(tidyr)
require(reshape2)

data <- reshape2::melt(Titanic)[10:25,]

data <- gather_set_data(data, 1:4)  '#数据结构在下面

ggplot(data, aes(x, id = id, split = y, value = value)) +
  geom_parallel_sets(aes(fill = Sex), alpha = 0.4, axis.width = 0.3) +
  geom_parallel_sets_axes(axis.width = 0.3, colour = "black", fill = "white" ) + 
  geom_parallel_sets_labels(colour = 'black', angle = 0) +
  theme_classic()  #示例一
'#数据结构

> data
    Class    Sex   Age Survived value id        x      y
10    2nd   Male Adult       No   154  1    Class    2nd
11    3rd   Male Adult       No   387  2    Class    3rd
12   Crew   Male Adult       No   670  3    Class   Crew
13    1st Female Adult       No     4  4    Class    1st
14    2nd Female Adult       No    13  5    Class    2nd
15    3rd Female Adult       No    89  6    Class    3rd
16   Crew Female Adult       No     3  7    Class   Crew
17    1st   Male Child      Yes     5  8    Class    1st
18    2nd   Male Child      Yes    11  9    Class    2nd
19    3rd   Male Child      Yes    13 10    Class    3rd
20   Crew   Male Child      Yes     0 11    Class   Crew
21    1st Female Child      Yes     1 12    Class    1st
22    2nd Female Child      Yes    13 13    Class    2nd
23    3rd Female Child      Yes    14 14    Class    3rd
24   Crew Female Child      Yes     0 15    Class   Crew
25    1st   Male Adult      Yes    57 16    Class    1st
101   2nd   Male Adult       No   154  1      Sex   Male
111   3rd   Male Adult       No   387  2      Sex   Male
121  Crew   Male Adult       No   670  3      Sex   Male
131   1st Female Adult       No     4  4      Sex Female
141   2nd Female Adult       No    13  5      Sex Female
151   3rd Female Adult       No    89  6      Sex Female
161  Crew Female Adult       No     3  7      Sex Female
171   1st   Male Child      Yes     5  8      Sex   Male
181   2nd   Male Child      Yes    11  9      Sex   Male
191   3rd   Male Child      Yes    13 10      Sex   Male
201  Crew   Male Child      Yes     0 11      Sex   Male
211   1st Female Child      Yes     1 12      Sex Female
221   2nd Female Child      Yes    13 13      Sex Female
231   3rd Female Child      Yes    14 14      Sex Female
241  Crew Female Child      Yes     0 15      Sex Female
251   1st   Male Adult      Yes    57 16      Sex   Male
102   2nd   Male Adult       No   154  1      Age  Adult
112   3rd   Male Adult       No   387  2      Age  Adult
122  Crew   Male Adult       No   670  3      Age  Adult
132   1st Female Adult       No     4  4      Age  Adult
142   2nd Female Adult       No    13  5      Age  Adult
152   3rd Female Adult       No    89  6      Age  Adult
162  Crew Female Adult       No     3  7      Age  Adult
172   1st   Male Child      Yes     5  8      Age  Child
182   2nd   Male Child      Yes    11  9      Age  Child
192   3rd   Male Child      Yes    13 10      Age  Child
202  Crew   Male Child      Yes     0 11      Age  Child
212   1st Female Child      Yes     1 12      Age  Child
222   2nd Female Child      Yes    13 13      Age  Child
232   3rd Female Child      Yes    14 14      Age  Child
242  Crew Female Child      Yes     0 15      Age  Child
252   1st   Male Adult      Yes    57 16      Age  Adult
103   2nd   Male Adult       No   154  1 Survived     No
113   3rd   Male Adult       No   387  2 Survived     No
123  Crew   Male Adult       No   670  3 Survived     No
133   1st Female Adult       No     4  4 Survived     No
143   2nd Female Adult       No    13  5 Survived     No
153   3rd Female Adult       No    89  6 Survived     No
163  Crew Female Adult       No     3  7 Survived     No
173   1st   Male Child      Yes     5  8 Survived    Yes
183   2nd   Male Child      Yes    11  9 Survived    Yes
193   3rd   Male Child      Yes    13 10 Survived    Yes
203  Crew   Male Child      Yes     0 11 Survived    Yes
213   1st Female Child      Yes     1 12 Survived    Yes
223   2nd Female Child      Yes    13 13 Survived    Yes
233   3rd Female Child      Yes    14 14 Survived    Yes
243  Crew Female Child      Yes     0 15 Survived    Yes
253   1st   Male Adult      Yes    57 16 Survived    Yes
示例一

示例二

load("/home/zhiyong/Desktop/AAAAAAA-Amel-and-Bter/RData/Amel_3_raw_cluster_0_removed_doublet_removed_HVF_825_dims_8.RData")
load("/home/zhiyong/Desktop/AAAAAAA-Amel-and-Bter/RData/Bter_15_raw_cluster_0_removed_doublet_removed_HVF_1200_dims_8.RData")
load("/home/zhiyong/Desktop/AAAAAAA-Amel-and-Bter/Figure-4__scRNA-seq_analysis/Intergration_of_Amel_3_and_Bter_15/By_all_one-to-one-orthologous-genes/HVF_1400_dim_7/Harmony_of_Amel_3_and_Bter_14__HVF_1400_dim_7.RData")

object_used_harmonied <- Harmony_of_Amel_3_and_Bter_14__HVF_1400_dim_7

kk <- Amel_3_raw_cluster_0_removed_doublet_removed_HVF_825_dims_8@meta.data[,c("orig.ident","seurat_clusters")]
kk[["Harmony"]] <- object_used_harmonied$seurat_clusters[object_used_harmonied$orig.ident=="Amel_3"]
kk <- kk[,c(2,3)]
colnames(kk)[1] <- "Amel_3"
kk <- as.data.frame(table(kk))
kk[,1] <- paste0("Amel_", kk[,1])
kk[,2] <- paste0("Harmony_", kk[,2])

head(kk)   '#示例一

data <- gather_set_data(kk, 1:2)  #数据结构在下面
head(data)   #示例二

ggplot(data, aes(x, id = id, split = y, value = Freq)) +
  geom_parallel_sets(aes(fill = x), alpha = 0.4, axis.width = 0.3) +
  geom_parallel_sets_axes(axis.width = 0.3, colour = "black", fill = "white" ) + 
  geom_parallel_sets_labels(colour = "black", angle = 0) +
  theme_classic()  #示例三
示例一

示例二

示例三

修饰语句讲解

ggplot(data_used, aes(x, id = id, split = y, value = Freq)) +
    geom_parallel_sets(alpha = 0.4, axis.width = 0, fill="#636363") +
    geom_parallel_sets_axes(axis.width = 0.1, colour = "black", fill="white") + 
    geom_parallel_sets_labels(colour = "black", angle = 90) +
    theme_classic() 

geom_parallel_sets(): 调节连线的参数

geom_parallel_sets_axes(): 调节方框本身的参数

geom_parallel_sets_labels(): 调节方框内标记的字体参数

取消方框内的标记 : geom_parallel_sets_labels(size=0)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容