凸包的 ggplot 视觉效果 - 有光泽

ggplot visual of convex hull - shiny

我想为用户提供的任何数字变量创建凸包的 ggplot 可视化,同时允许凸包拆分为选定的分类输入变量的多个包。

像 shiny 这样的东西,用户可以根据需要选择任意数量的 x 变量

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

df<- iris
str(df)

b <- ggplot(df, aes(x = Sepal.Length+Sepal.Width, y = Petal.Width))
 
# Convex hull of groups
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"))

到目前为止,这是我的闪亮代码,不用说,work.Any将不胜感激

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)

您有 3 个问题。首先,您在 mtcars 中有零个分类变量。其次,您应该使用唯一的 ID,但您对两个 selectInputs 使用相同的 ID。最后,对于绘图,您需要使用选定的列,而不是指定 mpgcyl。试试这个

library(shiny)
library(dplyr)
library(ggplot2)
library(ggpubr)
df<- mtcars
numeric_cols <- df %>% dplyr::select(where(is.numeric))
categorical_cols <- df %>% dplyr::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({
    req(length(input$Columns)>=2)
    mtcars[,input$Columns] 
  })
  
  my_plot<- reactive({ggplot(Dataframe2(), aes(.data[[input$Columns[1]]],.data[[input$Columns[2]]] ))+geom_point()})
  output$myplot <- renderPlot({
    my_plot()
  })
}

shinyApp(ui, server)