Вопрос по ggplot2, r – Способ всегда уклоняться от гистограммы?

12

Используя ggplot2, я создаю гистограмму с коэффициентом по горизонтальной оси и другим фактором для цвета заливки, используя уклоненную позицию. Моя проблема в том, что коэффициент заполнения иногда принимает только одно значение для значения горизонтального фактора, и, если нечего уклоняться, полоса занимает всю ширину. Есть ли способ заставить его ничего не уклоняться, чтобы все полосы были одинаковыми? Или эквивалентно построить 0 's?

Например

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) +
geom_histogram(position = "dodge")

enter image description here

Этот ответ есть пара идей. Его также спросили до выпуска новой версии, так что, может быть, что-то изменилось? Использование граней (также показаноВот) Мне не нравится моя ситуация, хотя я полагаю, что редактирование данных и использованиеgeom_bar может работать, но он чувствует себя не изящным. Более того, когда я пытался все равно

ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) +
    geom_bar() + facet_grid(~factor(carb))

Я получаю ошибку & quot; Ошибка в layout_base (data, cols, drop = drop):   По крайней мере один слой должен содержать все переменные, используемые для огранки & quot;

Я полагаю, я мог бы сгенерировать кадр данных, а затем использоватьgeom_bar,

mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")),
    .fun = count, .variables = c("carb", "gear"))

заполнение уровней, которые не представлены с 0 '. Кто-нибудь знает, будет ли это работать или есть ли лучший способ?

Я знаю, что вы не считаете это идеальным, но я думаю, что предварительный расчет количества и использование geom_bar было бы моим предпочтительным способом сделать это. joran

Ваш Ответ

2   ответа
11

Updated geom_bar потребностиstat = "identity"

Я не уверен, что это слишком поздно для вас, но посмотрите ответ на недавний постВот То есть я прислушиваюсь к совету Джорана, чтобы предварительно рассчитать счет за пределамиggplot позвонить и использоватьgeom_bar, Как и в ответе на другой пост, подсчет получается в два этапа: во-первых, кросс-таблица подсчетов получается с помощьюdcast; затем второй,melt перекрестная таблица.

library(ggplot2)
library(reshape2)

dat = dcast(mtcars, factor(carb) ~ factor(gear), fun.aggregate = length)
dat.melt = melt(dat, id.vars = "factor(carb)", measure.vars = c("3", "4", "5"))
dat.melt

(p <- ggplot(dat.melt, aes(x = `factor(carb)`, y = value, fill = variable)) + 
  geom_bar(stat = "identity", position = "dodge"))

График:

enter image description here

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Gregor
0

в этом ответев новых версияхggplot2 (версия & gt; = 2.2.1.900) есть более простой способ:position_dodge получаетpreserve аргумент, что если установлено"single" всегда будет увернуться

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) +
  geom_bar(position = position_dodge(preserve = "single"))

enter image description here

Похожие вопросы