在R riverplot Sankey图中随机分配的颜色

时间:2015-04-04 21:12:34

标签: r colors data-visualization sankey-diagram riverplot

我发现R riverplot包非常方便制作Sankey / Minard图表。输出图表很棒,包括节点的位置和边缘的宽度。

但是,我的颜色有问题。我通过" col"分配了颜色。节点中的列,但输出颜色与我指示的完全不匹配。我尝试通过实验去除所有颜色,一次分配一种颜色,然后添加第二种颜色,依此类推,但我在错误的分配中找不到任何逻辑。它似乎完全随机,甚至添加我不属于指定列表的颜色。

为了便于处理,我将节点和边缘作为两个单独的文件加载。

以下是我可重复的例子:

#######################
R CODE: 
#######################
library(riverplot)

ruk_sankey_edges <- read.table("/.../ruk_sankey_edges.csv", header = TRUE, na.strings = "''", sep = ";",  dec=".")

ruk_sankey_nodes <- read.table("/.../ruk_sankey_nodes.csv", header = TRUE, na.strings = "''", sep = ";",  dec=".")

nodes <- ruk_sankey_nodes

edges <- ruk_sankey_edges

colnames( nodes ) <- c( "ID", "x", "y", "col")

colnames( edges ) <- c( "ID", "N1", "N2", "Value")

river <- makeRiver( nodes, edges, node_labels = NULL, node_xpos = nodes$x, node_ypos = nodes$y)

style <- list(col = nodes$col )

riverplot(river, lty = 0, default_style = style, srt = 0, 
node_margin = 0.1, nodewidth = 1, plot_area = 0.8, nsteps = 50,
add_mid_points = NULL, yscale = "auto")

#######################
AND THE DATA FILES:

#######################
ruk_sankey_nodes.csv : 

ID;X;Y;col

A1;5;70;gray

A2;10;90;red

A3;10;65;gray

A4;20;85;gray

A5;30;105;green

A6;30;95;cyan

A7;30;85;mangenta

A8;30;75;yellow

A9;20;45;gray

A10;30;60;blue

A11;30;40;black

#######################
ruk_sankey_edges.csv : 

ID;ID1;ID2;Value

E1;A1;A3;39159

E2;A1;A2;8200

E3;A4;A8;2942

E4;A4;A7;1608

E5;A4;A6;3039

E6;A4;A5;3897

E7;A3;A9;27673

E8;A3;A4;11486

E9;A9;A11;22235

E10;A9;A10;5438

#######################

有人有建议吗?或者能够获得指定的颜色?

非常感谢,

帕特里克

2 个答案:

答案 0 :(得分:3)

在节点数据框中(如下面的nodes.df中所示),将col变量(可能是一个因子)转换为字符。 riverplot()感到困惑!

nodes.df $ col&lt; - as.character(nodes.df $ col)

答案 1 :(得分:2)

或者使用

stringsAsFactors= FALSE

在您的节点中&#39;数据框。这是在Reference Manual中提出的:请参阅第7页上的示例,了解&#39; makeriver()&#39;样式。