【问题标题】:Sankey plot with the riverplot package带有riverplot包的桑基图
【发布时间】:2017-05-18 12:52:30
【问题描述】:

魔法。

编辑:解决方案

正如 MartineJ 和 emilliman5 所指出的,节点应该被唯一标记(如下)。

library("riverplot")
nodes<-structure(list(ID = c("2011+", "2011-", "2016+", "2016-"), x = c(20, 
20, 30, 30), y = c(50, 40, 50, 40)), class = "data.frame", row.names = c(NA, 
-4L))
edges<-structure(list(N1 = c("2011+", "2011-", "2011+", "2011-"), N2 = 
c("2016+", "2016-", "2016-", "2016+"), Value = c(461, 7, 0, 46)), class = 
"data.frame", row.names = c(NA, -4L))

river <- makeRiver(nodes,edges)
riverplot(river)

我一直在尝试绘制一个 Sankey 图/河图(使用 riverplot 包)来说明癌症登记如何随着时间的推移而演变,尽管到目前为止,这段代码并没有给我带来什么成功。任何人都可以指导我这个代码的错误吗?

Warning message: In checkedges(x2$edges, names(x2)) : duplicated edge information, removing 1 edges

这是可疑代码:

library(“riverplot”)

edges<-structure(list(N1 = c("+", "-", "+", "-"), N2 = c("+", "-", "-", "+"), Value = c(664L, 50L, 0L, 46L)), .Names = c("N1", "N2", "Value"), class = "data.frame", row.names = c(NA, -4L))

nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)

nodes$x = c(1,2)
rownames(nodes) = nodes$ID

rp <- list(nodes=nodes, edges=edges)

class(rp) <- c(class(rp), "riverplot")

plot(rp)

以及代码中包含的数据:

N1    N2    Value
 +     +     664
 -     -      50
 +     -       0
 -     +      46

永远感激。

【问题讨论】:

  • 您能告诉我们问题、错误和警告是什么吗?
  • 非常感谢您的编辑建议。
  • 警告逐字为:警告消息:In checkedges(x2$edges, names(x2)) :重复的边缘信息,删除 1 个边缘
  • 如果您提供最小的数据集,对社区来说会容易得多。如果你能提供一个很好的可重现的例子,那就更好了。看here 的解释。
  • 已解决。 R 和 Stackoverflow 都相对较新。感谢耐心。

标签: r sankey-diagram riverplot


【解决方案1】:

看起来您在 N1(和 N2)中多次使用相同的值。尝试使它们都不同(每列),然后再试一次,f.i.:

N1:加1减1加2减2

如果您只想显示 + 和 -: 在 makeRiver 中,有一个选项 **node_labels **

【讨论】:

  • 赞赏。重命名节点——成功!
【解决方案2】:

您的节点需要唯一命名,然后使用nodes$labels 将其改回:

library(riverplot)

edges<-structure(list(N1 = c("+", "-", "+", "-"), N2 = c("+", "-", "-", "+"), Value = c(664L, 50L, 0L, 46L)), .Names = c("N1", "N2", "Value"), class = "data.frame", row.names = c(NA, -4L))
edges$N1 <- paste0(edges$N1, "a")
edges$N2 <- paste0(edges$N2, "b")
nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE)

nodes$x = c(1,1,2,2)
nodes$labels <- as.character(substr(nodes$ID, 1, 1))
rownames(nodes) = nodes$ID

rp <- list(nodes=nodes, edges=edges)

class(rp) <- c(class(rp), "riverplot")

plot(rp)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多