尝试从百分比绘制堆积条形图

时间:2019-05-27 12:14:35

标签: r ggplot2

我正在尝试绘制不同部门使用的计算机速率的堆积条形图,并详细说明每个条形中的PC类型(以便每个部门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

可以帮忙吗? 谢谢, 藤本植物

2 个答案:

答案 0 :(得分: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)

reprex package(v0.3.0)于2019-05-27创建

答案 1 :(得分:1)

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的{​​{1}}参数设置为geom_bar