Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/xkcd/.
Многие слышали о таком замечательном комиксе, как xkcd. Это веб-комикс от Рэндела Манро о романтике, сарказме, математике и языке. Для некоторых комиксов есть переводы на русский. Для поиска и просмотра ваших любимых комиксов в R есть отдельный пакет: RXKCD. Давайте установим этот пакет и подключим его:
install.packages("RXKCD") library("RXKCD")
searchXKCD("someone is wrong") getXKCD(386)
А теперь помимо стандартных комиксов научимся рисовать свои! Но только вот нарисовать целиком комикс будет не так просто, но вот график в стиле xkcd — проще простого. На Stackoverflow однажды был вопрос о том, как это сделать. Прежде всего, нам понадобится основной шрифт комиксов xkcd — Humor-Sans. Чтобы работать с разными клёвыми шрифтами, нужно прописать следующие строчки:
library(extrafont) loadfonts()
font_import(paths = c("path/to/humor-sans")) loadfonts(device = "win")
А теперь подключим ggplot2, подготовим тему для рисования xkcd-комиксов, нарисуем график и сохраним его в картинку:
library("ggplot2") # XKCD theme theme_xkcd <- theme( panel.background = element_rect(fill="white"), axis.ticks = element_line(colour=NA), panel.grid = element_line(colour="white"), axis.text.y = element_text(colour=NA), axis.text.x = element_text(colour="black"), text = element_text(size=16, family="Humor Sans") ) # Plot the chart p <- ggplot(data=data, aes(x=x, y=y1))+ geom_line(aes(y=y2), position="jitter")+ geom_line(colour="white", size=3, position="jitter")+ geom_line(colour="red", size=1, position="jitter")+ geom_text(family="Humor Sans", x=6, y=-1.2, label="A SIN AND COS CURVE")+ geom_line(aes(y=xaxis), position = position_jitter(h = 0.005), colour="black")+ scale_x_continuous(breaks=c(2, 5, 6, 9), labels = c("YARD", "STEPS", "DOOR", "INSIDE"))+labs(x="", y="")+ theme_xkcd # Save to png ggsave("xkcd_ggplot.jpg", plot=p, width=8, height=5)
Мы рассмотрели способ рисования графика через jitter-функциональность пакета ggplot2. А в другом ответе предлагается способ эмуляции рисования "от руки" вручную. Создаётся функция рисования линии:
И функция рисования осей:
А теперь давайте нарисуем простенький график:
В результате получим следующее изображение:
Есть и другие варианты рисования картинок в стилистике xkcd. Например, можно рисовать древовидные структуры следующего вида:
А поможет нам в этом пакет phytools. Пользоваться им достаточно просто. К примеру, вот такой код:
даст нам такую вот замечательную картинку:
Комментариев нет:
Отправить комментарий