В чем разница между geoms и stats в ggplot2?
============================================

Как geoms, так и stats можно использовать для создания графиков в пакете R ggplot2, и они часто дают схожие результаты (например, geom\_area и stat\_bin). Они также часто имеют несколько разные аргументы, например, в[2-D графики плотности](http://docs.ggplot2.org/current/geom_density_2d.html):

Есть ли принципиальные различия между двумя типами объектов?

 которые вы видите на графике, такие объекты, как точки, линии, области, кривые.

статистика означает «статистические преобразования». Эти объекты суммируют данные различными способами, такими как подсчет наблюдений, создание линии лесса, которая наилучшим образом соответствует данным, или добавление доверительного интервала к линии лесса.

Поскольку геомы являются «ядром» сюжета, это обязательные объекты. С другой стороны, статистика не обязательна для построения графика, но может значительно улучшить окончательный график.

Как отмечает @ eipi10 в комментариях, эти различия носят несколько концептуальный характер, так как большинство геомов претерпевает некоторую статистическую трансформацию перед тем, как их построить. Они включают`geom_bar`, `geom_smooth`, а также`geom_quantile`, Некоторые распространенные исключения, когда данные представлены в более или менее «необработанной» форме:`geom_point` а также`geom_line` и менее часто используемые`geom_rug`.



Это только для дополнения принятого ответа.

По словам Хэдли Виккама, автора ggplot2, в своей книге «ggplot2: элегантная графика для анализа данных»[(ссылка здесь)](https://books.google.com/books?id=XgFkDAAAQBAJ&pg=PA91&lpg=PA91&dq=what%20is%20the%20difference%20between%20stat%20and%20geom%20layers%20ggplot2&source=bl&ots=sn54dSeZaW&sig=T9eXzAh-bliVDIshSeTrJkUh5_s&hl=en&sa=X&ved=0ahUKEwjrgcabuJLUAhVJxoMKHScMAJAQ6AEIVTAI#v=onepage&q=what%20is%20the%20difference%20between%20stat%20and%20geom%20layers%20ggplot2&f=false) на стр. 91, раздела 5.2 «Построение графика слой за слоем»:

Вам нужно только установить одно из stat и geom: каждый geom имеет стат по умолчанию, а каждый stat имеет геом по умолчанию.

Принятый ответ выше хорошо объясняет, почему они разные. Это должно объяснить, почему их трудно различить на практике - всякий раз, когда вы используете слой geom, вы также неявно используете слой статистики (даже если это просто преобразование идентичности); аналогично, всякий раз, когда вы используете слой статистики, вы также неявно используете слой geom.

Если вы согласны со значениями по умолчанию, используемыми любым слоем, то было бы излишне указывать явно оба слоя. Даже если вас не устраивают значения по умолчанию, предоставляемые любым слоем, вы можете изменить значения по умолчанию как параметры для каждого слоя (то есть вы можете изменить geom по умолчанию в качестве параметра для передачи любому`stat_*` функция, и вы можете изменить стат по умолчанию в качестве параметра для передачи любому`geom_*` функция). По словам Хэдли Уикхем (тот же источник, что и выше):

Вы можете передавать параметры в`...` (в этом случае параметры stat и geom автоматически разделяются)

Это довольно сложно понять концептуально, поэтому у меня тоже возник этот вопрос. В своей статье о философии, лежащей в основе ggplot2,[нашел здесь](http://vita.had.co.nz/papers/layered-grammar.pdf)в разделе 4 «Иерархия значений по умолчанию» Хэдли Уикхем объясняет практические соображения, лежащие в основе этого поведения по умолчанию, в терминах упрощения кода, который в противном случае был бы излишне длинным.

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

Используя значения по умолчанию для шкал и координат, мы можем написать что-то вроде:

Но этоеще раздражающе долго, конечно, так как значения`stat` а также`position` просто`"identity"`, что в основном означает «ничего не делать» - так зачем говорить это явно?

Тем не менее`layer()` функция не имеет значений по умолчанию для`stat` или же`position` - они должны быть указаны явно в вызове`layer()` функция.

Чтобы обойти это, Хэдли сделал`geom_*` функции, а также`stat_*` функционирует как[оберток](https://en.wikipedia.org/wiki/Wrapper_function) к`layer()` функция, которая имеет значения по умолчанию для обоих`geom` а также`stat` параметр. Разница между`stat_*` а также`geom_*` функции, какой параметр имеетнеизменный (неизменяемое) значение по умолчанию,`stat` или же`geom`.

Источник:<http://ggplot2.tidyverse.org/reference/layer.html>

Так что для`geom_*` Функции, которые вы можете изменить значение по умолчанию`stat` параметр, но не значение по умолчанию`geom` параметр, а для`stat_*` Функции, которые вы можете изменить значение по умолчанию`geom` параметр, но не значение по умолчанию`stat` параметр.

Слой - это комбинация данных, статистики и геометрии с возможностью корректировки положения. Обычно слои создаются с использованием`geom_*` или же`stat_*` вызовы, но это также может быть создано непосредственно с помощью этой функции`layer()` функция].