Я строю категориальную переменную и вместо того, чтобы показывать счетчики для каждого значения категории.
Я ищу способ ggplot
отобразить процент значений в этой категории. Конечно, можно создать другую переменную с рассчитанным процентом и построить ее, но я должен сделать это несколько десятков раз, и я надеюсь добиться этого одной командой.
Я экспериментировал с чем-то вроде
qplot(mydataf) +
stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
scale_y_continuous(formatter = "percent")
но я должен использовать его неправильно, так как я получил ошибки.
Чтобы легко воспроизвести настройку, вот упрощенный пример:
mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc");
mydataf <- factor(mydata);
qplot (mydataf); #this shows the count, I'm looking to see % displayed.
В реальном случае я, вероятно, буду использовать ggplot
вместо qplot
, но правильный путь использования stat_bin все еще ускользает от меня.
Я также попробовал эти четыре подхода:
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
но все 4 дают:
Error: ggplot2 doesn't know how to deal with data of class factor
Та же ошибка появляется для простого случая
ggplot (data=mydataf, aes(levels(mydataf))) +
geom_bar()
так что это явно что-то о том, как ggplot
взаимодействует с одним вектором. Я чешу голову, гуглюсь за эту ошибку, даю единственный результат .
Ответы:
С тех пор, как на этот вопрос был дан ответ, в
ggplot
синтаксис были внесены существенные изменения . Подводя итоги обсуждения в комментариях выше:Вот воспроизводимый пример с использованием
mtcars
:Этот вопрос в настоящее время является хитом № 1 в Google по показателю «ggplot count vs процент гистограммы», поэтому, надеюсь, это поможет отыскать всю информацию, размещенную в настоящее время в комментариях к принятому ответу.
Примечание: Если
hp
не задан фактор, ggplot возвращает:источник
percent
к пакету, из которого он работает, чтобы вышеперечисленное заработало (я так и сделал).ggplot(mtcars, aes(x = factor(hp))) + geom_bar(aes(y = (..count..)/sum(..count..))) + scale_y_continuous(labels = scales::percent)
geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))
вместо этого. Каждый аспект должен составлять до 100%.этот модифицированный код должен работать
если ваши данные имеют NA, и вы не хотите, чтобы они были включены в график, передайте g.plot аргумент na.omit (mydataf) в качестве аргумента.
надеюсь это поможет.
источник
formatter
аргумент больше не будет работать. Вместо этого вы захотите что-то вродеlabels = percent_format())
.scales
библиотеку перед использованиемpercent_format()
, иначе она не будет работать. 0.9.0 больше не загружает автоматически пакеты поддержки.? stat_bin
. Он показывает, какие дополнительные столбцы добавляются в кадр данныхggplot2
. Все дополнительные столбцы имеют форму..variable..
.aes(y = (..count..)/sum(..count..))
простоaes(y = ..density..)
? Визуально это дает очень похожую (но все же другую) картинкуscales
библиотеку, а затем использовать,scale_y_continuous(labels=percent)
как упомянуто в документацииС ggplot2 версии 2.1.0 это
источник
По состоянию на март 2017 года, с
ggplot2
2.2.1, я думаю, что лучшее решение объясняется в книге Хэдли Уикхэма R для книги по науке о данных:stat_count
вычисляет две переменные:count
используется по умолчанию, но вы можете выбрать использование,prop
которое показывает пропорции.источник
fill
сопоставление (не выдается ошибка, но цвет заливки не добавляется).group = 1
, чтобы получить отображение заполнения. может быть, это помогаетgroup
параметр, он не показывает надлежащие проценты, так как все принадлежит отдельной группе для каждого уникального значения x.Если вы хотите , проценты по оси у и маркированы на брусьях:
При добавлении меток столбцов, вы можете пропустить ось Y для более чистого графика, добавив в конец:
источник
Если вам нужны процентные метки, но фактические значения N на оси y, попробуйте следующее:
источник
Вот обходной путь для граненых данных. (Принятый ответ @Andrew в этом случае не работает.) Идея состоит в том, чтобы рассчитать процентное значение с помощью dplyr, а затем использовать geom_col для создания графика.
Это сюжет:
источник
Обратите внимание, что если ваша переменная непрерывна, вы должны будете использовать geom_histogram (), так как функция сгруппирует переменную по "bin".
источник