Я хочу добавить процент подсчета для каждой категории в качестве метки на мою круговую диаграмму ggplot
Я использую код:
age_pie_chart <- ggplot(data = data , aes(x = "", fill = `Q1: How old are you?`))+
geom_bar(position = "fill", width = 1) +
coord_polar(theta = "y") + xlab("") + ylab("") + blank_theme + scale_fill_grey()+
theme(axis.text.x=element_blank())
age_pie_chart
Я хочу, чтобы процент каждой категории был добавлен в диаграмму. из поиска я понимаю, что мне нужно использовать функцию geom_text, но перед этим мне нужно построить частотную таблицу с процентным соотношением количества каждой категории.

1 ответ
Вот пример с фиктивными данными. Во-первых, это фиктивные данные. я используюsample()
для выбора значений, а затем я гарантирую, что у нас есть «маленький» фрагмент, добавляя только 2 значения дляQ1 = "-15"
.
set.seed(1234)
data <- data.frame(
Q1 = c(sample(c('15-7','18-20','21-25'), 98, replace=TRUE), rep('-15', 2))
)
Что касается сюжета, он в основном такой же, как и ваш сюжет, хотя вам не нужноwidth
аргумент в пользуgeom_bar()
.
Чтобы правильно расположить текст, вы захотите использоватьgeom_text()
. Вы можете рассчитать частоту перед построением графика, или вы могли быggplot
рассчитать это на лету так же, как это было дляgeom_bar
используяstat="count"
для тебяgeom_text()
слой.
библиотека (ggplot2)
ggplot(data=data, aes(x="", fill=Q1)) +
geom_bar(position="fill") +
geom_text(
stat='count',
aes(y=after_stat(..count..),
label=after_stat(scales::percent(..count../sum(..count..),1))),
position=position_fill(0.5),
) +
coord_polar(theta="y") +
labs(x=NULL, y=NULL) +
scale_fill_brewer(palette="Pastel1") +
theme_void()
Чтобы было понятно, что происходит в этомgeom_text()
линия:
я использую
stat="count"
. Мы хотим получить доступ к этой статистике подсчета на графике, поэтому нам нужно указать, чтобы использовать эту специальную статистическую функцию.Мы используем
..count..
в рамках эстетики. Ключевым моментом здесь является то, что для доступа к..count..
value, нам нужна функция stat для вычисления в первую очередь. Вы можете использоватьafter_stat()
функция, чтобы указать, что функция stat должна выполняться первой перед отображением эстетики - это открывает..count..
до использования для использования вaes()
!Расчет процента для метки. Это происходит через
..count../sum(..count..)
. я используюscales::percent()
как способ отформатировать метку в процентах.Позиция = заливка . Как и в случае с геометрией стержня, нам также необходимо использовать
position="fill"
. Вам необходимо указать, чтобы использовать фактическиеposition_fill()
метод, поскольку он позволяет нам получить доступ кvjust
аргумент. Это помещает каждое текстовое значение в «середину» каждого фрагмента. Если вы просто установитеposition="fill"
, вы размещаете текст на краю каждого фрагмента.
-
0Большое спасибо за ответ на мой вопрос, я попробовал код, и он сработал: D
Другие вопросы
- Создайте сводную таблицу двух категориальных и числовых переменных1 ответ
У меня есть следующий гипотетический фреймворкRegion <- c("District A", "District B","District A","District A","District B") Gender <- c("Male","Male","Female", "Male","Female") Age <- c(20, ...
- Создайте цикл для генерации имен столбцов в большом списке1 ответ
Я хотел бы создать цикл, чтобы изменить имена столбцов, как показано:a <- c("day", "month", "year", "flow") У меня есть большой список из 6937 элементов, которые мне удалось импортировать в R:library(tidyverse) library(readtext) txt_files_ls <- paste...
- Построение лаговой матрицы в R1 ответ
Каждый год несколько человек переезжают в деревню. Это представлено следующим вектором:x <- c(304, 213, 688, 400, 122, 449, 143, 90) Ежегодно из села уезжает 10% людей. Доля людей из каждой когорты, остающихся через определенное количество лет (за 10 лет):decay <- (1-0.1)^(0:10) Используя R, к...
- назначать имена столбцам фреймов данных в списке1 ответ
У меня есть список фреймов данных# Create dummy data df1<-data.frame( c(1,2,3),c(2,3,4)) df2<-data.frame(c(5,6,7),c(4,5,6)) # Create a list l<-list(df1, df2) Я хочу присвоить столбцам имена. В видеl[[1]][,1] дает мне доступ к первому столбцу, я думал, что могу назначить 'names' в ...
- Моя горизонтальная полоса обрезает текст, когда я сохраняю изображение. Как сделать полосы короче, а текст длиннее?1 ответ
Я новичок в R, так что простите мое невежество. Итак, я создал базовую горизонтальную гистограмму, используяbarplot( ). Мой текст на оси Y в основном исчезает. [IMG_OUR_ID=67.png] [IMG_OUR_ID=68.png] Есть ли способ удлинить и отобразить текст? Это мой код:barplot(mydata$`Sum Impact Risk`~mydata$`Eco...
- Почему case_when () вычисляет ложное условие?3 ответ
У меня есть data.frame с групповой переменной и целочисленной переменной с отсутствующими данными.df<-data.frame(group=c(1,1,2,2,3,3),a=as.integer(c(1,2,NA,NA,1,NA))) Я хочу вычислить максимально доступное значение переменнойa внутри каждой группы: в моем примере я должен получить 2 для группы 1...
- Удаление повторяющихся строк на основе самой последней записи3 ответ
Приношу свои извинения, поскольку я знаю, что варианты этого вопроса задавались раньше, но я попытался найти предоставленные ответы и не смог применить их к своим данным. У меня есть следующие данные по результатам опроса. Несколько человек прошли опросы для участия в различных вебинарах. Человек мо...
- Объедините набор переменных списка в фрейм данных, используя список, который ссылается на эти переменные списка1 ответ
Это было сложно сформулировать, поэтому создали пример. У меня есть набор переменных списка, которые я хотел бы объединить в фрейм данных. Это примеры списковa <- 2:7 b <- 9:14 c <- 25:30 d <- 31:36 У меня есть список, в котором есть элементы, которые ссылаются на приведенные выше имен...

"Завидую тестировщикам: все хотят с ними дружить."
dput
образец данных, над которыми вы работаете. Sinh Nguyen