Plot stacked proportional bars

# -------------------------------
# random sample
# -------------------------------
# prepare data for 4-category likert scale, 5 items
Q1 <- as.factor(sample(1:4, 500, replace = TRUE,
                       prob = c(0.2, 0.3, 0.1, 0.4)))
Q2 <- as.factor(sample(1:4, 500, replace = TRUE,
                       prob = c(0.5, 0.25, 0.15, 0.1)))
Q3 <- as.factor(sample(1:4, 500, replace = TRUE,
                       prob = c(0.25, 0.1, 0.4, 0.25)))
Q4 <- as.factor(sample(1:4, 500, replace = TRUE,
                       prob = c(0.1, 0.4, 0.4, 0.1)))
Q5 <- as.factor(sample(1:4, 500, replace = TRUE,
                       prob = c(0.35, 0.25, 0.15, 0.25)))

likert_4 <- data.frame(Q1, Q2, Q3, Q4, Q5)

# create labels
levels_4 <- c("Independent",
              "Slightly dependent",
              "Dependent",
              "Severely dependent")

# plot stacked frequencies of 5 (ordered) item-scales
sjp.stackfrq(likert_4, legendLabels = levels_4)

plot of chunk sjp.stackfrq

# -------------------------------
# Data from the EUROFAMCARE sample dataset
# -------------------------------
library(sjmisc)
data(efc)

# recveive first item of COPE-index scale
start <- which(colnames(efc) == "c82cop1")

# recveive first item of COPE-index scale
end <- which(colnames(efc) == "c90cop9")

# retrieve variable and value labels
varlabs <- get_label(efc)
vallabs <- get_labels(efc)

# create value labels. We need just one variable of
# the COPE-index scale because they have all the same
# level / category / value labels
levels <- vallabs['c82cop1']

# create item labels
items <- varlabs[c(start:end)]

sjp.stackfrq(efc[, c(start:end)],
             legendLabels = levels,
             axisLabels.y = items,
             jitterValueLabels = TRUE)

plot of chunk sjp.stackfrq

# -------------------------------
# auto-detection of labels
# -------------------------------
sjp.stackfrq(efc[, c(start:end)])

plot of chunk sjp.stackfrq