Estou trabalhando facet_wrap()
para traçar probabilidades para três variáveis discretas.
Abaixo está o gráfico facetado que consegui fazer:
Agora quero adicionar o logotipo dos times correspondentes em vez do texto do eixo.
Aqui está um exemplo do meu dataframe:
structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L), type = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L,
2L, 3L, 3L), levels = c("Domicile", "Nul", "Extérieur"), class = "factor"),
prob = c(0, 0, 0, 0, 0, 0, 0.3343, 0.1349, 0.3009, 0.2453,
0.3648, 0.6197), team = c("Reims", "Toulouse", "Nul", "Nul",
"Rennes", "Brest", "Reims", "Toulouse", "Nul", "Nul", "Rennes",
"Brest"), image_file = c("~/teamlg/Reims.png", "~/teamlg/Toulouse.png",
"Nul", "Nul", "~/teamlg/Rennes.png", "~/teamlg/Brest.png",
"~/teamlg/Reims.png", "~/teamlg/Toulouse.png", "Nul", "Nul",
"~/teamlg/Rennes.png", "~/teamlg/Brest.png"), game = c("Reims - Rennes",
"Toulouse - Brest", "Reims - Rennes", "Toulouse - Brest",
"Reims - Rennes", "Toulouse - Brest", "Reims - Rennes", "Toulouse - Brest",
"Reims - Rennes", "Toulouse - Brest", "Reims - Rennes", "Toulouse - Brest"
), frame = c("a", "a", "a", "a", "a", "a", "b", "b", "b",
"b", "b", "b"), frame2 = c("a", "a", "b", "b", "c", "c",
"d", "d", "e", "e", "f", "f")), row.names = c(NA, -12L), class = c("tbl_df",
"tbl", "data.frame"))
Já criei uma image_file
variável no meu dataframe com os caminhos correspondentes dos logotipos de cada time.
Então adiciono uma label
coluna primeiro:
fr$labels<- labels <- ifelse(fr$type != "Nul", sprintf("<img src='%s' width='50' height='50'/>", fr$image_file),"Nul")
Então eu ploto da seguinte forma:
f <- ggplot(fr, aes(x = type, y = prob,fill = type, group = type))
f<-f+geom_col() +
geom_text(aes(label = ifelse(prob > 0,paste0(" ",
scales::percent(prob, accuracy = 0.01)),""),
color = type),fontface = "bold",family = "Oswald", size = 4,vjust = -1)+
scale_y_continuous(labels = scales::percent_format(accuracy = 1),expand = expansion(add = c(0,0.25)))+
##adding the labels variable in the scale to get the logos###
scale_x_discrete(name = NULL, label = labels) +
theme(
axis.text.x = ggtext::element_markdown()
)+
facet_wrap(~game, scale = "fixed",axes = "all_x",as.table = TRUE,ncol=1)+
labs(subtitle = "Estimations après simulation de Monte Carlo sur un paramètre interne")+
transition_states(frame2, wrap = FALSE)+
shadow_mark(past = TRUE)+
enter_fly(y_loc = 0)
f
Como você pode ver, isso não pega o logotipo do time correspondente, mas sim as três primeiras linhas da labels
coluna que adicionei. E também repete o mesmo para o segundo gráfico abaixo.
Como eu poderia obter os logos corretos correspondentes a cada time para que eu tenha no eixo x: "Logo 1" - "Nul" - "Logo2" e a mesma sequência com logos diferentes para o segundo gráfico? Obrigado pela ajuda.
Aqui está uma opção para atingir o resultado desejado, que usa uma variável auxiliar a ser mapeada,
x
o que garante que você obtenha a ordem desejada para as categorias, um vetor nomeado para atribuir os rótulos às categorias da coluna auxiliar e, finalmente, usascales="free_x"´ in
facet_wrap`: