Sankey Network (в блоге R) не будет правильно отображаться в Firefox - PullRequest
0 голосов
/ 04 марта 2019

Мои сайты с блогами (включая графики, уценки и т. Д.) Обычно хорошо отображаются как в Chrome, так и в Firefox.Между прочим, они обычно отлично работают и в IE, хотя меня не волнует этот браузер.Я включу это в обсуждение для полноты.

Когда я включаю Sankey Network в blogdown, используя пакет networkD3 R, вещи отображаются «правильно» в Chrome и IE, но не в Firefox.Firefox искусственно сокращает размер Sankey Network , см. Ниже:

enter image description here

Вот код, который я использую.Могу ли я что-нибудь сделать, чтобы Sankey Network правильно отображался в Firefox при использовании Sankey Networks с blogdown?

Я бездельничал с {r, fig.width=x, fig.height=y}.Увеличение x и y увеличивает общий размер изображения, в то же время сохраняя общее изображение в том же «маленьком» блоке блогов, эффективно уменьшая размер Sankey Network даже больше, чем показано выше.Уменьшение x и y просто уменьшает размер изображения, также делая Sankey Network меньшим, чем показано выше.Я думаю, что мне нужно исправить проблему рендеринга (присутствует в Firefox, отсутствует в Chrome).

---
title: "Data Analysis"
date: "2019-01-01T18:00:00-09:00"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(blogdown)
library(networkD3)
```

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

```{r sankey, echo=FALSE, error=FALSE, message=FALSE, warning=FALSE}
source <- c("A", "A", "B", "C", "D", "D", "E", "E")
target <- c("D", "E", "E", "D", "H", "I", "I", "H")
values <- c(1, 22, 5, 5, 5, 10, 10, 10)
nodes <- data.frame(name = unique(c(source, target)))
links <- data.frame(source = match(source, nodes$name) - 1,
                    target = match(target, nodes$name) - 1,
                    value = values)
sankeyNetwork(Links = links, Nodes = nodes, Source = "source", 
              Target = "target", Value = "value", NodeID = "name", 
              units = "unitX", fontSize = 12, nodeWidth = 20)
```

[EDIT] Я обновил свой код, как показано ниже, на основеэтот предыдущий вопрос SO. Тем не менее, он по-прежнему отображается как «маленький» без видимых изменений: (* ​​1035 *

---
title: "Data Analysis"
date: "2019-01-01T18:00:00-09:00"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(blogdown)
library(networkD3)
```

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

```{r sankey, echo=FALSE, error=FALSE, message=FALSE, warning=FALSE}
source <- c("A", "A", "B", "C", "D", "D", "E", "E")
target <- c("D", "E", "E", "D", "H", "I", "I", "H")
values <- c(1, 22, 5, 5, 5, 10, 10, 10)
nodes <- data.frame(name = unique(c(source, target)))
links <- data.frame(source = match(source, nodes$name) - 1,
                    target = match(target, nodes$name) - 1,
                    value = values)

sn <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source", 
                    Target = "target", Value = "value", NodeID = "name", 
                    units = "unitX", fontSize = 12, nodeWidth = 20)

htmlwidgets::onRender(sn, 'document.getElementsByTagName("svg")[0].setAttribute("viewBox", "")')

# also tried this to no avail
# htmlwidgets::onRender(sn, 'document.getElementById().getElementsByTagName("svg")[0].setAttribute()')            
```

1 Ответ

0 голосов
/ 20 мая 2019

Судя по обсуждению проблемы Github , кажется, что решение было установить правильный индексный номер графика sankey в команде htmlwidgets::onRender.

Так что, если sankeyplot - это первый SVG на странице, команда должна быть:

htmlwidgets::onRender(sn, 'document.getElementsByTagName("svg")[0].setAttribute("viewBox", "")')

Если сюжет sankey является вторым SVG на странице, команда должна быть:

htmlwidgets::onRender(sn, 'document.getElementsByTagName("svg")[1].setAttribute("viewBox", "")')

и пр.

...