Nano Hash - криптовалюты, майнинг, программирование

Создание древовидного графа в igraph

Я пытаюсь создать генеалогическое дерево в igraph (R), и я использовал следующий код:

id = 1:5
parent = c(1,1,2,3,3)
name = c("A", "B", "C", "D", "E")
data = data.frame(id, parent, name)
n = graph.data.frame(data)
co=layout.reingold.tilford(n, flip.y=T)
plot <- plot.igraph(g,layout=co, vertex.label = name)

D и E должны иметь родителя C, но этот код часто отображает D и E друг над другом только с одной стрелкой (вместо двух). У кого-нибудь есть решение этой проблемы?

введите здесь описание изображения

01.10.2015

  • Очистите рабочую область/перезапустите R. Объект g, используемый в последней строке, не определен в приведенном выше коде. Я думаю, это должно быть n. Если это так, то это выглядит правильно для меня. 01.10.2015
  • Увы, это не решает проблему. 01.10.2015
  • Важно ли использовать layout.reingold.tilford для компоновки графика? Он стохастический и кажется несколько неустойчивым. 01.10.2015
  • Ах, может быть, поэтому... Я не думаю, что это необходимо, это просто то, что я видел в кодах других людей. посмотрю, спасибо.. 01.10.2015

Ответы:


1

Во-первых, вы, кажется, неправильно указали data.frame, чтобы получить свой график. Первый и второй столбцы data определяют вершины, по которым проходят ребра from и to соответственно. Итак, чтобы получить D и E как дочерние элементы C, вам нужно иметь parents в первом столбце. Во-вторых, вы просто указываете метки/имя непосредственно в файле data.frame. У меня это работает:

library("igraph")
data <- data.frame(parent = LETTERS[c(1,1,2,3,3)], id = LETTERS[1:5])
g <- graph.data.frame(data)

myformat <- function(g) {
  layout.reingold.tilford(g, root = 1, flip.y = FALSE, circular = FALSE)
}
plot(g, layout = myformat)

Имгур

Это то, что вы хотите?

01.10.2015

2

У меня также были проблемы с этой командой построения графика (не интерактивный способ построения графика), но я начал использовать tkplot (http://igraph.org/r/doc/tkplot.html) с тех пор.

Проверьте эту версию:

library(igraph)

id = 1:5
parent = c(1,1,2,3,3)
name = c("A", "B", "C", "D", "E")
data = data.frame(id, parent, name)
g = graph.data.frame(data)
tkplot(g, vertex.color="red", vertex.label=name)

Вы должны получить что-то вроде:

введите здесь описание изображения

Вы можете перемещать узлы (перетаскивать их), нажимать на стрелки, менять их цвет (все или определенные узлы) и т. д. Очень хорошо подходит для визуализации. Вы можете столкнуться с некоторыми проблемами, когда имеете дело с очень большими графами.

Просто чтобы прояснить, проблема, которая у вас есть в вашем коде, кажется, создана командой макета. Если вы просто сделаете:

library(igraph)

id = 1:5
parent = c(1,1,2,3,3)
name = c("A", "B", "C", "D", "E")
data = data.frame(id, parent, name)
g = graph.data.frame(data)
plot <- plot.igraph(g,vertex.label = name)

Вы должны получить:

введите здесь описание изображения

который точно такой же, как tkplot, но он не позволяет вам изменять форму или другие элементы на фактическом графике.

01.10.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..