[Перевод] Визуализация статических и динамических сетей на R, часть 2
В первой части:
- визуализация сетей: зачем? каким образом?
- параметры визуализации
- best practices — эстетика и производительность
- форматы данных и подготовка
- описание наборов данных, которые используются в примерах
- начало работы с igraph
В этой части: цвета и шрифты в графиках R.
Краткое введение I: цвета в графиках R
Цвета — это красиво, но куда важнее то, что они помогают различать типы объектов, градации свойства. В большинстве функций R можно использовать названия цветов, RGB или шестнадцатеричные значения. В простом базовом графике R ниже x
и y
— координаты точек, pch
— символ для обозначения точек, cex
— размер точки и col
— цвет. Чтобы узнать, какие бывают параметры для построения графиков в R, выполните команду ?par
.
plot(x=1:10, y=rep(5,10), pch=19, cex=3, col="dark red")
points(x=1:10, y=rep(6, 10), pch=19, cex=3, col="557799")
points(x=1:10, y=rep(4, 10), pch=19, cex=3, col=rgb(.25, .5, .3))
Как видно, RGB здесь варьируется от 0 до 1. Это настройка по умолчанию для R, но можно установить и диапазон от 0 до 255, используя команду rgb(10, 100, 100, maxColorValue=255)
.
Можно установить прозрачность элемента, используя параметр alpha
(от 0 до 1):
plot(x=1:5, y=rep(5,5), pch=19, cex=12, col=rgb(.25, .5, .3, alpha=.5), xlim=c(0,6))
Если используется шестнадцатеричное представление цвета, можно установить коэффициент прозрачности, используя adjustcolor
из пакета grDevices
. Ради интереса также покрасим фон графика в серый с помощью функции par()
для установки настроек графики.
par(bg="gray40")
col.tr <- grDevices::adjustcolor("557799", alpha=0.7)
plot(x=1:5, y=rep(5,5), pch=19, cex=12, col=col.tr, xlim=c(0,6))
Если вы планируете использовать встроенные названия цветов, вот как можно получить их все:
colors() # List all named colors
grep("blue", colors(), value=T) # Colors that have "blue" in the name
В большинстве случаев нам нужно или несколько контрастных цветов, или оттенки одного цвета. В R есть встроенная функция палитры, которая может это сгенерировать. Например:
pal1 <- heat.colors(5, alpha=1) # 5 colors from the heat palette, opaque
pal2 <- rainbow(5, alpha=.5) # 5 colors from the heat palette, transparent
plot(x=1:10, y=1:10, pch=19, cex=5, col=pal1)
plot(x=1:10, y=1:10, pch=19, cex=5, col=pal2)
Мы также можем создавать свои собственные градиенты с помощью colorRampPalette
. Обратите внимание, что colorRampPalette
возвращает функцию, которую можно использовать для генерации стольких цветов из этой палитры, сколько нужно.
palf <- colorRampPalette(c("gray80", "dark red"))
plot(x=10:1, y=1:10, pch=19, cex=5, col=palf(10))
Чтобы добавить прозрачность в colorRampPalette
, нужно использовать параметр alpha=TRUE
:
palf <- colorRampPalette(c(rgb(1,1,1, .2),rgb(.8,0,0, .7)), alpha=TRUE)
plot(x=10:1, y=1:10, pch=19, cex=5, col=palf(10))
Нахождение хорошей комбинации цветов — непростая задача, при этом встроенные палитры R довольно ограничены. К счастью, эту проблему решают и другие пакеты:
# If you don't have R ColorBrewer already, you will need to install it:
install.packages("RColorBrewer")
library(RColorBrewer)
display.brewer.all()
В этом пакете одна главная функция — brewer.pal
. Для того, чтобы ей воспользоваться, нужно только выбрать необходимую палитру и количество цветов. Давайте взглянем на некоторые палитры RColorBrewer
:
display.brewer.pal(8, "Set3")
display.brewer.pal(8, "Spectral")
display.brewer.pal(8, "Blues")
Использование палитр RColorBrewer
в графах:
pal3 <- brewer.pal(10, "Set3")
plot(x=10:1, y=10:1, pch=19, cex=4, col=pal3)
Краткое введение II: шрифты в графиках R
Использование разных шрифтов в графиках R может потребовать определенных усилий. Это особенно актуально для пользователей Windows, пользователи Mac и Linux, скорее всего, могут благополучно пропустить этот раздел.
Для того, чтобы импортировать шрифты из ОС в R, воспользуемся пакетом extrafont
:
install.packages("extrafont")
library(extrafont)
# Import system fonts - may take a while.
font_import()
fonts() # See what font families are available to you now.
loadfonts(device = "win") # use device = "pdf" for pdf plot output.
Теперь шрифты доступны, и можно делать что-то такое:
library(extrafont)
plot(net, vertex.size=30)
plot(net, vertex.size=30, vertex.label.family="Arial Black" )
Когда вы сохраняете графики как PDF-файлы, тоже можно установить шрифты:
# First you may have to let R know where to find ghostscript on your machine:
Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.10/bin/gswin64c.exe")
# pdf() will send all the plots we output before dev.off() to a pdf file:
pdf(file="ArialBlack.pdf")
plot(net, vertex.size=30, vertex.label.family="Arial Black" )
dev.off()
embed_fonts("ArialBlack.pdf", outfile="ArialBlack_embed.pdf")