HH::likert 函数中每个离散选项的不同模式

问题描述 投票:0回答:1

我想使用 HH 包创建一个 Likert 图,该包在每个条形类别中结合了视觉模式(例如阴影线),以提高色盲用户的可访问性。

显然,对于客户来说,拥有灰度或其他色盲友好的颜色是不够的。

每个条形的不同类别(例如,非常高兴、高兴、既不高兴也不悲伤、悲伤、非常悲伤),除了不同的颜色之外,还必须包含一些图案或其他视觉区别(例如符号)。

这是一个可重现的示例:

样本数据

## Dataframe with the necessary variables
df <- data.frame(institutt = c("institutt1", "institutt2"), 
                 Spørsmål = c("q1", "q1"), 
                 Veryhappy = c(3, 5), 
                 Happy = c(2, 4),
                 Neithernor = c(3, 2), 
                 Sad = c(4, 3), 
                 Verysad = c(5, 2))

开始剧情

install.packages("HH")
library(HH)
likert_plot <- df %>%  
    likert(grouping = df$institutt,
           as.percentage = TRUE) 

这会创建:这个数字,正如预期的那样。

如何在“非常快乐”、“快乐”等类别中添加线条、十字或符号来区分它们?

r plot visualization lattice likert
1个回答
0
投票

虽然“HH”包可以毫不费力地生成漂亮的李克特图,但它是一个相当老的包(目前至少有 18 年了),并且使用网格图形系统,该系统不支持图案填充。网格图形中的绘制方法绘制图形对象而不将它们返回给用户。这意味着我们无法使用底层

grid
图形系统中开发的新功能来修改输出。

虽然捕获和修改输出并非“不可能”,但它既困难又复杂。当然,切换到替代系统要容易得多,例如带有 ggpattern 的 ggplot: library(tidyverse) library(ggpattern) df %>% pivot_longer(-c(1:2), names_to = "level") %>% mutate(level = fct_inorder(level)) %>% group_by(institutt, Spørsmål) %>% mutate(left = cumsum(lag(value, 1, 0)), right = left + value) %>% mutate(xmin = left - (left + right)[level == "Neithernor"]/2) %>% mutate(xmax = xmin + value) %>% ungroup() %>% mutate(ymin = as.numeric(factor(institutt)) - 0.3) %>% mutate(ymax = ymin + 0.6) %>% ggplot(aes(fill = level, pattern = level, pattern_angle = level)) + geom_vline(xintercept = 0, linetype = 2) + geom_rect_pattern(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax), pattern_color = NA, pattern_fill = "white", pattern_spacing = 0.02) + scale_fill_manual(values = c("#e16a86", "#e79aa9", "#e2e2e2", "#a2ace5", "#768be6")) + scale_pattern_manual(values = c("none", "stripe", "crosshatch", "stripe", "circle")) + scale_y_reverse(limits = c(2.5, 0.5), breaks = 1:2, labels = levels(factor(df$institutt))) + scale_pattern_angle_manual(values = c(45, 90, 45, 45, 0)) + theme_classic(20) + theme(legend.position = "bottom", panel.background = element_rect(color = "black"), axis.line = element_blank(), legend.key.size = unit(10, "mm"))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.