Добавление столбца атрибута к объекту тидиграфа - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь выяснить, как добавить данные атрибутов в объект тидиграфа специально для построения графиков. Я не могу понять, как взять переменную, которая связана с уровнем переменной, сохранить его, когда я создаю объект тидиграфа для использования позже в графике. Итак, на рисунке ниже я бы хотел раскрасить по высоте, но подход ускользает от меня

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidygraph)
#> 
#> Attaching package: 'tidygraph'
#> The following object is masked from 'package:stats':
#> 
#>     filter
library(ggraph)
#> Loading required package: ggplot2

starwars_graph <- starwars %>%
  filter(eye_color == "blue") %>% ## trim down the data
  select(species, homeworld,  height) %>%
  na.omit() %>% 
  as_tbl_graph()


ggraph(starwars_graph, layout = "nicely") +
  geom_edge_link() +
  geom_node_label(aes(label = name))


ggraph(starwars_graph, layout = "nicely") +
  geom_edge_link() +
  geom_node_label(aes(label = name, colour = height))
#> Error in FUN(X[[i]], ...): object 'height' not found

Кто-нибудь может порекомендовать какой-нибудь хороший способ добавить height к этому сюжету?

Создано в 2019-03-11 пакетом представ. (v0.2.1)

1 Ответ

2 голосов
/ 12 марта 2019

В настоящее время height является пограничным свойством (свойством каждого отдельного человека), и для создания свойства узла, которое будет применяться ко всему виду, кажется, что вам нужно свернуть несколько членов каждоговидов до одного значения с использованием среднего значения:

sp_heights = starwars %>%
    group_by(species) %>%
    summarise(height = mean(height, na.rm = TRUE))

starwars_graph = starwars_graph %>%
    activate(nodes) %>%
    left_join(sp_heights, by = c("name" = "species"))

ggraph(starwars_graph, layout = "nicely") +
    geom_edge_link() +
    geom_node_label(aes(label = name, colour = height)) +
    scale_color_continuous(na.value = "black")

Выход:

Coloured labels

...