В прошлом видео мы познакомились с тем, как определить внешний вид графика с помощью встроенных тем. В этом фрагменте мы ознакомимся с функцией theme(), которая позволяет регулировать все элементы графика и делать настройки совершенно любые. Если вы откройте справку по этой функции, то увидите длиннющий список параметров, которые можно регулировать. Наиболее часто приходится регулировать лишь несколько из них, хотя еще раз говорю, что можно регулировать практически все. Чаще всего регулируют форму осей, фон графика, формат подписи осей, формат цифровой информации на осях. И вот представьте себе, что редактор настоятельно посоветовал вам уменьшить размер чисел представленных на осях. В этой ситуации вы берете функцию theme и наслаиваете ее результаты работы на уже имеющуюся сочетание исходного рисунка, которое мы поместили в переменную My_plot_2 с классической темой black and white. И далее, в функции theme вы указываете, что текст, который расположен на осях, этому тексту будет присвоено результаты работы функции элемент текста, у которой в качестве параметра будет использован размер, который мы указываем 4. Смотрите, те цифры, которые раньше были крупными, стали меньше. Вы принесли редактору эти данные. Редактору все понравилось кроме размера цифр, он сказал, сделайте их покрупнее. Далее, ничего не меняя в этом самом рисунке, вы меняете параметр size функции element_text и у вас получаются запись гораздо более крупных чисел, что, собственно, и хотелось сделать. Аналогично можно изменить, например, угол наклона текстовых элементов на осях и тому подобное. Это все очень легко делается, и вот посмотрите, как мы легко и непринужденно изменим угол наклона текстовых элементов, которые идут по оси X только. Опять же, берем функцию theme, но в качестве параметра этой функции, берём только axis.text.x, и опять же, суда с этому параметру присваиваем результаты работы функции element_text, в котором указываем в качестве параметра угол наклона этих надписей, ну заодно поменяем еще и их на синий цвет. Всё изменилось, все работает, далее, если мы хотим убрать сетку внутри графика, которая на самом деле иногда мешает восприятию, поэтому некоторые журналы требуют убрать такую сетку. Прекрасно, значит, мы берём и в качестве особого параметра функции theme берём параметр panel.grid. Это параметр, который и регулируют эти самые сеточки, которые находятся внутри рисунка, и указываем ему универсальную функцию элемент бланк, которая создает пустой, ничего не имеющий в качестве значений элемент. В итоге, после активации этого кода, мы видим что все направляющие, которые были внутри этого рисунка, исчезли. Далее, нам нужна легенда, если у нас существует легенда, то она должна быть написана в правильном месте. Для этого мы хотим указать, где будет, собственно, находиться наша легенда. Опять же, до этого мы берем функцию theme, оставляем пока то, что подписи по оси X будут под углом 45 градусов, они будут синего цвета, а вот далее мы говорим panel.grid, element_blank, но все как было раньше, у нас появилась легенда, потому что мы указали в качестве эстетики colour статус матери в отношении курения, и нам редактор говорит, нам не нравится где находится это легенда, измените, пожалуйста, положите, пусть эта легенда окажется, допустим, снизу. Вместо того, чтобы перерисовать рисунки в каких-то сложных графических редакторах, мы всего лишь меняете один единственный элемент legend.position, в котором указываете значение bottom, и соответственно, все ваши обозначения для статуса матери относительно курению будут находиться снизу. Но представьте себе, что назойливый редактор сказал, что нет, вам хочется все таки, чтобы эта легенда находилась не снизу, а в пределах рисунка. Конечно, это не очень хорошо будет смотреться, но как это сделать? Делаться это очень просто. Мы берем, опять же, функцию theme и указываем здесь параметр legend.position, но с помощью вектора, состоящего из двух, чисел мы указываем, где будет находиться эта самая картинка, соответствующая нашей легенде в относительных координатах. Соответственно, она будет находиться с точки с координатам 0,85 по оси X и 0,3 по оси Y. Вот, собственно, точка. Это экспериментально несложно находятся и вы далее совершенно спокойно найдете то положение легенды, который вам нравится, но для того, чтобы она немножко отличалось от того, что мы имеем в виде фона графика, давайте мы закрасим эту легенду, прямоугольник на котором она находятся в какой-то цвет, который нам хочется. Соответственно, мы берём параметр legend.background и указываем для этого параметра результат, что у нас принято, результат работы функции, которая называется element_rect. Это элемент прямоугольник, в котором есть параметр фил, заполнить, которому будет присвоено значение lightblue. И в итоге смотрите у нас появилась светло-голубое, такое закрашивание этого прямоугольника, который соответствует легенде. Давайте теперь попробуем создать такой идеальный график, который включает все элементы, которые мы сейчас обсудили. назовем его my_final_plot. Так, давайте последовательно еще раз повторим все элементы используемые при построении графиков системы ggplot. Итак, мы в переменную my_final_plot положим результаты работы функции ggplot, который описывает базовый уровень, базовый слой этого графика. В качестве источника данных будут использованы данные лежащие в датафрейме baby. По оси X мы будем откладывать переменную, которое характеризует вес материи, по оси Y будем откладывать вес ребенка, это будут эстетики X и Y. Далее, функция geom.point изобразит наши данные в виде точек. Обратите внимание, что я записывал в данном случае эстетику colour как часть функции geom_point. Это допустимо, иногда, более того, это будет правильно. Это означает, что если я, допустим, буду использовать какие-то дополнительные данные для визуализации, то эстетика colour будет учитываться только при построении вот этого слоя, который возьмет в качестве источника данных те данные, которые находятся в датафрейме baby, и он их унаследует и будет цветовыми градациями изображать только точки, которые соответствуют этому датафрейму. Если мы будем выносить какие-то другие точки, то это эстетика, эстетика colour, там учитываться не будет. Далее, мы используя функцию labs, подпишем, что по оси X у нас идет вес матери, по оси Y идет вес ребенка, и в легенде будет указано, что цветовые градации, это статус в отношении курении матери. Далее, мы с помощью функции ggtitle создаем заголовок этому рисунку, более того, мы хотим сделать так, чтобы у нас градации в отношении статуса матери по отношению курению, это были два цвета, синий и красный, соответственно, параметры функции scale_colour_manual мы указываем значения, которые записаны в векторе из двух элементов blue and red. Если бы, кстати, у нас было больше элементов, нам бы здесь необходимо было написать большее значение, соответственно, для переменных, которых больше чем две градации при ручном управлении нам нужно было показать большее количество цветовых градаций. Далее, мы считаем, что будем изображать всё в соответствии с встроенной темой black and white, ну и немножко подрегулируем то, что нас не устраивает с помощью функции theme. В частности мы. уберем сетку внутри графика, соответственно, параметр panel,grid будет, ему будет присвоено значение element_blank, то есть пустая, пустышка, ничего там не будет изображено. Мы изобразим легенду снизу графика, присвоив параметру legend.position значение bottom, ну и наконец, когда мы хотим изобразить текст заголовка нашего графика не сбоку, как автоматически получается, а по центру, мы укажем, что в параметр plot.title мы положим результаты работы функции element.text, где горизонтальная регулировка hjust будет соответствует 0,5, это означает, что мы возьмем пряма на середину нашего рисунка. Это будет по центру. Вот таким образом мы произвели настройку, и вот наш финальный график. Все что мы заказали, мы и получили.