Как добавить процентные или подсвеченные надписи над графиком процентного бара?

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

Суммарное процентное соотношение для каждой грани – уважение “заполнение”

 test <- data.frame( test1 = sample(letters[1:2], 100, replace = TRUE), test2 = sample(letters[3:8], 100, replace = TRUE) ) library(ggplot2) library(scales) ggplot(test, aes(x= test2, group = test1)) + geom_bar(aes(y = ..density.., fill = factor(..x..))) + facet_grid(~test1) + scale_y_continuous(labels=percent) 

введите описание изображения здесь

Тем не менее, я не могу получить метку для общего счета или процента над каждым из графиков при использовании geom_text .

Каково правильное дополнение к вышеуказанному коду, который также сохраняет процентную ось y?

Оставаясь внутри ggplot, вы можете попробовать

 ggplot(test, aes(x= test2, group=test1)) + geom_bar(aes(y = ..density.., fill = factor(..x..))) + geom_text(aes( label = format(100*..density.., digits=2, drop0trailing=TRUE), y= ..density.. ), stat= "bin", vjust = -.5) + facet_grid(~test1) + scale_y_continuous(labels=percent) 

Для подсчета, измените ..density .. на ..count .. в geom_bar и geom_text

ОБНОВЛЕНИЕ для ggplot 2.x

ggplot2 2.0 внес много изменений в ggplot включая тот, который нарушил исходную версию этого кода, когда он изменил функцию stat по умолчанию, используемую geom_bar ggplot 2.0.0 . Вместо вызова stat_bin , как и прежде, для хранения данных, он теперь вызывает stat_count для подсчета наблюдений в каждом месте. stat_count возвращает prop как долю счетчиков в этом месте, а не density .

Код, приведенный ниже, был изменен для работы с этой новой версией ggplot2 . Я включил две версии, каждая из которых показывает высоту баров в процентах от счетчиков. Первая показывает пропорцию счета над баром в процентах, а вторая показывает количество выше бара. Я также добавил метки для оси y и легенды.

  library(ggplot2) library(scales) # # Displays bar heights as percents with percentages above bars # ggplot(test, aes(x= test2, group=test1)) + geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") + geom_text(aes( label = scales::percent(..prop..), y= ..prop.. ), stat= "count", vjust = -.5) + labs(y = "Percent", fill="test2") + facet_grid(~test1) + scale_y_continuous(labels=percent) # # Displays bar heights as percents with counts above bars # ggplot(test, aes(x= test2, group=test1)) + geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") + geom_text(aes(label = ..count.., y= ..prop..), stat= "count", vjust = -.5) + labs(y = "Percent", fill="test2") + facet_grid(~test1) + scale_y_continuous(labels=percent) 

График из первой версии показан ниже.

введите описание изображения здесь

Это проще сделать, если вы предварительно суммируете свои данные. Например:

 library(ggplot2) library(scales) library(dplyr) set.seed(25) test <- data.frame( test1 = sample(letters[1:2], 100, replace = TRUE), test2 = sample(letters[3:8], 100, replace = TRUE) ) # Summarize to get counts and percentages test.pct = test %>% group_by(test1, test2) %>% summarise(count=n()) %>% mutate(pct=count/sum(count)) ggplot(test.pct, aes(x=test2, y=pct, colour=test2, fill=test2)) + geom_bar(stat="identity") + facet_grid(. ~ test1) + scale_y_continuous(labels=percent, limits=c(0,0.27)) + geom_text(data=test.pct, aes(label=paste0(round(pct*100,1),"%"), y=pct+0.012), size=4) 

(FYI, вы также можете поместить метки внутри панели, например, изменив последнюю строку кода на: y=pct*0.5), size=4, colour="white") )

введите описание изображения здесь

Я использовал весь ваш код и придумал это. Сначала назначьте свой ggplot переменной, то есть p <- ggplot (...) + geom_bar (...) и т. Д. Тогда вы можете это сделать. Вам не нужно много суммировать, так как ggplot имеет функцию построения, которая дает вам все это. Я оставлю это вам для форматирования и тому подобного. Удачи.

 dat <- ggplot_build(p)$data %>% ldply() %>% select(group,density) %>% do(data.frame(xval = rep(1:6, times = 2),test1 = mapvalues(.$group, from = c(1,2), to = c("a","b")), density = .$density)) p + geom_text(data=dat, aes(x = xval, y = (density + .02), label = percent(density)), colour="black", size = 3) 

введите описание изображения здесь

  • R: Разбить несбалансированный список в столбце data.frame
  • Прочитать текстовый файл с фиксированной шириной
  • Rscript: определение пути исполняемого скрипта
  • Как определить операторы подмножества для classа S4?
  • Преобразование матрицы данных в матрицу отсутствия присутствия
  • Как использовать функцию strsplit с периодом
  • Соберите несколько наборов столбцов
  • Эквивалентно команде unix unix в консоли R
  • Обратный стоп-бар
  • R: сравнить все столбцы попарно в матрице
  • Как создать последовательный индекс на основе переменной группировки в фрейме данных
  • Interesting Posts

    Как изменить порядок меток граней в ggplot (пользовательские метки обертки граней)

    Установить и получить методы в java?

    двухсторонний график плотности в сочетании с односторонним графиком плотности с выбранными областями в r

    Клиент удаленного рабочего стола в Windows 7 Full Screen Issue

    Как распечатать адрес памяти в C

    Каков наилучший способ установки нового шрифта в эмулятор Android?

    JSON.NET: зачем использовать JToken – когда-либо?

    Как удалить диакритические символы из строки в Swift?

    Выделенная мышь и клавиатура для виртуальной машины, возможно ли это?

    Постоянно скрывать строку состояния Android

    Java HttpServletRequest получает URL-адрес в браузере URL-адрес

    Блокировать определенный URL-адрес в веб-браузерах

    Что такое хорошая OO C ++-shell для sqlite

    Как ограничить пропускную способность, используемую IP-адресом в поле штрафа в pfSense

    Центрировать содержимое внутри столбца в Bootstrap 4

    Давайте будем гением компьютера.