[Перевод] Визуализация статических и динамических сетей на R, часть 3

В первой части:

  • визуализация сетей: зачем? каким образом?
  • параметры визуализации
  • best practices — эстетика и производительность
  • форматы данных и подготовка
  • описание наборов данных, которые используются в примерах
  • начало работы с igraph


Во второй части: цвета и шрифты в графиках R.

В этой части: параметры графов, вершин и ребер.

Построение графиков сетей


Построение с igraph: графики сетей имеют обширный набор настроек. В частности, есть настройки вершин (начинаются с vertex.) и настройки ребер (начинаются с edge.). Список некоторых настроек приведен ниже, а больше информации можно получить, выполнив команду ?igraph.plotting.

Параметры построений в igraph (среди прочих):

Вершины

vertex.color цвет вершины
vertex.frame.color цвет контура вершины
vertex.shape форма обозначения вершины, одно из значений «none», «circle», «square», «csquare», «rectangle», «crectangle», «vrectangle», «pie», «raster», «sphere»
vertex.size размер вершины (по умолчанию 15)
vertex.size2 второй параметр размера вершины (например, для прямоугольника)
vertex.label вектор символов для обозначения вершин
vertex.label.family семейство шрифтов для меток вершин (например, «Times», «Helvetica»)
vertex.label.font шрифт: 1 — обычный, 2 — жирный, 3 — курсив, 4 — жирный курсив, 5 — символьный
vertex.label.cex размер шрифта (множитель, зависит от устройства)
vertex.label.dist расстояние между меткой и вершиной
vertex.label.degree расположение метки по отношению к вершине: 0 — справа, «pi» — слева, «pi/2» — снизу,»-pi/2» — сверху


Ребра

edge.color цвет ребра
edge.width ширина ребра, по умолчанию 1
edge.arrow.size размер стрелки, по умолчанию 1
edge.arrow.width ширина стрелки, по умолчанию 1
edge.lty тип линии, может быть 0 или «blank» (нет), 1 или «solid» (сплошная), 2 или «dashed» (разрывная), 3 или «dotted» (пунктир), 4 или «dotdash» (точка-тире), 5 или «longdash» (длинное тире), 6 или «twodash» (двойное тире)
edge.label вектор символов для обозначения ребер
edge.label.family семейство шрифтов для меток ребер (например, «Times», «Helvetica»)
edge.label.font шрифт: 1 — обычный, 2 — жирный, 3 — курсив, 4 — жирный курсив, 5 — символьный
edge.label.cex размер шрифта меток ребер
edge.curved изгиб ребра, в диапазоне от 0 до 1 (FALSE устанавливает в 0, TRUE — в 0,5)
arrow.mode вектор, определяющий, должны ли ребра иметь стрелки, возможные значения: 0 — нет стрелки, 1 — обратная, 2 — прямая, 3 — в обе стороны


Другое

margin пустые границы вокруг графика, вектор длины 4
frame если TRUE, график будет взят в рамку
main если установлено, добавляет к графику заголовок
sub если установлено, добавляет к графику подзаголовок


Настройки для вершин и ребер можно установить двумя способами. Первый — задать их с помощью функции plot(), как показано ниже.

# Построить с изогнутыми ребрами (edge.curved=.1) и уменьшить размер стрелок:
plot(net, edge.arrow.size=.4, edge.curved=.1)

8fd3c9021d6845dbbae7c8c1379cf706.png

# Установить оранжевый цвет для вершин и ребер 
# Заменить метки вершин на названия, хранящиеся в "media"
plot(net, edge.arrow.size=.2, edge.color="orange",
     vertex.color="orange", vertex.frame.color="#ffffff",
     vertex.label=V(net)$media, vertex.label.color="black") 

6f0324e1f255450eafcf637768c36c37.png
Другой способ задать атрибуты — добавить их в объект igraph. Скажем, мы хотим, чтобы цвет вершин сети зависел от средства массовой информации, а размер — от степени центральности (больше ссылок — больше вершина). Также будем изменять ширину ребер в зависимости от их веса.

# Задать цвета в зависимости от средства массовой информации:
colrs <- c("gray50", "tomato", "gold")
V(net)$color <- colrs[V(net)$media.type]

# Рассчитать степени вершин (количество связей) и использовать их для задания размера вершины:
deg <- degree(net, mode="all")
V(net)$size <- deg*3
# Также можно использовать объем целевой аудитории:
V(net)$size <- V(net)$audience.size*0.6

# Сейчас метки - идентификаторы вершин.
# Можно установить их в NA, чтобы они исчезли:
V(net)$label <- NA

# Установить ширину ребра на основании веса:
E(net)$width <- E(net)$weight/6

# Изменить размер стрелки и цвет ребра:
E(net)$arrow.size <- .2
E(net)$edge.color <- "gray80"
E(net)$width <- 1+E(net)$weight/12
plot(net) 

ba37153f7dcd4bb3b4be1d71f95f9446.png
Также можно переопределить атрибуты непосредственно в графике:

plot(net, edge.color="orange", vertex.color="gray50") 

0cf658ee968b4d3c89ec98137a027c6c.png
Полезно добавить легенду, объясняющую смысл использованных цветов:

plot(net) 
legend(x=-1.5, y=-1.1, c("Newspaper","Television", "Online News"), pch=21,
       col="#777777", pt.bg=colrs, pt.cex=2, cex=.8, bty="n", ncol=1)

dbddbeca274c4127a206154a9b0d0661.png
Иногда, особенно в семантических сетях, требуется вывести только метки вершин:

plot(net, vertex.shape="none", vertex.label=V(net)$media, 
     vertex.label.font=2, vertex.label.color="gray40",
     vertex.label.cex=.7, edge.color="gray85")

5018828ab962494c8a168d86992cb444.png
Давайте раскрасим ребра графа в цвета вершин, из которых они исходят. Можно найти исходную вершину каждого ребра с помощью функции get.edges из igraph.

edge.start <- get.edges(net, 1:ecount(net))[,1]
edge.col <- V(net)$color[edge.start]

plot(net, edge.color=edge.col, edge.curved=.1)  

41b9315508fd4e7e986a1ddec72f5443.png

© Habrahabr.ru