library(tidyverse)
library(igraph)
library(paletteer)
library(visNetwork)
Отцы, дети и братья: первые князья Владимиро-Суздальской земли
Введение
Доброго дня! Сегодня мы попробуем построить интеркативный граф, который будет содержать информацию о генеалогических связях первых князей Владимиро-Суздальской земли. В нем также можно будет найти сведения о политическом статусе потомков Юрия Владимировича Долгорукого (зона политического влияния и время правления).
План действий:
- собрать информацию о потомках Юрия Долгорукого по мужской линии (имена, годы жизни, продолжительность правления и зона политического влияния)
- построить граф
- добавить атрибуты (показать среди потомков Ю. Долгорукого первых князей Владимиро-Суздальской земли; показать другую информацию, кроме генеалогической)
- настроить интерактивность
Как это выглядит в коде
По традиции, запустим сначала все необходимые библиотеки:
Данные о генеалогических связях первых князей Владимиро-Суздальской земли берем отсюда (Лимонов 1987). Создаем вручную небольшой датасет.
<- tibble(
data_knazz person_1 = c("Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий",
"Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий", "Юрий Долгорукий",
"Ростислав", "Ростислав", "Андрей Боголюбский", "Андрей Боголюбский", "Андрей Боголюбский", "Андрей Боголюбский", "Всеволод Большое Гнездо",
"Всеволод Большое Гнездо", "Всеволод Большое Гнездо", "Всеволод Большое Гнездо", "Всеволод Большое Гнездо", "Всеволод Большое Гнездо", "Всеволод Большое Гнездо", "Всеволод Большое Гнездо"),
person_2 = c("Ростислав", "Иван", "Глеб", "Борис", "Михаил", "Святослав", "Мстислав", "Василько",
"Всеволод Большое Гнездо", "Андрей Боголюбский", "Ярополк", "Мстислав_Р", "Изяслав", "Мстислав_А", "Юрий", "Глеб_А",
"Константин", "Юрий_В", "Ярослав", "Владимир", "Святослав_В", "Иван_В", "Борис_В", "Глеб_В"),
relationships = c("child", "child", "child", "child", "child", "child", "child", "child",
"child", "child", "child", "child", "child", "child", "child", "child",
"child", "child", "child", "child", "child", "child", "child", "child")
) data_knazz
# A tibble: 24 × 3
person_1 person_2 relationships
<chr> <chr> <chr>
1 Юрий Долгорукий Ростислав child
2 Юрий Долгорукий Иван child
3 Юрий Долгорукий Глеб child
4 Юрий Долгорукий Борис child
5 Юрий Долгорукий Михаил child
6 Юрий Долгорукий Святослав child
7 Юрий Долгорукий Мстислав child
8 Юрий Долгорукий Василько child
9 Юрий Долгорукий Всеволод Большое Гнездо child
10 Юрий Долгорукий Андрей Боголюбский child
# ℹ 14 more rows
Теперь построим наш граф и посмотрим на него.
<- graph_from_data_frame(data_knazz)
knazz_g plot(knazz_g)
Добавим атрибуты.
# создаем атрибут степени, чтобы была возможность отобразить кол-во связей (и найти самого плодовитого на сыновей)
<- as.numeric(degree(knazz_g))
d V(knazz_g)$degree <- d
# создаем атрибут, который будет показывать, тех, чьей зоной влияния являлась Владимиро-Суздальская земля
<- tibble(name = V(knazz_g)$name) |>
knazzvl_tbl mutate(titul = case_when(
str_detect(name, "(Юрий Долгорукий|Василько|Михаил|Ярополк|Андрей Боголюбский|Всеволод Большое Гнездо|Юрий_В|Константин|Ярослав|Святослав_В)") ~ "knazz_vl",
.default = "other"))
V(knazz_g)$titul <- knazzvl_tbl$titul
# сделаем так, чтобы информация о титуле была закодирована цветом
<- paletteer_d("nbapalettes::pacers_classic")
cols <- ifelse(V(knazz_g)$titul=="other", cols[1], cols[2])
colors V(knazz_g)$color <- colors
Нам бы очень хотелось, чтобы при нажатии на узел всплывала информация о годах жизни, продолжительности правления и зонах политического влияния. Для этого, информацию, которую мы добыли из (Кучкин 1984) и здесь, нам необходимо добавить в новый атрибут.
<- tibble(name = V(knazz_g)$name) |>
knazz_text mutate(title = c("Юрий Владимирович Долгорукий (около 1090 года — 15 мая 1157 года). Был князем Ростово-Суздальской земли с 1096-1149 гг.",
"Ростислав Юрьевич (ум. 6 апреля 1151) — князь Новгородский (1138–1140, 1141–1142), Переяславский (1149–1151)",
"Андрей Юрьевич Боголюбский (предположительно родился в 1111 году — ум. 29 июня 1174) — князь Вышгородский (1149, 1155), Дорогобужский (1150–1151), Рязанский (1153), великий князь Владимирский (1157–1174).",
"Всеволод Юрьевич Большое Гнездо (1154 — 15 апреля 1212) — великий князь Владимирский с 1176 года.",
"Дата и место рождения Ивана неизвестны. Он упоминается осенью 1146 года, когда отец посылает его в помощь к своему союзнику, князю Святославу Ольговичу.",
"Глеб Юрьевич (ум. 20 января 1171) — князь Переяславский и Киевский.",
"Борис Юрьевич (ум. 2 мая 1159) — князь белгородский (1149–1151), туровский (1154–1157), кидекшенский (1157–1159)",
"Михалко (Михаил) Юрьевич (ок. 1145/1153 — 20 июня 1176) — великий князь владимиро-суздальский (1174, 1175–1176).",
"Дата и место рождения Святослава Юрьевича неизвестны.",
"Дата и место рождения Мстислава Юрьевича неизвестны. Князь пересопницкий, новгородский.",
"Князь суздальский (1149–1151) и поросский (1155–1161).",
"Ярополк Ростиславич (не позднее 1151 — не ранее 1196) — князь киевский (17 февраля — 24 марта 1173) и владимирский (1174–1175).",
"Князь Новгородский в 1160-1161, 1175-1176, 1177-1178 годах, Городец-Остёрский в 1169-1171 годах, Ростовский в 1175-1176 годах.",
"Русский княжич, старший сын великого князя Владимирского Андрея Юрьевича Боголюбского.Точный год рождения Изяслава не известен.",
"Мстислав Андреевич — второй сын Андрея Боголюбского. Впервые упоминается в 1165 году, когда вместе с отцом присутствовал на похоронах своего брата Изяслава.",
"Юрий (Георгий) Андреевич (между 1160 и 1165 — около 1194) — князь Новгородский в 1172–1175 годах.",
"Глеб Андреевич (ок. 1155 — 3 июля 1175).",
"Константин Всеволодович — князь новгородский (1205–1208), князь ростовский (1208–1216), великий князь владимирский (1216–1218). Старший сын Всеволода Юрьевича Большое Гнездо.",
"Юрий Всеволодович (26.11.1188, Суздаль — 4.3.1238) — князь владимирский (1212–1216, 1218–1238).",
"Ярослав Всеволодович (8 февраля 1190 или 1191, Переславль-Залесский — 30 сентября 1246). Великий князь киевский (1236–1238, 1243–1246) и великий князь владимирский (1238–1246).",
"Владимир Всеволодович (26 октября 1192 — 6 января 1227) — удельный князь Переяславский (1213–1215) и Стародубский (1217–1227)",
"Святослав Всеволодович — великий князь владимирский (1246–1248). За время своей жизни князь Святослав княжил в Новгороде, Переяславле-Южном, Суздале, Владимире, Юрьеве-Польском.",
"Иван Всеволодович - удельный князь стародубский с 1238 по 1247 гг.",
"Дата и место рождения Бориса Всеволодовича неизвестны.",
"Дата и место рождения Глеба Всеволодовича неизвестны."))
V(knazz_g)$title <- knazz_text$title
Теперь посмотрим из чего состоит наш граф))
vertex_attr(knazz_g)
$name
[1] "Юрий Долгорукий" "Ростислав"
[3] "Андрей Боголюбский" "Всеволод Большое Гнездо"
[5] "Иван" "Глеб"
[7] "Борис" "Михаил"
[9] "Святослав" "Мстислав"
[11] "Василько" "Ярополк"
[13] "Мстислав_Р" "Изяслав"
[15] "Мстислав_А" "Юрий"
[17] "Глеб_А" "Константин"
[19] "Юрий_В" "Ярослав"
[21] "Владимир" "Святослав_В"
[23] "Иван_В" "Борис_В"
[25] "Глеб_В"
$degree
[1] 10 3 5 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
$titul
[1] "knazz_vl" "other" "knazz_vl" "knazz_vl" "other" "other"
[7] "other" "knazz_vl" "other" "other" "knazz_vl" "knazz_vl"
[13] "other" "other" "other" "other" "other" "knazz_vl"
[19] "knazz_vl" "knazz_vl" "other" "knazz_vl" "other" "other"
[25] "other"
$color
[1] "#862633FF" "#FFA400FF" "#862633FF" "#862633FF" "#FFA400FF" "#FFA400FF"
[7] "#FFA400FF" "#862633FF" "#FFA400FF" "#FFA400FF" "#862633FF" "#862633FF"
[13] "#FFA400FF" "#FFA400FF" "#FFA400FF" "#FFA400FF" "#FFA400FF" "#862633FF"
[19] "#862633FF" "#862633FF" "#FFA400FF" "#862633FF" "#FFA400FF" "#FFA400FF"
[25] "#FFA400FF"
$title
[1] "Юрий Владимирович Долгорукий (около 1090 года — 15 мая 1157 года). Был князем Ростово-Суздальской земли с 1096-1149 гг."
[2] "Ростислав Юрьевич (ум. 6 апреля 1151) — князь Новгородский (1138–1140, 1141–1142), Переяславский (1149–1151)"
[3] "Андрей Юрьевич Боголюбский (предположительно родился в 1111 году — ум. 29 июня 1174) — князь Вышгородский (1149, 1155), Дорогобужский (1150–1151), Рязанский (1153), великий князь Владимирский (1157–1174)."
[4] "Всеволод Юрьевич Большое Гнездо (1154 — 15 апреля 1212) — великий князь Владимирский с 1176 года."
[5] "Дата и место рождения Ивана неизвестны. Он упоминается осенью 1146 года, когда отец посылает его в помощь к своему союзнику, князю Святославу Ольговичу."
[6] "Глеб Юрьевич (ум. 20 января 1171) — князь Переяславский и Киевский."
[7] "Борис Юрьевич (ум. 2 мая 1159) — князь белгородский (1149–1151), туровский (1154–1157), кидекшенский (1157–1159)"
[8] "Михалко (Михаил) Юрьевич (ок. 1145/1153 — 20 июня 1176) — великий князь владимиро-суздальский (1174, 1175–1176)."
[9] "Дата и место рождения Святослава Юрьевича неизвестны."
[10] "Дата и место рождения Мстислава Юрьевича неизвестны. Князь пересопницкий, новгородский."
[11] "Князь суздальский (1149–1151) и поросский (1155–1161)."
[12] "Ярополк Ростиславич (не позднее 1151 — не ранее 1196) — князь киевский (17 февраля — 24 марта 1173) и владимирский (1174–1175)."
[13] "Князь Новгородский в 1160-1161, 1175-1176, 1177-1178 годах, Городец-Остёрский в 1169-1171 годах, Ростовский в 1175-1176 годах."
[14] "Русский княжич, старший сын великого князя Владимирского Андрея Юрьевича Боголюбского.Точный год рождения Изяслава не известен."
[15] "Мстислав Андреевич — второй сын Андрея Боголюбского. Впервые упоминается в 1165 году, когда вместе с отцом присутствовал на похоронах своего брата Изяслава."
[16] "Юрий (Георгий) Андреевич (между 1160 и 1165 — около 1194) — князь Новгородский в 1172–1175 годах."
[17] "Глеб Андреевич (ок. 1155 — 3 июля 1175)."
[18] "Константин Всеволодович — князь новгородский (1205–1208), князь ростовский (1208–1216), великий князь владимирский (1216–1218). Старший сын Всеволода Юрьевича Большое Гнездо."
[19] "Юрий Всеволодович (26.11.1188, Суздаль — 4.3.1238) — князь владимирский (1212–1216, 1218–1238)."
[20] "Ярослав Всеволодович (8 февраля 1190 или 1191, Переславль-Залесский — 30 сентября 1246). Великий князь киевский (1236–1238, 1243–1246) и великий князь владимирский (1238–1246)."
[21] "Владимир Всеволодович (26 октября 1192 — 6 января 1227) — удельный князь Переяславский (1213–1215) и Стародубский (1217–1227)"
[22] "Святослав Всеволодович — великий князь владимирский (1246–1248). За время своей жизни князь Святослав княжил в Новгороде, Переяславле-Южном, Суздале, Владимире, Юрьеве-Польском."
[23] "Иван Всеволодович - удельный князь стародубский с 1238 по 1247 гг."
[24] "Дата и место рождения Бориса Всеволодовича неизвестны."
[25] "Дата и место рождения Глеба Всеволодовича неизвестны."
Посмотрим на результат
Осталось настроить интерактивность…
<- toVisNetworkData(knazz_g) #преобразуем наш граф в объект Network
data
<- visNetwork(nodes = data$nodes,
knazz_3d edges = data$edges,
color = data$nodes$color,
width = "100%",
height = 600,
main = list(text = "Отцы, дети и братья: первые князья Владимиро-Суздальской земли"))
visOptions(knazz_3d,
highlightNearest = list(enabled = T, degree = 1, hover = T)) |>
visPhysics(maxVelocity = 20, stabilization = T) |>
visInteraction(dragNodes = T)