Диаграмма networkD3 Sankey не отображается в средстве просмотра, сообщение об ошибке отсутствует - PullRequest
0 голосов
/ 04 мая 2019

Это код для диаграммы Санки, созданной с помощью .Я имел успех с Sankeys раньше - я стремлюсь создать что-то вроде этого https://susan -wilson.shinyapps.io / 2016FederalElectionPreferences / (хотя это будет немного более диким из-за природысистема предпочтений Сената), но я не могу понять, в чем моя проблема.Код выполняется без ошибок, и тогда я получаю пустой просмотрщик.

Узлы Source и Target имеют нулевое индексирование и являются последовательными целыми числами.Я знаю, что мог бы просто импортировать ACT, но это всего лишь промежуточный тест, и я планирую использовать весь набор данных позже.Этот код является лишь игрушечным примером и не отображает все потоки предпочтений.

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

library(tidyverse)
library(data.table)
library(networkD3)

rm(list = ls())

#Download the data from here: https://results.aec.gov.au/20499/Website/External/SenateDopDownload-20499.zip

files <- list.files("~whereveryousavedit/SenateDopDownload-20499", pattern = ".csv", full.names = T)

SenatePreferences <- lapply(files, fread)

SenatePreferences <- rbindlist(SenatePreferences)

ACT <- SenatePreferences %>% 
  filter(State == "ACT")

# one node for each politician, while they're still in. 

ACT <- ACT %>% 
  mutate(NameNode = paste(Surname, GivenNm, Count),
         Name = paste(Surname, GivenNm)) %>% 
  group_by(Name) %>% 
  mutate(Status= case_when(
    Status %>% lag() == "Excluded" ~ "Excluded in a previous round",
    Status %>% lag() == "Excluded in a previous round" ~ "Excluded in a previous round",
    TRUE ~ Status)) %>% 
  ungroup() %>% 
  filter(Status !="Excluded in a previous round") %>% 
  mutate(Node = c(0:(n()-1)))

# For each count i, the source is the round i node, the target is the equivalent node in round 2. 

ACT <- ACT %>% 
  mutate(Source = Node) %>% 
  group_by(Name) %>% 
  mutate(Target = Source %>% lead()) %>% 
  ungroup() %>% 
  filter(!is.na(Target))


ACT_Sankey <- list(Nodes = ACT %>% 
                     select(NameNode) %>% data.frame(),
                   Links = ACT %>%
                     select(Source, Target, VoteTransferred, Name) %>% data.frame() 
)


sankeyNetwork(Links = ACT_Sankey$Links , Nodes = ACT_Sankey$Nodes, Source = 'Source',
              Target = 'Target', Value = 'VoteTransferred', NodeID = 'NameNode',LinkGroup = 'Name',
              fontSize = 12)

1 Ответ

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

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

library(tidyverse)
library(networkD3)

url <- "https://results.aec.gov.au/20499/Website/External/SenateDopDownload-20499.zip"

mytempfile <- tempfile(fileext = ".zip")
download.file(url = url, destfile = mytempfile)

mytempdir <- tempdir()
unzip(mytempfile, exdir = mytempdir)
unlink(mytempfile)

SenatePreferences <-
  list.files(mytempdir, pattern = ".csv", full.names = TRUE) %>% 
  map_dfr(read_csv)
unlink(mytempdir, recursive = TRUE)

cleaned <-
  SenatePreferences %>% 
  as_tibble() %>% 
  filter(State == "ACT") %>% 
  filter(!Surname %in% c("Exhausted", "Gain/Loss")) %>% 
  mutate(Name = paste(Surname, GivenNm)) %>% 
  mutate(NameNode = paste(Name, Count)) %>% 
  select(NameNode, Name, Ticket, round = Count, Status, VoteTransferred) %>% 
  group_by(Name) %>%
  arrange(round) %>% 
  filter(row_number() <= min(which(Status == "Excluded" | row_number() == n()))) %>% 
  ungroup() %>% 
  mutate(Node = row_number() - 1)

links <-
  cleaned %>% 
  mutate(Source = Node) %>% 
  group_by(Name) %>%
  mutate(Target = Source %>% lead()) %>% 
  ungroup() %>% 
  filter(!is.na(Source) & !is.na(Target)) %>% 
  select(Source, Target, Name, VoteTransferred)

nodes <-
  cleaned %>% 
  select(NameNode, Name, Node)

sankeyNetwork(Links = links, Nodes = nodes, Source = 'Source', 
              Target = 'Target', Value = 'VoteTransferred', NodeID = 'NameNode',
              LinkGroup = 'Name', fontSize = 12)

enter image description here

...