如果我使用默认的 Rgraphics
包,那么我可以使用交错的基线制作图。
这是使用 CPTtools 包的示例(可在 github 上找到)
library(devtools)
install_github("ralmond/CPTtools")
library(CPTtools)
margins <- data.frame (
Trouble=c(Novice=.19,Semester1=.24,Semester2=.28,Semseter3=.20,Semester4=.09),
NDK=c(Novice=.01,Semester1=.09,Semester2=.35,Semseter3=.41,Semester4=.14),
Model=c(Novice=.19,Semester1=.28,Semester2=.31,Semseter3=.18,Semester4=.04)
)
margins <- as.matrix(margins)
baseline <- apply(margins[1:2,],2,sum)
stackedBarplot(margins,offset=-baseline,
main="Marginal Distributions for NetPASS skills",
sub="Baseline at 2nd Semester level.",
col=hsv(223/360,.2,0.10*(5:1)+.5))
这将产生输出:
关键是offset
传递给barplot
函数的参数。
由于各种原因,我正在尝试重写CPTtools
使用 ggplot 的图形。我不知道如何调整堆叠条的位置。我最接近的是
library(tidyverse)
margins <- data.frame (
Trouble=c(Novice=.19,Semester1=.24,Semester2=.28,Semseter3=.20,Semester4=.09),
NDK=c(Novice=.01,Semester1=.09,Semester2=.35,Semseter3=.41,Semester4=.14),
Model=c(Novice=.19,Semester1=.28,Semester2=.31,Semseter3=.18,Semester4=.04)
)
tibble::rownames_to_column(margins,var="Level") %>%
tidyr::pivot_longer(-Level,
names_to="Attribute", values_to="probability") ->
marg
marg %>% filter(Level=="Novice" | Level=="Semester1") %>%
group_by(Attribute) %>% summarize(baseline=sum(probability)) ->
bases
ggplot(marg,aes(Attribute,probability,fill=Level)) +
geom_col(position=position_stack() +
scale_fill_brewer(palette="Blues")