我试图想出一种以特定方式可视化一些李克特量表数据的方法。我什至不知道如何伪造它的样子,所以我希望我的解释足够了。
我有以下(假)数据:
n 个问题,每个问题有 5 个答案(非常同意、同意、不同意、非常不同意、不知道)
我想沿着中心轴可视化数据(最好使用 ggplot),以便两个“同意”答案位于左侧,两个“不同意”答案位于右侧,然后位于一个单独的块上一侧,代表“不知道”的块。它应该大致如下所示:
Q1: *****++++++++|------!! ?????
Q2: ****++++++|----!!!!!! ???????
Q3: **++++++|---!!! ??????????
*: strongly agree, +: agree, -: don't agree, !:strongly disagree, ?: don't know
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这种表示方式允许比较同意和不同意的实际数量,而不会隐藏有多少“不知道”。我陷入困境的是如何为不知道的情况创建第二个元素。有任何想法吗?
以下是一些虚假数据:
structure(list(Q = structure(1:3, .Label = c("Q1", "Q2", "Q3"
), class = "factor"), SA = c(25, 18, 12), A = c(30, 25, 15),
DA = c(25, 20, 25), SDA = c(10, 18, 25), DK = c(10, 19, 23
)), row.names = c(NA, -3L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的,您可以只分面“DK”类别。
library(ggplot2)
library(tidyr)
library(scales)
df <- structure(list(Q = structure(1:3, .Label = c("Q1", "Q2", "Q3"
), class = "factor"), SA = c(25, 18, 12), A = c(30, 25, 15),
DA = c(25, 20, 25), SDA = c(10, 18, 25), DK = c(10, 19, 23
)), row.names = c(NA, -3L), class = "data.frame")
lvls <- colnames(df)[c(2,3,5,4,6)]
ggplot(
pivot_longer(df ,-1),
aes(y = Q, fill = name, group = factor(name, lvls),
x = ifelse(name %in% c("A", "SA"), -1, 1) * value)
) +
geom_col() +
facet_grid(~ name == "DK", scales = "free_x", space = "free_x") +
scale_fill_manual(
values = c(viridis_pal()(4), "grey50"),
limits = colnames(df)[-1]
)
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2021 年 11 月 4 日创建(v2.0.1)