Ответ 1
Путаница здесь давно (как видно из подробного предупреждающего сообщения), что все начинается с stat_bin
.
Но пользователи обычно не понимают, что их путаница вращается вокруг stat_bin
, так как они обычно сталкиваются с проблемами при использовании geom_bar
или geom_histogram
. Обратите внимание на документацию для каждого: они оба используют stat = "bin"
(в текущих версиях ggplot2 этот стат по умолчанию разбит на stat_bin
для непрерывных данных и stat_count
для дискретных данных).
Но пусть резервное копирование. geom_*
управлять фактическим рендерингом данных в какую-то геометрическую форму. stat_*
просто преобразуйте свои данные. Различие немного запутанно на практике, потому что добавление слоя stat_bin
будет по умолчанию вызывать geom_bar
и поэтому может казаться неотличимым от geom_bar
, когда вы учитесь.
В любом случае, рассмотрим гистограммы и гистограммы гистограммы "bar". Оба явно собираются вовлечь некоторое количество данных где-то вдоль линии. Но наши данные можно либо предварительно обобщить, либо нет. Например, нам может понадобиться штриховой график из:
x
a
a
a
b
b
b
или эквивалентно от
x y
a 3
b 3
Первый еще не был заколот. Второй - предварительно закодированный. Поведение по умолчанию для geom_bar
и geom_histogram
означает, что вы не предварительно привязали свои данные. Поэтому они попытаются вызвать stat_bin
(для гистограмм, теперь stat_count
для гистограмм) на ваши значения x
.
Как говорится в предупреждении, он попытается отобразить y
для вас в результате подсчета. Если вы также попытаетесь сопоставить y
себя с какой-то другой переменной, вы попадаете в область "Здесь есть жертвы драконов". Отображение y
функций переменных, возвращаемых stat_bin
(..count..
и т.д.), Должно быть в порядке и не должно вызывать это предупреждение (это не для меня, используя пример @mnel выше).
Вывод здесь заключается в том, что для geom_bar
, если вы предварительно вычислили высоты баров, всегда помните, что используете stat = "identity"
или лучше использовать новый geom_col
, который использует stat = "identity"
по по умолчанию. Для geom_histogram
очень маловероятно, чтобы вы предварительно вычислили бункеры, поэтому в большинстве случаев вам просто нужно помнить, что не следует сопоставлять y
с чем-либо, кроме того, что возвращалось из stat_bin
.
geom_dotplot
использует его собственный битнинг stat, stat_bindot
, и это обсуждение здесь также относится, я считаю. Подобная ситуация, как правило, не была проблемой с 2d биннингами (geom_bin2d
и geom_hex
), поскольку в аналогичной переменной z
не было такой гибкости, как в биндинговой переменной y
1-й случай. Если будущие обновления начнут позволять больше причудливых манипуляций с 2d биндинговыми случаями, это, я думаю, станет чем-то, что вам нужно следить за ним.