Продолжение. Читайте начало в Что такое грамматика графики ggplot2 (ч.1)
Читайте продолжение в Названия элементов графика ggplot2: название графика, осей, легенд
Визуальные средства и геометрические объекты
Визуальные средства для отрисовки геометрических объектов типа «точка» (point) — это расположение по горизонтали (x) и вертикали (y), цвет границы (colour) и цвет заливки (fill), размер (size), форма (shape), прозрачность (alpha). Обязательными для создания точечного графика являются только первые два параметра: положение по вертикали и горизонтали. В примере с автомобилями мы привязали скорость к положению по горизонтали, а тормозной путь — к положению по вертикали. Оставшиеся визуальные средства можно было бы использовать для передачи на графике другой информации, если бы она содержалась в исходном массиве данных cars
. Или мы можем продублировать информацию, передаваемую через положение, другими визуальными средствами. «Нагрузим» цвет точки скоростью.
ggplot(data = cars, aes(x = speed, y = dist, color = speed)) + geom_point() |
Алгоритм определил, что speed — это числовая (интервальная) переменная и, по умолчанию для этого типа, предложил палитру в виде градации от тёмно-синего до голубого. Чем выше скорость, тем светлее точка. Также, поскольку наш график «обзавёлся» дополнительной информацией, передаваемой через цвет, то алгоритм сам добавил в картинку легенду со значениями цвета. В наших силах также выбрать другую цветовую палитру, дать другое название легенде и разместить легенду в другом месте графика, но сейчас не будем на это отвлекаться.
К имеющейся схеме нашего графика мы можем добавить и другие сопоставления визульных средств: пусть длина тормозного пути будет отображаться не только через положение по вертикали, но и через размер точки.
ggplot(data = cars, aes(x = speed, y = dist, color = speed, size = dist)) + geom_point() |
Новая версия графика: чем больше размер точки, тем длинее тормозной путь автомобиля. Также алгоритм добавил новый элемент легенды, сопоставляющий размер точки и длину пути.
Статистические преобразования
Вернёмся к самому первому графику из первой части:
ggplot(data = cars, aes(x = speed, y = dist)) + geom_point() |
В этом примере схема построения графика на первый взгляд выглядит так:
- Берётся массив данных
cars
. - Переменная
speed
сопоставляется положению по горизонтали (абсциссе), переменнаяdist
— положению по вертикали (ординате). - На графике отображаются точки с соответствующими координатами.
Между вторым и третим пунктом остался незамеченным важный элемент: статистическое преобразование данных. Подход ggplot2 подразумевает, что для отрисовки графического объекта исходные данные нужно преобразовать. Например, для перед построением гистограммы алгоритм соответствующего статистического преобразования должен посчитать, сколько наблюдений попадает в каждый интервал, а затем передать данные о границах каждого интервала и о количестве элементов в алгоритм построения геометрического объекта. В нашем случае, когда рисуются точки, данные никак преобразовывать не нужно, поэтому на этапе преобразования используется stat_identity()
— тождественное преобразование, то есть без изменений.
Взглянем на распределение длин тормозных путей и построим график, требующий более сложных вычислений: «Ящик с усами». Он покажет нам информацию о медиане, квартилях и наличии выбросов. Поскольку график такого типа удобно использовать для сравнения групп, то мы разделим наш массив на две группы: в первой автомобили, у которых скорость 15 миль в час и меньше, а во второй — у кого больше.
ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot() |
Более полная схема построения графика следующая:
- Берётся массив данных
cars
. - Результат выполнения выражения
cars$speed > 15
сопоставляется абсциссе, переменнаяdist
— ординате. При этом абсцисса (x
) из числовой переменной (мили в час) превратилась в категориальную (логическую: больше 15 миль в час или нет), поэтому все наблюдения разбились на эти две категории. - Данные передаются статистическому преобразованию
stat_boxplot()
, которое из предыдущего шага знает, чтоcars$speed > 15
нужно использовать для деления массива на группы, аdist
— для расчёта статистик, необходимых для отрисовки «ящиков с усами». - Результаты работы
stat_boxplot()
, а это для каждой группы медиана, квартили, границы нижнего и верхнего «усов», передаются алгоритму отрисовки.
Нам не понадобилось явно задавать stat_boxplot()
в коде, т.к. это статистическое преобразование вызывается по умолчанию при отрисовке «ящиков с усами». Явно указывать статистику имело бы смысл в такой ситуации, когда наш массив уже содержит все необходимые данные для geom_boxplot()
(медиану, квартили и пр.), и мы бы захотели изменить способ статистического преобразования: geom_boxplot(stat="identity")
Слои графика
Каждый раз, когда вы в R добавляете к своему ggplot2-объекту новые geom_*()
или stat_*()
, на вашем графике появляется новый слой. Добавим к нашим «ящикам» слой с точками.
ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot() + geom_point() |
Здесь сначала по старой схеме были отрисованы «ящики», а затем на основе тех же самых данных, тех же самых сопоставлений добавлены точки.
Читайте первую часть статьи в Что такое грамматика графики ggplot2 (ч.1)
Читайте продолжение статьи в Названия элементов графика ggplot2: название графика, осей, легенд
[…] Что такое грамматика графики ggplot2 (ч.2) […]
[…] Что такое грамматика графики ggplot2 (ч.2) […]
Спасибо большое