我正在尝试绘制不同部门使用的计算机速率的堆积条形图,并详细说明每个条形中的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
可以帮忙吗? 谢谢, 藤本植物
答案 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
。