1

我正在使用 Riverplot 创建 Sankey 图并将它们放在一个图中以创建具有三个图的连续外观。我的问题是我只想要最外面的左右节点上的节点标签,而不是里面。
我已经设法使用以下代码从中间图中删除了标签以创建对象,但我想知道是否有办法只删除标签的一侧。我试过创建空白节点标签,但是当我这样做时,情节的两边都会被删除。

make_rp = function(edges) {
  nodes = data.frame(ID=unique(c(edges$N1, edges$N2)),
                     x=rep(c(1,2), each=9)) 
  
  style = sapply(nodes$ID, function(id)
    list(col=cols[gsub('(  |) ', '', id)]),
    simplify=FALSE)
  
  rp = makeRiver(nodes, edges, styles=style)
}

make_rp_inner = function(edges) {
  nodes = data.frame(ID=unique(c(edges$N1, edges$N2)),
                     x=rep(c(1,2), each=9)) 
  
  style = sapply(nodes$ID, function(id)
    list(col=cols[gsub('(   |) ', '', id)]),
    simplify=FALSE)
  
  rp = makeRiver(nodes, edges, styles=style, node_labels=c('','','','','','','','',''))
}

这是我的绘图代码:

par(mar=c(0,0,0,0), mfrow=c(1,3), cex=1.2)
riverplot(rp_90_00,srt=0, plot_area=c(1,.7), gravity='top',
          nodewidth=1.2, node_margin=0.2, fix.pdf=TRUE)

riverplot(rp_00_10,srt=0, plot_area=c(1,.7), gravity='top',
          nodewidth=1, node_margin=0.2, fix.pdf=TRUE)  # uses rp_innner function

riverplot(rp_10_20,srt=0, plot_area=c(1,.7), gravity='top',
          nodewidth=1.4, node_margin=0.2, fix.pdf=TRUE)

这是我目前拥有的情节,我希望除去外面的所有标签。 我担心如何设置 Riverplot 包可能是不可能的,但我们将不胜感激。

4

1 回答 1

1

尽管涉及大量手动输入,但我找到了解决此问题的方法。我最终不得不删除所有节点标签。主要思想是 node_labels 本质上为 null,但您不能将其简单地定义为 =NULL。以下代码是我所做的简化版本:

plot_n = makeRiver(nodes=nodes, edges=edges, styles=style, 
                   node_labels=c('','','','','','','','',''))

然后我手动将标签添加到情节中。

par(mfrow=c(1,3))

riverplot(plot_1)

text("LDW", x = 0.04, y = .88)
text("MDW", x = 0.04, y = .72)
text("LDL", x = 0.04, y = .615)
text("MDL", x = 0.04, y = .523)
text("LDB", x = 0.04, y = .425)
text("MDB", x = 0.04, y = .33)
text("LDA", x = 0.04, y = .235)
text("MDA", x = 0.04, y = .15)
text("HD", x = 0.03, y = .06)

riverplot(plot_2)

riverplot(plot_3)

text("LDW", x = .96, y = .915)
text("MDW", x = 0.96, y = .762)
text("LDL", x = 0.96, y = .64)
text("MDL", x = 0.96, y = .54)
text("LDB", x = 0.96, y = .44)
text("MDB", x = 0.96, y = .341)
text("LDA", x = 0.96, y = .246)
text("MDA", x = 0.96, y = .155)
text("HD", x = 0.98, y = .063)

我注意到在 pdf 与 png、jpeg 等格式中会出现不同的结果,但是一旦弄清楚了一般要点,调整就相当容易了。我希望这可以帮助任何有类似问题的人,直到发现或实施更好的解决方案。下图是我的问题中的固定版本。

于 2022-02-07T07:20:40.993 回答