Я пытаюсь построить гистограмму с накоплением скорости компьютеров, используемых в разных отделах, с подробностями о том, какой тип ПК в каждом столбце (так, чтобы для каждого отдела 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
Не могли бы вы помочь? Спасибо, Лиана
Вот один из способов сделать это с помощью пакета расширений 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)
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
.
Спасибо ! К сожалению, этот пакет недоступен для моей версии R... поэтому я подожду другого ответа.