【问题标题】:Additional Labels in Plotly Sankey DiagramPlotly Sankey 图中的附加标签
【发布时间】:2021-10-24 20:53:30
【问题描述】:

我在 R 中使用 Plotly 创建了一个桑基图,并希望在图的最左侧和最右侧添加垂直标签。这可能吗?我在 Plotly 中发现了注释的可能性,但无法让它与图表一起使用。

代码如下:

library(plotly)
fig <- plot_ly(
  type = "sankey",
  orientation = "h",
  
  node = list(
    label = c("Level 1", "Level 2", "Level 3",
              "Level 1", "Level 2", "Level 3", "Level 4", "Level 5"),
    color = c("rgba(34,139,34, 1)", "rgba(31, 119, 180, 1)", "rgba(255, 127, 14, 1)",
              "rgba(34,139,34, 1)", "rgba(31, 119, 180, 1)", "rgba(255, 127, 14, 1)", "rgba(148, 103, 189, 1)", "rgba(148, 103, 0, 1)"),
    pad = 20,
    thickness = 15,
    line = list(
      color = "black",
      width = 0.5
    )
  ),
  
  link = list(
    source = c(0,0,0,0,1,1,1,1,2,2,2,2),
    target = c(3,4,5,6,3,4,5,6,4,5,6,7),
    value =  c(482,52,1,1,20,127,19,1,1,1,3,1),
    color = c("rgba(34,139,34,0.4)", "rgba(34,139,34,0.4)", "rgba(34,139,34,0.4)", "rgba(34,139,34,0.4)",
              "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)",
              "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)")
  )
)
fig <- fig %>% layout(
  title = "Title of the Plot",
  font = list(
    size = 10
  )
)

fig

感谢您的帮助。

编辑:

我尝试使用“add_annotations”,但是一旦我将文本的 x 轴移动到低于 0 的位置(将文本向左移动),它就会消失:

%>% add_annotations(
  xref="paper",
  yref="paper",
  x=-0.1,
  y=0.5,
  text="Test",
  showarrow=FALSE
)

【问题讨论】:

    标签: r plotly r-plotly sankey-diagram


    【解决方案1】:

    经过一番修改后,我自己找到了解决方案:

    我在布局中添加了一些边距:

    layout(
      title = "Name of the Plot",
      font = list(
        size = 10
      ),
      margin = list(
        r = 30,
        l = 30
      )
    

    然后我使用“add_annotations”创建文本并使用“xshift”将其进一步向右/向左移动:

    add_annotations(
      xref = "paper",
      yref = "paper",
      x = 1,
      y = 0.5,
      xshift = 25,
      text = "Text I wanted to add",
      font = list(
        size = 14
      ),
      showarrow = FALSE,
      textangle = 90
    

    最终代码如下所示:

    fig <- plot_ly(
      type = "sankey",
      orientation = "h",
      node = list(
        label = c("Level 1", "Level 2", "Level 3",
                  "Level 1", "Level 2", "Level 3", "Level 4", "Level 5"),
        color = c("rgba(34,139,34, 1)", "rgba(31, 119, 180, 1)", "rgba(255, 127, 14, 1)",
                  "rgba(34,139,34, 1)", "rgba(31, 119, 180, 1)", "rgba(255, 127, 14, 1)", "rgba(148, 103, 189, 1)", "rgba(214, 39, 40, 1)"),
        pad = 20,
        thickness = 15,
        line = list(
          color = "black",
          width = 0.5
        )
      ),
      
      link = list(
        source = c(0,0,0,1,1,1,1,2,2,2,2,2),
        target = c(3,4,5,3,4,5,6,3,4,5,6,7),
        value =  c(614,27,4,12,35,6,1,1,1,2,5,1),
        color = c("rgba(34,139,34,0.4)", "rgba(34,139,34,0.4)", "rgba(34,139,34,0.4)",
                  "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)", "rgba(31, 119, 180, 0.4)",
                  "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)", "rgba(255, 127, 14, 0.4)")
      )
    ) %>% layout(
      title = "Name of the plot",
      font = list(
        size = 10
      ),
      margin = list(
        r = 30,
        l = 30
      )
    ) %>% add_annotations(
      x = 1,
      y = 0.5,
      xshift = 25,
      text = "Text 1",
      font = list(
        size = 14
      ),
      showarrow = FALSE,
      textangle = 90
    ) %>% add_annotations(
      x = 0,
      y = 0.5,
      xshift = -25,
      text = "Text 2",
      font = list(
        size = 14
      ),
      showarrow = FALSE,
      textangle = -90
    ) %>% show()
    

    【讨论】:

      【解决方案2】:

      不是答案,只是稍微改进代码的建议。

      您可以一次性添加两个标签,而不是使用两次add_annotations

      add_annotations(
        x = c(1,0),
        y = 0.5,
        xshift = c(25, -25),
        text = c("Text 1", "Text 2"),
        font = list(
          size = 14
        ),
        showarrow = FALSE,
        textangle = c(90, -90)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-26
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多