Gostaria de incorporar imagens como parte do eixo x em um gráfico plotly (não no lugar do eixo x). Código do que tentei:
library(plotly)
library(dplyr)
library(tidyr)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo) %>%
pivot_longer(cols = c(SF_Zoo, LA_Zoo)) %>%
mutate(Animals = paste(Animals, "<img src='https://images.plot.ly/language-icons/api-home/r-logo.png'</img>"))
plot_ly(data, x = ~Animals, y = ~value, type = 'bar', color = ~name) %>%
layout(
barmode = "stack"
)
Como pode ser visto, as img
tags são impressas como string literal. Eu tentei envolver as etiquetas de marcação Animals
com, htmltools::HTML
mas sem sucesso.
Este guia do plotly fala sobre incorporar imagens/logotipos dentro da área do plot, mas eu gostaria de incorporar imagens como parte dos rótulos de marcação. E esta solução Python SO substitui os rótulos de marcação por imagens inteiramente.
Infelizmente, diferentemente do Plotly em Python, o R não suporta diretamente a incorporação de imagens dentro de rótulos de tick. No entanto, podemos obter esse efeito usando imagens de fundo e posicionamento manual.
O código a seguir adiciona as imagens que você precisa, mas talvez você queira alterar os parâmetros do
images
objeto para adicioná-las corretamente ao seu gráfico.Assim como na resposta do python , você pode colar as imagens no layout iterando sobre os valores x dos seus dados. Para isso, você pode usar
lapply
para construir a lista de imagens. Usexref = "x"
conforme descrito aqui . Eu também criaria algum espaço abaixo do gráfico para as imagens usandomargin = list(b = 150)
, mas você também pode empurrá-las para uma camada de fundo usandolayer="below"
. Você pode então usarxanchor = "center"
para sempre centralizar as imagens.Código