[Перевод] Визуализация статических и динамических сетей на 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)
# Установить оранжевый цвет для вершин и ребер
# Заменить метки вершин на названия, хранящиеся в "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")
Другой способ задать атрибуты — добавить их в объект 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)
Также можно переопределить атрибуты непосредственно в графике:
plot(net, edge.color="orange", vertex.color="gray50")
Полезно добавить легенду, объясняющую смысл использованных цветов:
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)
Иногда, особенно в семантических сетях, требуется вывести только метки вершин:
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")
Давайте раскрасим ребра графа в цвета вершин, из которых они исходят. Можно найти исходную вершину каждого ребра с помощью функции 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)