# левый график
ggplot (data = My_table) +
geom_point (mapping = aes (x = `№№`, y = Тема2))
# правый график
ggplot (data = My_table) +
geom_smooth (mapping = aes (x = `№№`, y = Тема2))
Каждая функция geom в ggplot2 принимает аргумент mapping, однако не каждая настройка эстетики работает с любой функцией geom. Можно было бы установить форму точки, но нельзя установить форму линии. С другой стороны, можно установить параметр linetype, тогда geom_smooth() нарисует линии разного типа для каждого уникального значения переменной, которая сопоставлена с типом линии.
Например, функция geom_smooth() может разделить обучающихся по классам:
ggplot (data = My_table) +
geom_smooth (mapping = aes (x = `№№`, y = Тема2, linetype = Класс))
Одна линия описывает успехи в освоении Темы2 для всех одноклассников из «7а», а другая из «7б»:
Покажется немного странным, эклектикой, но можно выполнить наложение всех линий поверх необработанных данных с последующим их окрашиванием в соответствии с успеваемостью класса. Заметим, что этот график потребует два вызова geom_ для построения, но как разместить несколько геометрических объектов разного типа на одном и том же графике.
ggplot2 обеспечивает более 40 вариантов функции geom_, пакеты расширений предоставляют ещё больше возможностей. Лучший способ получить исчерпывающий обзор, используйте справку: ?geom_smooth.
Многие варианты функции geom_, такие как geom_smooth(), например, используют один геометрический объект для отображения нескольких строк данных. Для этих функций, можно выносить эстетику группы в категориальную переменную для рисования нескольких объектов в едином стиле, так как ggplot2 нарисует отдельный объект для каждого уникального объекта значение группирующей переменной. На практике ggplot2 будет автоматическая группировка данных для этих функций всякий раз, когда сопоставляется эстетика для дискретной переменной (как было в примере с linetype). Удобно использовать эту особенность, потому что в таком случае группа эстетических параметров оказывается самой по себе, она не выносится на поле легенды или в настройки каждого объекта. К слову, показ легенды можно запретить вовсе, установкой значения параметра show.legend = FALSE, как это показано в примере кода ниже:
ggplot (data = My_table) + geom_smooth (mapping = aes (x = `№№`, y = Тема2))
ggplot (data = My_table) +
geom_smooth (mapping = aes (x = `№№`, y = Тема2, group = Класс))
ggplot (data = My_table) +
geom_smooth( mapping = aes(x = `№№`, y = Тема2, color = Класс),
show.legend = FALSE)
Чтобы изобразить несколько графиков на одном чертеже, добавьте несколько вызовов функции geom к ggplot():
ggplot (data = My_table) +
geom_point (mapping = aes (x = `№№`, y = Тема2)) +
geom_smooth (mapping = aes (x = `№№`, y = Тема2))
Это, однако, вносит некоторое дублирование в код. Представите, что хотите изменить ось y для отображения успеваемости по теме 3 вместо темы 2, нужно будет менять переменную в дух местах, при этом можно забыть про обновление в одном из них.
Дабы избежать подобного сценария, набор значений аргумента mapping передается непосредственно в функцию ggplot(). ggplot2 будет рассматривать эти значений как глобальные и применять их к каждой функции вызываемой внутри. Другими словами, следующий код создаёт ту же иллюстрацию, что и предыдущий, но более лаконичен:
ggplot (data = My_table, mapping = aes (x = `№№`, y = Тема2)) +
geom_point() + geom_smooth()
Если же размещаете параметры mapping внутри каждой функции geom, то ggplot2 будет рассматривать их как локальные настройки для слоя. Будет использоваться параметр mapping для расширения или перезаписи глобальных настроек слоя. Это позволяет настраивать различную эстетику внутри индивидуальных слоёв: