使用R畫桑基圖(流程圖)

來源:互聯網
上載者:User
桑基圖可以用來表示各個節點之間轉換

在R中可以直接定義點點之間的關係後使用相應的package畫桑基圖:


方法一:

riverplot

library(riverplot)# 構造串連節點的資料框edges = data.frame(N1 = paste0(rep(LETTERS[1:4], each = 4), rep(1:5, each = 16)),                   N2 = paste0(rep(LETTERS[1:4], 4), rep(2:6, each = 16)),                   Value = runif(80, min = 2, max = 5) * rep(c(1, 0.8, 0.6, 0.4, 0.3), each = 16),                   stringsAsFactors = F)# 篩選80%的記錄,以免每個點都對應到4個點edges = edges[sample(c(TRUE, FALSE), nrow(edges), replace = TRUE, prob = c(0.8, 0.2)),]head(edges)nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)#nodes$x = as.integer(substr(nodes$ID, 2, 2))nodes$y = as.integer(sapply(substr(nodes$ID, 1, 1), charToRaw)) - 65#rownames(nodes) = nodes$IDhead(nodes)# 添加顏色library(RColorBrewer)# 後面加調淡顏色palette = paste0(brewer.pal(4, "Set1"), "60")# 對每個節點產生相應的格式styles = lapply(nodes$y, function(n) {  list(col = palette[n+1], lty = 0, textcol = "black")})names(styles) = nodes$ID# 以list的結構儲存一遍調用rp <- list(nodes = nodes, edges = edges, styles = styles)class(rp) <- c(class(rp), "riverplot")plot(rp, plot_area = 0.95, yscale=0.06)

效果圖見:



方法二:

使用包d3Network或者circlize,d3Network是調用D3的畫圖功能來實現,使用一下代碼實現:

library(d3Network)d3links <- edgesd3nodes <- data.frame(name = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)d3nodes$seq <- 0:(nrow(d3nodes) - 1)d3links <- merge(d3links, d3nodes, by.x="N1", by.y="name")names(d3links)[4] <- "source"d3links <- merge(d3links, d3nodes, by.x="N2", by.y="name")names(d3links)[5] <- "target"names(d3links)[3] <- "value"d3links <- subset(d3links, select=c("source", "target", "value"))d3nodes <- subset(d3nodes, select=c("name"))# 畫圖並儲存為html檔案d3Sankey(Links = d3links, Nodes = d3nodes, Source = "source",         Target = "target", Value = "value", NodeID = "name",         fontsize = 12, nodeWidth = 30, file = "TestSankey.html")

效果圖:



備忘:

(1)d3Network儲存為HTML檔案,有互動式效果;riverplot可選擇儲存為不同的圖片類型

(2)操作中感覺使用riverplot更易調整


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.