Попытка построить гистограмму с накоплением из процентов

Я пытаюсь построить гистограмму с накоплением скорости компьютеров, используемых в разных отделах, с подробностями о том, какой тип ПК в каждом столбце (так, чтобы для каждого отдела type1+type2+type3=tot_rate) . У меня есть фрейм данных, который выглядит так:

dat=read.table(text = "Tot_rate   Type1   Type2   Type3
DPT1 72 50 12 10 
DPT2 80 30 20 30
DPT3 92 54 14 24", header = TRUE)

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

Вот как я думал, что я мог бы это, но это просто не работает

p<-ggplot(dat, aes(x=row.names(dat), y=dat$Tot_rate, fill=data[,2:ncol(dat)])) + geom_bar(stat = "identity")+theme_minimal()+xlab("") + ylab("PC rate")+geom_abline(slope=0, intercept=90,  col = "red",lty=2) + theme(axis.text.x = element_text(angle = 90, hjust = 1))
p

Когда я пробую код выше, я получаю:

Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous.
Error: Aesthetics must be either length 1 or the same as the data (9): fill

Не могли бы вы помочь? Спасибо, Лиана

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот один из способов сделать это с помощью пакета расширений ggplot2 под названием ggstatsplot-

set.seed(123)
library(tidyverse)

# creating dataframe in long format
(dat <- read.table(
  text = "Tot_rate   Type1   Type2   Type3
DPT1 72 50 12 10 
DPT2 80 30 20 30
DPT3 92 54 14 24",
  header = TRUE
) %>%
  tibble::rownames_to_column(var = "id") %>%
  tidyr::gather(., "key", "counts", Type1:Type3))

#>     id Tot_rate   key counts
#> 1 DPT1       72 Type1     50
#> 2 DPT2       80 Type1     30
#> 3 DPT3       92 Type1     54
#> 4 DPT1       72 Type2     12
#> 5 DPT2       80 Type2     20
#> 6 DPT3       92 Type2     14
#> 7 DPT1       72 Type3     10
#> 8 DPT2       80 Type3     30
#> 9 DPT3       92 Type3     24

# bar plot
ggstatsplot::ggbarstats(dat,
                        main = id,
                        condition = key,
                        counts = counts,
                        messages = FALSE)

Created on 2019-05-27 by the reprex package (v0.3.0)

Спасибо ! К сожалению, этот пакет недоступен для моей версии R... поэтому я подожду другого ответа.

Liana.R 27.05.2019 14:36
Ответ принят как подходящий
library(reshape2)

dat=read.table(text = "Department Tot_rate   Type1   Type2   Type3
DPT1 72 50 12 10 
DPT2 80 30 20 30
DPT3 92 54 14 24", header = TRUE)


long_dat <- dat[-2] %>% gather(type,number,Type1:Type3,-c("Department"))

Сначала я изменил данные, которые у вас были: я поместил отдел в столбец и изменил ваши данные из широкого в длинный формат (убрал tot_rate, который здесь не нужен).

p <- ggplot(data=long_dat,aes(x=Department,y=number,fill=type)) +
  geom_bar(position = "fill",stat = "identity")

p

Чтобы масштабировать гистограмму в процентных долях, мы используем аргумент position для geom_bar, установленный на position=fill.

Другие вопросы по теме