У меня проблема с гистограммой плотности в ggplot2. Я работаю в RStudio, и я пытаюсь создать гистограмму плотности дохода, зависящую от профессии человека. Моя проблема в том, что когда я использую свой код:
data = read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",
sep = ",",header=F,col.names=c("age", "type_employer", "fnlwgt", "education",
"education_num","marital", "occupation", "relationship", "race","sex",
"capital_gain", "capital_loss", "hr_per_week","country", "income"),
fill=FALSE,strip.white=T)
ggplot(data=dat, aes(x=income)) +
geom_histogram(stat='count',
aes(x= income, y=stat(count)/sum(stat(count)),
col=occupation, fill=occupation),
position='dodge')
Я получаю в ответ гистограмму каждого значения, разделенного на общее количество всех значений всех категорий, и я хотел бы, например, для людей, зарабатывающих более 50 тысяч, которые занимаются «ремонтом ремесла», делить на общее количество людей, занимающихся ремеслом, и то же самое для <= 50K и той же категории занятий, и то же самое для всех других типов занятий
И второй вопрос: как я могу отсортировать столбцы в порядке убывания после построения гистограммы правильной плотности?
Повторное использование гистограммы. Гистограмма отображает плотность или частоту, и в этом случае вы сравниваете два интервала: <= 50K и> 50K. geom_bar() может быть здесь лучшим вариантом.





Это ситуация, когда имеет смысл сначала повторно агрегировать ваши данные, прежде чем строить график. Агрегирование в вызове ggplot отлично работает для простых агрегатов, но когда вам нужно агрегировать, а затем отделить группу для второго вычисления, это работает не так хорошо. Также обратите внимание, что, поскольку ваша ось x дискретна, мы не используем здесь гистограмму, вместо этого мы будем использовать geom_bar()
Сначала мы агрегируем по количеству, затем вычисляем процент от общего количества, используя occupation в качестве группы.
d2 <- data %>% group_by(income, occupation) %>%
summarize(count= n()) %>%
group_by(occupation) %>%
mutate(percent = count/sum(count))
Затем просто постройте гистограмму, используя geom_bar и position = 'dodge', чтобы столбики располагались бок о бок, а не складывались в стопку.
d2 %>% ggplot(aes(income, percent, fill = occupation)) +
geom_bar(stat = 'identity', position='dodge')
потрясающе, спасибо! Не могли бы вы помочь мне со второй частью вопроса (как теперь отсортировать эти столбцы в порядке убывания, отдельно для> 50K и <= 50K)?
@ Ra-v, который относится к новому вопросу, и есть некоторые существующие вопросы, которые уже касаются сортировки уклонившихся столбцов.
Пожалуйста, отредактируйте свой вопрос, чтобы включить данные и сделать их воспроизводимыми, либо используя
dput()для обмена вашими данными, либо воспроизведя вашу проблему с помощью встроенного или имитированного фрейма данных. См. здесь для советов по включению данных в вопросы r.