2 votes

R plotly 3d bar plot

Pour des tracés 3D interactifs intégrés dans les sorties R shiny, le paquet R plotly offre maintenant quelques bonnes options, d'autant plus que le maintien de l'alternative shiny-rgl Le paquet semble s'estomper récemment.

Cependant, est-il possible de créer un diagramme à barres 3d en utilisant plotly ?

2voto

martin Points 376

Une astuce pour créer l'apparence d'un graphique à barres en 3D consiste à tracer des barres d'erreur à la place.

Comme commenté dans le code ci-dessous, les valeurs de la dimension pour laquelle des barres sont souhaitées sont divisées par deux avant de les fournir via add_trace où ils sont redimensionnés à tout ce qui est inférieur à la visibilité (ou les rendre transparents). Les barres d'erreur symétriques des valeurs divisées par deux conduisent alors simplement à des barres. Deux groupes de données df1 y df2 sont ajoutés dans l'exemple ci-dessous.

library(shiny)
library(plotly)

ui <- fluidPage(
    plotlyOutput("plotlii", width = "100%", height = "700px")
)

server <- function(input, output) {
    output$plotlii <- renderPlotly({
        # the data:     
        obs1 <- matrix(ncol=3,
            c(1,2,3,1,2,2,6,6,4)
        )
        df1 <- setNames(data.frame(obs1), c("a", "b", "c"))
        df1$c<-(.5*df1$c) # half values to make them the centre point of the bars
        obs2 <- matrix(ncol=3,
            c(14,16,10,11,12,12,23,23,22)
        )
        df2 <- setNames(data.frame(obs2), c("a", "b", "c"))
        df2$c<-(.5*df2$c) # half values to make them the centre point of the bars
        # the plot:
        p <- plot_ly(type="scatter3d",mode="markers",showlegend=FALSE)%>%
        add_trace(p,
            x = ~a, y = ~b, z = ~c,
            data = df1,
            color=I("red"),
            size = I(1),
            name = "Group a",
            error_z=list(
                color="red",
                thickness=0,
                symmetric = TRUE, 
                type = "data" ,
                array = df1$c
            )
        )%>%
        add_trace(p,
            x = ~a, y = ~b, z = ~c,
            data = df2,
            color=I("gray"),
            size = I(1),
            name = "Group a",
            error_z=list(
                color="gray",
                symmetric = TRUE, 
                type = "data" ,
                array = df2$c
            )
        )   
    })
}

shinyApp(ui, server)

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X