Baseado neste post para gglikert. Lá a coluna group1 tinha 2 níveis e group2 tem 3. Agora se eu implementar com 3 níveis em group1 e 4 níveis em group2
library(ggstats)
library(dplyr)
library(ggplot2)
library(tidyverse)
library(patchwork)
# Define Likert scale levels
likert_levels <- c(
"Strongly disagree",
"Disagree",
"Neither agree nor disagree",
"Agree",
"Strongly agree"
)
# Generate sample data
set.seed(42)
df <- tibble(
q4 = sample(likert_levels, 150, replace = TRUE, prob = 1:5),
q5 = sample(c(likert_levels, NA), 150, replace = TRUE),
q6 = sample(likert_levels, 150, replace = TRUE, prob = c(1, 0, 1, 1, 0))
) |>
mutate(across(everything(), ~ factor(.x, levels = likert_levels)))
# Add grouping variables
df_group <- df
df_group$group1 <- sample(c("Friday", "Saturday", "Sunday"), 150, replace = TRUE)
df_group$group2 <- sample(c("Abu Dhabi - UAE", "Buenos Aires - Argentina", " San Sebastian - Spain","New York City - USA"), 150, replace = TRUE)
# Generate Likert plots with conditional faceting for group1 and group2
plots <- df_group |>
split(~ group1 + group2) |>
imap(\(x, y) {
# Create the plot with the corresponding facet layer
gglikert(x,
q4:q6,
labels_size = 3,
sort = "descending"
) +
facet_grid(group2 ~ group1, scales = "free_y")
})
# Combine plots with patchwork
combined_plot <- wrap_plots(
plots,
ncol = length(unique(df_group$group1)),
nrow = length(unique(df_group$group2)),
guides = "collect"
) &
theme(
legend.position = "bottom",
# Remove y-axis text for columns 2 and 3
strip.text.y.right = element_blank(), # Remove facet strip text on the right
axis.text.y.right = element_blank(), # Remove y-axis text on the right
axis.ticks.y.right = element_blank() # Remove y-axis ticks on the right
)
# Display the combined plot
combined_plot
Portanto, as colunas de facetas "Sexta-feira", "Sábado", "Domingo" aparecem em todas as linhas e em todas as colunas. E as linhas "Abu Dhabi - Emirados Árabes Unidos", "Buenos Aires - Argentina", "San Sebastian - Espanha", "Nova York - EUA" não são exibidas. Elas devem ser exibidas na última coluna. Além disso, o texto do eixo y deve estar presente apenas na primeira coluna.
Como posso modificar o imap()
com o ifelse para que seja exibido corretamente como aqui ?
Alguma ajuda?
Com base na minha resposta atualizada à sua pergunta anterior, você pode atingir o resultado desejado como aqui, onde agora generalizei a abordagem ainda mais, livrando-me dos números mágicos. Portanto, em princípio, o código agora deve funcionar para qualquer número de grupos: