GOOGLE ADS

mercredi 20 avril 2022

Plotly met à jour l'argument imbriqué via updatemenus

Je souhaite créer un menu déroulant à l'aide des menus de mise à jour de R Plotly pour pouvoir modifier l'image source dans un tracé.

Voici ce que j'ai fait jusqu'à présent, sans succès:

library(plotly)
library(magrittr)
img1 <- "https://www.gravatar.com/avatar/dc04a25fbabbffc1f1b7c6a3362bfae4?s=256&d=identicon&r=PG"
img2 <- "https://www.gravatar.com/avatar/bc680ed8d2555accacebc0fe2d8c9691?s=256&d=identicon&r=PG"
plot_ly(x = 1:5, y = 1:5, type = 'scatter', mode = 'markers') %>%
layout(
images = list(
list(
source = img1,
xref = "x",
yref = "y",
x = 3,
y = 4,
sizex = 2,
sizey = 2
)
),
updatemenus = list(
list(
y = 1,
buttons = list(
list(method = "restyle",
args = list(list(images = list(list(source = img1)))),
label = "img1"),
list(method = "restyle",
args = list(list(images = list(list(source = img2)))),
label = "img2")
)
)
)
)

entrez la description de l'image ici

Qu'est-ce que je rate?


Solution du problème

Il y a probablement plus d'une façon de faire cela, mais cela fonctionne. Pour les mises à jour de mise en page, vous allez généralement utiliser la méthode relayout. Vous devez également fournir toutes les informations (c'est-à-dire, x, y, xrefetc.).

library(plotly)
img1 <- "https://www.gravatar.com/avatar/dc04a25fbabbffc1f1b7c6a3362bfae4?s=256&d=identicon&r=PG"
img2 <- "https://www.gravatar.com/avatar/bc680ed8d2555accacebc0fe2d8c9691?s=256&d=identicon&r=PG"
imgOne = list( # create image expectations
list(
source = img1,
xref = "x", yref = "y",
x = 3, y = 4,
sizex = 2, sizey = 2))
imgTwo = list( # create image expectations
list(
source = img2,
xref = "x", yref = "y",
x = 3, y = 4,
sizex = 2, sizey = 2))
plot_ly(x = 1:5, y = 1:5, type = 'scatter', mode = 'markers') %>%
layout(
images = imgOne,
updatemenus = list(
list(
y = 1,
active = 0,
buttons = list(
list(label = "None",
method = "relayout",
args = list(list(images = c()))),
list(label = "img1",
method = "relayout",
args = list(list(images = imgOne))),
list(label = "img2",
method = "relayout",
args = list(list(images = imgTwo)))
))))

Il existe quelques methodoptions pour updatemenus. Vous pouvez en savoir plus à ce sujet ici.

entrez la description de l'image ici

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...