Невозможно получить два конкретных виджета для отображения в одном HTML-документе (связанный из файла .Rmd), но любой из них работает нормально в изоляции - PullRequest
0 голосов
/ 22 декабря 2019

Я пытаюсь связать два виджета или графика (диаграмму аккордов и диаграмму Санки) в одном и том же HTML-документе, и я совершенно не понимаю, почему они не отображаются в результирующем HTML-документе. Либо один работает один, но не вместе. Следовательно, в каждом сюжете / виджете нет ничего «неправильного» как такового, но, может быть, какая-то конфликтующая проблема «размеров»? Кроме того, этот пример .Rmd является подмножеством, и каждая фигура отлично работает с кучей других r фрагментов и цифр, поэтому кажется, что эти два графика специально конфликтуют друг с другом.

Я попытался изменить размеры html-виджетов либо внутренне в функциях печати, либо после факта (изменение ширины виджета) . Похоже, я неэффективен в реализации таких процедур (используя руководство по учету), или это не решение.

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

Я довольно новичок в rmarkdown, и мне удалось преодолеть многие другие проблемы, но этот разочаровал меня. Любая помощь / руководство будет принята с благодарностью!

---
title: "How can I get these widgets to be displayed together (not just work in isolation)?"
author: "scf"
date: "December 20, 2019"
output:
  html_document:
    self_contained: true
---

#### Figure 1: chord diagram (data = netm)
```{r chord diagram, echo = FALSE, message = FALSE}

# Libraries
  devtools::install_github("mattflor/chorddiag")
  library(chorddiag); library(ggplot2)

# Create netm
  netm <- structure(c(3, 0, 0, 4, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 7, 0, 
0, 9, 2, 0, 0, 0, 1, 0), .Dim = c(5L, 5L), .Dimnames = list(c("1", 
"2", "3", "4", "5"), c("1", "2", "3", "4", "5")))

# Plot object
  # Set color
  categ.col <- c("#A5E9DE", "#E286DF", "#DCE87A", "#93F340", "#6948CC")

# Build the chord diagram:
  chorddiag(netm,
                 groupColors = categ.col[1:incl],
                 groupnamePadding = 20,
                 width = 800,
                 height = 800)

detach("package:chorddiag", unload = TRUE)

```

#### Figure 2:  sankey diagram (data = edges.df & nodes.df)
```{r Sankey plot, echo = FALSE, message = FALSE}

# Create edge network
  edges.df <- structure(list(Source = c("1_categ1", "4_categ1", "5_categ1", 
"6_categ1", "8_categ1", "9_categ1", "11_categ1", "12_categ1", 
"13_categ1", "14_categ1", "16_categ1", "17_categ1", "20_categ1", 
"21_categ1", "22_categ1", "23_categ1", "25_categ1", "26_categ1", 
"27_categ1", "28_categ1", "30_categ1", "31_categ1", "32_categ1", 
"34_categ1", "35_categ1", "36_categ1", "38_categ1", "1_categ1", 
"4_categ1", "5_categ1", "6_categ1", "8_categ1", "9_categ1", "11_categ1"
), Target = c("1_categ2", "1_categ2", "1_categ2", "1_categ2", 
"1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", 
"1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", 
"1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", 
"1_categ2", "1_categ2", "1_categ2", "1_categ2", "1_categ2", "2_categ2", 
"2_categ2", "2_categ2", "2_categ2", "2_categ2", "2_categ2", "2_categ2"
), Freq = c(5L, 5L, 1L, 3L, 2L, 1L, 2L, 1L, 2L, 7L, 5L, 1L, 6L, 
1L, 3L, 1L, 6L, 2L, 1L, 1L, 1L, 4L, 2L, 8L, 1L, 2L, 1L, 3L, 10L, 
1L, 3L, 2L, 2L, 2L), IDsource = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
25, 26, 0, 1, 2, 3, 4, 5, 6), IDtarget = c(27, 27, 27, 27, 27, 
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 
27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28)), row.names = c(1L, 
4L, 5L, 6L, 8L, 9L, 11L, 12L, 13L, 14L, 16L, 17L, 20L, 21L, 22L, 
23L, 25L, 26L, 27L, 28L, 30L, 31L, 32L, 34L, 35L, 36L, 38L, 40L, 
43L, 44L, 45L, 47L, 48L, 50L), class = "data.frame")

# Create nodes.df from edges.df
  nodes.df <- data.frame(label=unique(c(as.character(edges.df$Source),as.character(edges.df$Target))))

  edges.df$IDsource <- match(edges.df$Source, nodes.df$label)-1 
  edges.df$IDtarget <- match(edges.df$Target, nodes.df$label)-1

# Library
  library(networkD3)

# Make the Network
  networkD3::sankeyNetwork(Links = edges.df, Nodes = nodes.df,
                       Source = "IDsource", Target = "IDtarget",
                       Value = "Freq", NodeID = "label",
                     fontSize = 15,
                     nodeWidth = 80,
                     fontFamily = "times",
                       sinksRight=T)

  detach("package:networkD3", unload = TRUE)

```

1 Ответ

1 голос
/ 23 декабря 2019

Это возможно, но это большая проблема.

Проблема в том, что chorddiag использует версию 3.x D3, а networkD3 использует 4.x. Фреймворк htmlwidgets загружает только более свежую версию, поэтому возникает ошибка, когда пакет chorddiag пытается использовать функции D3.

Обходной путь для этого - загрузить обе, переименовав одну из них. Например, если вы измените код для более старого пакета, указав имя библиотеки d3_3 вместо просто d3, она работает. Есть много мест, где используется d3, и вам нужно исправить все из них. Проблема заключается в том, что chorddiag использует другую библиотеку, которая зависит от D3, поэтому ее необходимо исправить, чтобы она зависела и от d3_3.

Первая попытка такого подхода можно увидеть здесь: https://github.com/dmurdoch/chorddiag. Это работает на вашем примере, но изменения, вероятно, неполные, поэтому вам нужно найти и исправить те, которые были пропущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...