Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Что такое грамматика графики ggplot2 (ч.2)

Продолжение. Читайте начало в Что такое грамматика графики ggplot2 (ч.1)

Читайте продолжение в Названия элементов графика ggplot2: название графика, осей, легенд

Визуальные средства и геометрические объекты

Визуальные средства для отрисовки геометрических объектов типа «точка» (point) — это расположение по горизонтали (x) и вертикали (y), цвет границы (colour) и цвет заливки (fill), размер (size), форма (shape), прозрачность (alpha). Обязательными для создания точечного графика являются только первые два параметра: положение по вертикали и горизонтали. В примере с автомобилями мы привязали скорость к положению по горизонтали, а тормозной путь — к положению по вертикали. Оставшиеся визуальные средства можно было бы использовать для передачи на графике другой информации, если бы она содержалась в исходном массиве данных cars. Или мы можем продублировать информацию, передаваемую через положение, другими визуальными средствами. «Нагрузим» цвет точки скоростью.

ggplot(data = cars, aes(x = speed, y = dist, color = speed)) + geom_point()
ggplot(data = cars, aes(x = speed, y = dist, color = speed)) + geom_point()

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, color = speed, size = dist)) + geom_point()

ggplot(data = cars, aes(x = speed, y = dist, color = speed, size = dist)) + geom_point()

Новая версия графика: чем больше размер точки, тем длинее тормозной путь автомобиля. Также алгоритм добавил новый элемент легенды, сопоставляющий размер точки и длину пути.

Статистические преобразования

Вернёмся к самому первому графику из первой части:

ggplot(data = cars, aes(x = speed, y = dist)) + geom_point()

ggplot(data = cars, aes(x = speed, y = dist)) + geom_point()

В этом примере схема построения графика на первый взгляд выглядит так:

  1. Берётся массив данных cars.
  2. Переменная speed сопоставляется положению по горизонтали (абсциссе), переменная dist — положению по вертикали (ординате).
  3. На графике отображаются точки с соответствующими координатами.

Между вторым и третим пунктом остался незамеченным важный элемент: статистическое преобразование данных. Подход ggplot2 подразумевает, что для отрисовки графического объекта исходные данные нужно преобразовать. Например, для перед построением гистограммы алгоритм соответствующего статистического преобразования должен посчитать, сколько наблюдений попадает в каждый интервал, а затем передать данные о границах каждого интервала и о количестве элементов в алгоритм построения геометрического объекта. В нашем случае, когда рисуются точки, данные никак преобразовывать не нужно, поэтому на этапе преобразования используется stat_identity() — тождественное преобразование, то есть без изменений.

Взглянем на распределение длин тормозных путей и построим график, требующий более сложных вычислений: «Ящик с усами». Он покажет нам информацию о медиане, квартилях и наличии выбросов. Поскольку график такого типа удобно использовать для сравнения групп, то мы разделим наш массив на две группы: в первой автомобили, у которых скорость 15 миль в час и меньше, а во второй — у кого больше.

ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot()
ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot()

ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot()

Более полная схема построения графика следующая:

  1. Берётся массив данных cars.
  2. Результат выполнения выражения cars$speed > 15 сопоставляется абсциссе, переменная dist — ординате. При этом абсцисса (x) из числовой переменной (мили в час) превратилась в категориальную (логическую: больше 15 миль в час или нет), поэтому все наблюдения разбились на эти две категории.
  3. Данные передаются статистическому преобразованию stat_boxplot(), которое из предыдущего шага знает, что cars$speed > 15 нужно использовать для деления массива на группы, а dist — для расчёта статистик, необходимых для отрисовки «ящиков с усами».
  4. Результаты работы 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()
ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot() + geom_point()

ggplot(data = cars, aes(x = speed > 15, y = dist)) + geom_boxplot() + geom_point()

Здесь сначала по старой схеме были отрисованы «ящики», а затем на основе тех же самых данных, тех же самых сопоставлений добавлены точки.

Читайте первую часть статьи в Что такое грамматика графики ggplot2 (ч.1)

Читайте продолжение статьи в Названия элементов графика ggplot2: название графика, осей, легенд

2 комментария Что такое грамматика графики ggplot2 (ч.2)

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>