library(magrittr) library(viridis) library(patchwork) library(hrbrthemes) library(circlize) library(tidyverse) require(gridExtra) library(repr) library(cowplot) setwd("/Users/igorscaliantewiese/Downloads/supplemental_material_motivations") data = read.csv(file="motivation_migration_flow.csv", header=TRUE, sep=",") data <- data.frame(data[,-1], row.names = data[,1]) # Package library(networkD3) # I need a long format data_long <- data %>% rownames_to_column %>% gather(key = 'key', value = 'value', -rowname) %>% filter(value > 0) colnames(data_long) <- c("source", "target", "value") data_long$target <- paste(data_long$target, " ", sep="") # From these flows we need to create a node data frame: it lists every entities involved in the flow nodes <- data.frame(name=c(as.character(data_long$source), as.character(data_long$target)) %>% unique()) # With networkD3, connection must be provided using id, not using real name like in the links dataframe.. So we need to reformat it. data_long$IDsource=match(data_long$source, nodes$name)-1 data_long$IDtarget=match(data_long$target, nodes$name)-1 my_color <- 'd3.scaleOrdinal() .domain(["Altruism","Career","Fun", "Reciprocity", "Ideology", "Kinship", "Learning", "Own_use", "Pay","Reputation", "GSoC"]) .range(["coral","orange","#CCCCFF","#FF3333", "pink", "purple", "#FFFF99", "brown", "green","grey","#7d3945"])' # Make the Network plot1=sankeyNetwork(Links = data_long, Nodes = nodes, Source = "IDsource", Target = "IDtarget", Value = "value", NodeID = "name", nodeWidth=40, fontSize=13, nodePadding=20, colourScale=my_color, iterations = 0, width=600, height=400) pdf("sankey.pdf") plot1 dev.off()