es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gráfico ggplot del envolvente convexo – shiny

Quiero crear una visualización de convex hull en ggplot para cualquier variable numérica que el usuario proporcione, permitiendo que el hull se divida en varios hulls para una variable de entrada categórica elegida.

Algo como esto en shiny donde los usuarios puedan seleccionar tantas variables x como deseen

library(datasets)
library(ggplot2)
library(ggpubr)

df <- iris
str(df)

b <- ggplot(df, aes(x = Sepal.Length+Sepal.Width, y = Petal.Width))

<h1>Convex hull of groups</h1>

b + geom_point(aes(color = Species, shape = Species)) +
  stat_chull(aes(color = Species, fill = Species), 
             alpha = 0.1, geom = "polygon") +
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
  scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))

Aquí está mi código shiny hasta ahora, que, como se puede imaginar, no funciona. Cualquier ayuda será muy apreciada.

library(shiny)
library(dplyr)
library(ggplot2)
library(ggpubr)
df <- mtcars
numeric_cols <- df %>% select(where(is.numeric))
categorical_cols <- df %>% select(where(is.factor))
ui <- fluidPage(
  titlePanel("MTCARS"),
  selectInput("Columns","Numeric Columns",
              names(numeric_cols), multiple = TRUE),
  selectInput("Columns","Categorical Columns",
              names(categorical_cols), multiple = TRUE),
  plotOutput("myplot")
)

server <- function(input, output) {
  Dataframe2 <- reactive({
    mtcars[,input$Columns] 
  })

  my_plot <- reactive({ggplot(Dataframe2(), aes(mpg, cyl))+geom_point()})
  output$myplot <- renderPlot({
    my_plot()
  })
}

shinyApp(ui, server)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una visualización de ggplot del casco convexo para cualquier variable numérica que el usuario proporcione, permitiendo que el casco se divida en varios cascos según una variable categórica elegida, puedes actualizar la función del servidor para incluir los siguientes pasos:

    1. Crear un dataframe reactivo que seleccione las columnas numéricas y categóricas elegidas del dataframe original.
    2. Utilizar la función gather para convertir las columnas numéricas de formato ancho a formato largo.
    3. Crear un objeto ggplot con los datos en formato largo, asignando las columnas numéricas a las estéticas x e y, y la columna categórica a la estética de color.
    4. Añadir una capa stat_chull para crear los cascos convexos para cada categoría.
    5. Retornar el objeto ggplot.

    Aquí tienes una versión actualizada del código shiny:

    “`{r}
    library(shiny)
    library(dplyr)
    library(ggplot2)
    library(tidyr)

    df <- mtcars

    numeric_cols <- df %>% select(where(is.numeric))
    categorical_cols <- df %>% select(where(is.factor))

    ui <- fluidPage(
    titlePanel(“MTCARS”),
    selectInput(“num_cols”, “Columnas Numéricas”,
    names(numeric_cols), multiple = TRUE),
    selectInput(“cat_col”, “Columna Categórica”,
    names(categorical_cols)),
    plotOutput(“myplot”)
    )

    server <- function(input, output) { Dataframe <- reactive({ df %>% select(input$num_cols, input$cat_col)
    })

    long_data <- reactive({ Dataframe() %>%
    gather(key = “variable”, value = “value”, -input$cat_col)
    })

    my_plot <- reactive({
    ggplot(long_data(), aes(x = value, y = !!sym(input$cat_col), color = !!sym(input$cat_col))) +
    geom_point() +
    stat_chull(geom = “polygon”, alpha = 0.2)
    })

    output$myplot <- renderPlot({
    my_plot()
    })
    }

    shinyApp(ui, server)
    “`

    Aquí, input$num_cols es un vector de nombres de columnas numéricas elegidas, e input$cat_col es el nombre de la columna categórica elegida. La función !!sym() se utiliza para evaluar la entrada como un símbolo en el código de ggplot. La función gather se utiliza para convertir las columnas numéricas a formato largo, con los nombres de columna almacenados en una nueva variable llamada variable y los valores almacenados en una nueva variable llamada value. Se añade la capa stat_chull para crear el casco convexo para cada categoría en la columna categórica. El objeto ggplot resultante se retorna y se muestra en la función plotOutput.

Comments are closed.