R сюжетная диаграмма Санки с аннотированными столбцами - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь создать аннотированную диаграмму Санки.Я бы хотел, чтобы окончательная версия выглядела так, как показано на диаграмме с примечаниями вручную:

enter image description here

Простая часть получения диаграммы Санки:

sankey_diagram <- plot_ly(
    type = "sankey",
    orientation = "h",

    node = list(
      label = c("Node_A_1", "Node_A_2", "Node_B_2", "Node_B_3", "Node_C_1", "Node_C_2"),
      color = c("blue", "blue", "blue", "blue", "blue", "blue"),
      pad = 15,
      thickness = 35,
      line = list(
        color = "black",
        width = 0.5
      )
    ),

    link = list(
      source = c(0,1,0,2,3,3),
      target = c(2,3,3,4,4,5),
      value =  c(8,4,2,8,4,2)
    )
  ) %>% 
  layout(
    font = list(
      size = 15
    )
)

Сначала я подумал, что если я хочу получить аннотированные "столбцы", я должен обратиться к разделу аннотаций документации заговора.Проблема с аннотациями заключается в том, что они пространственно ограничены (по крайней мере, мне так кажется) областью графика.Это код в подходе, основанном на аннотациях:

# properties that hide the axes
ax <- list(
  title = "",
  zeroline = FALSE,
  showline = FALSE,
  showticklabels = FALSE,
  showgrid = FALSE
)

sankey_diagram %>%
   add_annotations(
    x=-1,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column A",
    xanchor = 'right',
    showarrow = F
  ) %>% 
  add_annotations(
    x=0,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column B",
    xanchor = 'right',
    showarrow = F
  ) %>%
  add_annotations(
    x=1,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column C",
    xanchor = 'right',
    showarrow = F
  ) %>%  add_annotations(
    x=1,
    y=1,
    xref = "x",
    yref = "y",
    text = "", 
    xanchor = 'right',
    showarrow = F
  ) %>%
  layout(xaxis = ax, yaxis = ax)

Проблема в том, что аннотации располагаются внизу графика, а не под ним.

Второй подход основан на сюжетах.Я создаю два вспомогательных сюжета - первый - это Санки, другой - пустой, за исключением аннотаций, - и помещаю их по одному в ряд:

columns_plot <- plot_ly() %>% add_annotations(
    x=-1,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column A",
    xanchor = 'right',
    showarrow = F
  ) %>% 
  add_annotations(
    x=0,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column B",
    xanchor = 'right',
    showarrow = F
  ) %>%
  add_annotations(
    x=1,
    y=-5,
    xref = "x",
    yref = "y",
    text = "Column C",
    xanchor = 'right',
    showarrow = F
  ) %>%  add_annotations(
    x=1,
    y=1,
    xref = "x",
    yref = "y",
    text = "", 
    xanchor = 'right',
    showarrow = F
  ) %>%
  layout(xaxis = ax, yaxis = ax)

p <- subplot(sankey_diagram, columns_plot, nrows = 2, shareX = TRUE, margin = 0.1)
p %>%
  layout(xaxis = ax, yaxis = ax)

По какой-то странной причине сюжетно ставит columns_plotна вершине sankey_diagram.Я подозреваю, что второй подход является правильным, но все же я не могу получить результат, изображенный в первом абзаце этого вопроса.

...