{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Математик среди биологов: заметки с тегом дендрограмма",
    "_rss_description": "Я немного умею складывать, но от вычитания у меня всегда кружится голова",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/antonlyakh.ru\/blog\/tags\/dendrogramma\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/dendrogramma\/json\/",
    "icon": false,
    "author": {
        "name": "Антон Лях",
        "url": "https:\/\/antonlyakh.ru\/blog\/",
        "avatar": false
    },
    "items": [
        {
            "id": "482",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/dobavlyaem-risunki-k-listyam-dendrogrammy-ggtree\/",
            "title": "Добавляем рисунки к листьям дендрограммы в R: используем ggtree",
            "content_html": "<p class=\"loud\">Дендрограмма — это результат объединения данных при помощи иерархического кластерного анализа. Обычно на листьях дендрограммы написаны имена переменных — названия объектов. Рассказываю, как вместо названий показать изображения.<\/p>\n<p class=\"foot\">В конце заметки — <a href=\"https:\/\/antonlyakh.ru\/blog\/all\/dobavlyaem-risunki-k-listyam-dendrogrammy-ggtree\/#dend-ggtree--final-code\">финальный код на R<\/a> &darr;<\/p>\n<p><br\/><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/hc_compl__da_s0__x600.png\" width=\"500\" height=\"560\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Эта красочная дендрограмма содержит 38 листьев и разделена на 19 классов. На листьях дендрограммы написаны названия видов плоских паразитических червей из класса моногеней. Собираюсь показать вместо них изображения прикрепительных органов этих паразитов<\/div>\n<\/div>\n<p><br\/><\/p>\n<h4>Для работы понадобятся<\/h4>\n<p>Знание языка Эр.<\/p>\n<p>Установленный <a href=\"https:\/\/bioconductor.org\/packages\/release\/bioc\/html\/ggtree.html\">пакет <kbd>ggtree<\/kbd><\/a>.<\/p>\n<!-- [[https:\/\/cran.r-project.org\/web\/packages\/dendextend\/vignettes\/dendextend.html Пакет <kbd>dendextend<\/kbd>]] для построения финальных дендрограмм. --><h3>Создаю изображения объектов<\/h3>\n<p>Каждому листу дендрограммы сопоставлю маленький рисунок объекта. Для этого буду использовать два набора изображений: один — для тестирования, другой — для финальной отрисовки.<\/p>\n<p><b>Тестовые изображения<\/b><br \/>\nТестовые изображения содержат номера, идущие по порядку. Они нужны для того, чтобы было понятно, куда именно разработанный код помещает картинки.<\/p>\n<p>Вот код для генерации 99-ти пнг-файлов размером 20×20 пикселей. Имя файла с изображением совпадает с нарисованым номером.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">imgs_path = &quot;img_indexed\/&quot;\r\n\r\nfor (i in 1:99) {\r\n  # Создаю новый пнг-файл img_{i}.png с нулевыми отступами\r\n  png(file = paste0(imgs_path, &quot;img_&quot;, i, &quot;.png&quot;), width = 20, height = 20)\r\n  par(mar = c(0, 0, 0, 0))\r\n  \r\n  # Созданию рисунок числа\r\n  plot(0, 0, type = &quot;n&quot;, xlim = c(0, 1), ylim = c(0, 1), xlab = &quot;&quot;, ylab = &quot;&quot;, axes = FALSE)\r\n  text(0.5, 0.5, i, cex = 1)\r\n  \r\n  # Сохраняю пнг-файл\r\n  dev.off()\r\n}<\/code><\/pre><p>Вот сами изображения.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/numbered-images-1-99.png\" width=\"520\" height=\"130\" alt=\"\" \/>\n<\/div>\n<p>Вод код для их загрузки.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">imgs_indexed = c()\r\nimgs_path = &quot;imgs_indexed\/&quot;\r\n\r\nfor(i in 1:75) {\r\n  imgs_indexed = c(imgs_indexed, paste0(imgs_path, &quot;img_&quot;, i, &quot;.png&quot;))\r\n}<\/code><\/pre><p><b>Изображения объектов<\/b><\/p>\n<p>Изображение объекта — это уменьшенный рисунок прикрепительного крючка паразитического червя (моногенеи).  Вот они все:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/all-thumbs--ligophorus--da.png\" width=\"480\" height=\"48\" alt=\"\" \/>\n<\/div>\n<p class=\"foot\"><i>Общая картинка создана с помощью Имедж-меджик:<\/i> <kbd>montage -tile 20x2 -geometry +0+0 *.png all-anchors.png<\/kbd><\/p>\n<p>Название файла с крючком совпадает с наванием вида. Эти названия храню списком в текстовом файле <kbd>labels.txt<\/kbd>. Для загрузки изображений объектов использую следующий код.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">imgs_path = &quot;img_objects\/&quot;\r\n# Загружаем имена меток\r\nimg_objects &lt;- readLines(&quot;labels.txt&quot;)\r\n# и добавляем расширение '.png'\r\nimg_objects &lt;- paste0(imgs_path, img_objects, &quot;.png&quot;)<\/code><\/pre><p>Изображения готовы, перейдем к дереву.<\/p>\n<h3>Строю дерево с картинками, используя <kbd>ggtree<\/kbd><\/h3>\n<p>В книге «Data integration, manipulation and visualization of phylogenetic trees» описано, <a href=\"https:\/\/yulab-smu.top\/treedata-book\/chapter8.html\">как прикрутить картинки к дендрограмме с помощью <kbd>ggtree<\/kbd><\/a>.<\/p>\n<p><img src=\"https:\/\/yulab-smu.top\/treedata-book\/9781032233574_cover_review.png\" style=\"width: 200px\" \/><\/p>\n<p>К сожалению, приведнный в книге код у меня не заработал. Он подразумевает, что мы загружаем филодерево из файла. А я строю дерево при помощи иерархической кластеризации и преобразую ее в объект дендрограммы.<\/p>\n<p><kbd>data<\/kbd> — это матрица данных: <a href=\"https:\/\/antonlyakh.ru\/blog\/all\/obekt-i-priznaki-obekta-v-biologicheskoy-statistike\/#data-matrix\">в ее строках — объекты, в столбцах — признаки<\/a>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Выполняю иерархический кластерный анализ\r\ndist &lt;- dist(data)\r\nhc   &lt;- hclust(dist, method = &quot;complete&quot;) \r\n\r\nlibrary(dendextend)\r\n\r\n# Преобразую результат в дендрограмму\r\ndend &lt;- as.dendrogram(hc)<\/code><\/pre><p>Из дендрограммы делаю филодерево.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">library(ggtree)\r\n\r\nphylo &lt;- as.phylo(dend)<\/code><\/pre><p>Рисую дерево.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ggtree(phylo)<\/code><\/pre><p>И получаю пустой каркас.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree.png\" width=\"500\" height=\"560\" alt=\"\" \/>\n<div class=\"e2-text-caption\">R: ggtree(∙)<\/div>\n<\/div>\n<h4>Строю дендрограмму с текстовыми листьями<\/h4>\n<p>Добавлю к листьям каркаса текстовые подписи при помощи функции <kbd><a href=\"https:\/\/rdrr.io\/github\/GuangchuangYu\/ggtree\/man\/geom_tiplab.html\">geom_tiplab(∙)<\/a><\/kbd>. Чтобы подписи поместились на канве, оставлю пустое место справа при помощи <kbd>xlim(∙)<\/kbd>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ggtree(phylo) + xlim(0, 0.7) + geom_tiplab(geom=&quot;label&quot;, size=2.2)<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tiplabels.png\" width=\"500\" height=\"800\" alt=\"\" \/>\n<div class=\"e2-text-caption\">R: ggtree(∙) + xlim(∙) + geom_tiplab(label)<\/div>\n<\/div>\n<p>Получилось так себе: текст мелкий и бесит рамка вокруг него, но как от нее избавиться — не понял.<\/p>\n<p style=\"text-decoration: line-through\">Метки мелкие и иногда перекрывают друг на друга. <a href=\"https:\/\/ggrepel.slowkow.com\/articles\/examples.html\">От перекрытия меток избавит пакет <kbd>ggrepel<\/kbd><\/a>. Но в результате получается каша.<\/p>\n<h4>Рисую картинки на дендрограмме<\/h4>\n<p>У функции <kbd>geom_tiplab(∙)<\/kbd> есть параметр <kbd>geom<\/kbd>, задающий тип метки:<\/p>\n<blockquote>\n<p>one of ’text’, ’label’, ’shadowtext’, ’image’ and ’phylopic’.<\/p>\n<\/blockquote>\n<p>При помощи опции ’image’, можно на месте листьев нарисовать картинки.<\/p>\n<p>На нашей дендрограмме 38 листьев. Значит передадим ей массив из 38 тестовых изображений: <kbd>imgs_indexed[1:38]<\/kbd>.<\/p>\n<p class=\"foot\">Параметр <kbd>size<\/kbd> управляет размером картинок. Пришлось с ним повозиться, пока не подобрал подходящее значение.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ggtree(phylo) + geom_tiplab(geom=&quot;image&quot;, aes(image=imgs_indexed[1:38]), size=.03)<\/code><\/pre><p>В результате выполнения кода получил ошибку:<\/p>\n<blockquote>\n<p>Error in `label_geom()`:<br \/>\n! Problem while computing aesthetics.<br \/>\ni Error occurred in the 3rd layer.<br \/>\nCaused by error in `check_aesthetics()`:<br \/>\n! Aesthetics must be either length 1 or the same as the data (75)<br \/>\nx Fix the following mappings: `image`<\/p>\n<\/blockquote>\n<p>После длительного анализа определил, что массив изображений должен состоять из 75 элементов, что написано в сообщении об ошибке. (<nobr>75 = 38 листьев * 2 &minus; 1<\/nobr>.) Но код все равно использует только 38 первых изображений. (Это хорошо.)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ggtree(phylo) + geom_tiplab(geom=&quot;image&quot;, aes(image=imgs_indexed[1:75]), size=.03)<\/code><\/pre><p>Вуаля.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tip-test-images.png\" width=\"500\" height=\"560\" alt=\"\" \/>\n<div class=\"e2-text-caption\">R: ggtree(∙) + xlim(∙) + geom_tiplab(image)<\/div>\n<\/div>\n<p>Подставлю сюда изображения объектов.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ggtree(phylo) + geom_tiplab(geom=&quot;image&quot;, aes(image=img_objects[1:75]), size=.03)<\/code><\/pre><p>Цель достигнута.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tip-ligo-images-da-24x24.png\" width=\"400\" height=\"560\" alt=\"\" \/>\n<\/div>\n<p><a id=\"dend-ggtree--final-code\"><\/a><\/p>\n<h4>Финальный код<\/h4>\n<pre class=\"e2-text-code\"><code class=\"\">library(ggplot2)\r\nlibrary(ggtree)\r\n\r\n# Формируем массив с названиями файлов с рисунками объектов.\r\nimgs_path = &quot;img_objects\/&quot;\r\nimg_objects &lt;- readLines(&quot;labels.txt&quot;)\r\nimg_objects &lt;- paste0(imgs_path, img_objects, &quot;.png&quot;)\r\n\r\n# Выполняю иерархический кластерный анализ\r\ndist &lt;- dist(data)\r\nhc   &lt;- hclust(dist, method = &quot;complete&quot;) \r\n\r\n# Преобразую результат в филодерево\r\nphylo &lt;- as.phylo(dend)\r\n\r\n# Рисую дерево с картинками\r\nggtree(phylo) + geom_tiplab(geom=&quot;image&quot;, aes(image=img_objects[1:75]), size=.03)<\/code><\/pre><h3>Итог<\/h3>\n<p>Результат не нравится.<\/p>\n<p>Дендрограмма вверху заметки — красивая, а эта — средненькая. Поэтому в следующий раз покажу, как сделать красивую дендрограмму с картинками при помощи пакета <kbd>dendextend<\/kbd>.<\/p>\n<p><br\/><\/p>\n<hr \/>\n<p>Если после прочтения этой прекрасной заметки вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на круасан с чаем. А я пока напишу что-то новенькое.<\/p>\n<iframe src=\"https:\/\/yoomoney.ru\/quickpay\/fundraise\/button?billNumber=wfB4EAHx4LE.231103&\" width=\"330\" height=\"50\" frameborder=\"0\" allowtransparency=\"true\" scrolling=\"no\"><\/iframe>\n<p>​<\/p>\n",
            "date_published": "2023-11-26T11:31:42+03:00",
            "date_modified": "2025-05-26T22:30:35+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/hc_compl__da_s0__x600.png",
            "_date_published_rfc2822": "Sun, 26 Nov 2023 11:31:42 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "482",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/hc_compl__da_s0__x600.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/numbered-images-1-99.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/all-thumbs--ligophorus--da.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tiplabels.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tip-test-images.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/ggtree-+-tip-ligo-images-da-24x24.png"
                ]
            }
        },
        {
            "id": "479",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/vyrezaem-iz-bolshoy-dendrogrammy-malenku-vetochku-s-pomoschyu-r\/",
            "title": "Вырезаем из большой дендрограммы маленькую веточку с помощью R",
            "content_html": "<p>Во время анализа больших дендрограмм у меня возникает необходимость выделить отдельную ветвь для подробного изучения. Например у нижеследующей дендрограммы намерен оставить ветку, отмеченную красным, а также по одному листу из соседних ветвей, отмеченных синим.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_colored.png\" width=\"800\" height=\"555\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Нужно оставить только отмеченные ветви<\/div>\n<\/div>\n<p><span style=\"width: 100%; border-bottom: 1px solid gray; display: inline-block;\"><\/span><br \/>\n<i>Примечание<\/i>. Размер шрифта на денрограмме уменьшил <a href=\"https:\/\/stackoverflow.com\/a\/28250129\/1615266\">при помощи R-кода<\/a> &darr;.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Размер подписей на оси\r\npar(cex.axis=0.8)\r\n# Размер подписей листьев\r\ndend &lt;- set(dend, &quot;labels_cex&quot;, 0.9)\r\n# Рисует дендрограмму\r\nplot(dend)<\/code><\/pre><p><span style=\"width: 100%; border-top: 1px solid gray; display: inline-block; margin-bottom:2em\"><\/span><\/p>\n<p>В <abbr>R<\/abbr> (вроде бы пока еще) нет специальной процедуры для вырезания ветвей. Зато в пакете <kbd>dendextend<\/kbd> есть функция <a href=\"https:\/\/search.r-project.org\/CRAN\/refmans\/dendextend\/html\/prune.html\"> <kbd>prune<\/kbd><\/a>.<\/p>\n<p><kbd>Prune<\/kbd> обрезает дерево, то есть удаляет из него указанные листья. Так, если в качестве параметра передать названия листьев, отмеченных на рис. красным, <kbd>prune<\/kbd> именно их и вырежет.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dend_pruned &lt;- prune(dend, c(&quot;L_grandis__da&quot;, &quot;L_kedahensis__TG__da&quot;, &quot;L_chabaudi__da&quot;, &quot;L_fenestrum__KM221913__da&quot;))\r\nplot(dend_pruned)<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_incorrectly_pruned.png\" width=\"728\" height=\"555\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Отмеченные ветви удалены<\/div>\n<\/div>\n<p>Получается, чтобы оставить только отмеченные листья, мне нужно перечислить все остальные. Когда дендрограмма большая, перечислять листья вручную я буду довольно долго.<\/p>\n<p>«<a href=\"https:\/\/www.artlebedev.ru\/best\/ui\/humaneness\/\">Пусть потеет машина<\/a>», гласит дизайнерская мудрость. Поручим компьютеру сделать необходимые перестроения.<\/p>\n<p>Для этого предлагаю функцию <kbd>invert_prune<\/kbd>. Она получает на вход список листьев, которые нужно оставить в дендрограмме, и возвращает список листьев, которые должна обрезать функция <kbd>prune<\/kbd>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">invert_prune &lt;- function(dend, remained_leaves) {\r\n  setdiff( labels(dend), remained_leaves )\r\n}<\/code><\/pre><p>Пользуемся ею так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dend_pruned &lt;- prune(dend, \r\ninvert_prune(dend, c(&quot;L_grandis__da&quot;, &quot;L_kedahensis__TG__da&quot;, &quot;L_chabaudi__da&quot;, &quot;L_fenestrum__KM221913__da&quot;))\r\n)\r\n\r\nplot(dend_pruned)<\/code><\/pre><p>Вуаля, и все нужные ветки остались.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_correctly_pruned2.png\" width=\"515\" height=\"555\" alt=\"\" \/>\n<\/div>\n<p><br\/><\/p>\n<p><a href=\"https:\/\/antonlyakh.ru\/blog\/all\/horoshie-knigi-dlya-izuchayuschih-r\/\"><b>Учите R<\/b><\/a>.<\/p>\n<p><br\/><\/p>\n<p>—-<\/p>\n<p>Если вам вдруг непреодолимо захотелось меня поблагодарить, переведите мне 200 руб. на чашеку кофе.<\/p>\n<iframe src=\"https:\/\/yoomoney.ru\/quickpay\/fundraise\/button?billNumber=wfB4EAHx4LE.231103&\" width=\"330\" height=\"50\" frameborder=\"0\" allowtransparency=\"true\" scrolling=\"no\"><\/iframe>\n<p>​<\/p>\n",
            "date_published": "2023-11-03T12:05:56+03:00",
            "date_modified": "2023-11-22T12:21:34+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_colored.png",
            "_date_published_rfc2822": "Fri, 03 Nov 2023 12:05:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "479",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_colored.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_incorrectly_pruned.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/dend_s0__vert_correctly_pruned2.png"
                ]
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}