首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R shiny :在交互式3d打印中组合选项和滑块

R shiny :在交互式3d打印中组合选项和滑块
EN

Stack Overflow用户
提问于 2020-06-16 14:43:51
回答 1查看 162关注 0票数 0

我想制作一个3d散点图,它可以用鼠标旋转。我很高兴这个没有弹出窗口(虽然这不是必须的,但现在让事情变得更容易)。我可以很高兴地用renderRglwidget()做到这一点。我还设法添加了一个滑块来更改x变量的范围。

现在我搞不懂了:我想在x轴的不同变量之间切换,但保留所有其他特性。(我自己管理了一个开关,但随后其他特性就丢失了!)

一旦掌握了这一点,我将希望以这种灵活的方式拥有所有三个轴:选择变量并更改显示的范围。这意味着每个数值变量可以在任意轴上进行任意组合(当然,除了选择同一变量两次之外)。

思考未来(!!)如果可以根据虚拟变量显示不同的颜色,那将是很酷的。呼!(线性)回归线对我来说没有多大意义,因为现实生活中的数据表现不佳,拟合优度值(10%或更低!)。

我在下面生成了一些播放数据,因为我无法发布我的数据。我的数据离正态分布很远,而且有异常值。

代码语言:javascript
复制
set.seed(1)
somedata <- data.frame(
    v1 = rnorm(2000, 0, 1),
    v2 = sample(c("yes", "no"), 2000, replace = TRUE),
    v3 = rnorm(2000, 100, 15),
    v4 = sample(c("blue", "green", "red"), 2000, replace = TRUE),
    v5 = rnorm(2000, 10, 15),
    v6 = rnorm(2000, 10, 15)
)
somedata$v1 <- ifelse(somedata$v2 == "yes", somedata$v1 + 1000, somedata$v1)

下面是我调整后的代码

代码语言:javascript
复制
library(rgl) #plot widget
library(car) # scatter3d
library(shiny)
library(dplyr)# "select", "filter"


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(

      helpText("Just some text"),

      selectInput("varx",
                  label = "x-Variable", 
                  choices = c("textx1", "textx2"),
                  selected = "textx1"),

      sliderInput("rangex",
                  label = "Range of X", 
                  min = -5000, max = 9000, value = c(-5000, 9000)),

      textOutput("SliderTextx")
  ), #sidebarPanel
  mainPanel(

      rglwidgetOutput("plot",  width = 800, height = 600)
  )#mainPanel
  )#sidelayout
)#fluidpage

server <- function(input, output) {
  chosendata <-  reactive({
    # make sure inputs are not Null
    req(input$rangex)

    #filter data according to inputs
    chosendata <- filter(somedata, between(v1, input$rangex[1], input$rangex[2]))
    return(chosendata)
  })#reactive

  # ensures that our filter works
  observe(print(str(chosendata())))

  #create a graph
  output$plot <- renderRglwidget({
    req(chosendata())
    active <- chosendata()
    rgl.open(useNULL=T)
    scatter3d(x= active$v1, y= active$v5, z= active$v6, 
              surface=FALSE, ellipsoid = TRUE)
    rglwidget()
  })

}#function   

shinyApp(ui = ui, server = server)

这个示例应该会运行。我想要选择所有三个轴变量和它们的具体范围。然而,between(input$varx,...scattered(x=active$varx,...我不能去工作。我猜,一旦我对x进行了排序,那么y和z应该是相同的。

最重要的是,我希望看到分组。

我在互联网上到处寻找,在那里我可以找到一个非此即彼的挑战的解决方案,但我无法将其整合在一起。我希望我以一种可以理解的方式来写这篇文章。

我期待着你的回复!

Gerit

EN

Stack Overflow用户

发布于 2020-06-16 15:37:55

不幸的是,您的示例代码为我生成了一个错误。

这里有一个玩具示例,我希望它演示了您想要的功能:您可以选择x轴、y轴上的任何变量,并(作为一个因子)作为分组变量。

代码语言:javascript
复制
library(shiny)
library(tidyverse)

ui <- fluidPage(
  wellPanel(
    selectInput("x", "X axis variable", choices=c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), selected="wt"),
    selectInput("y", "Y axis variable", choices=c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb")),
    selectInput("group", "Grouping variable", choices=c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), selected="cyl")
  ),
  wellPanel(
    plotOutput("plot")
  )
)

server <- function(input, output) {
  output$plot <- renderPlot({
    req(input$group, input$x, input$y)

    mtcars %>% 
      ggplot(aes_string(x=input$x, y=input$y)) +
      geom_point(aes(colour=as.factor(!!as.name(input$group))))
  })
}

shinyApp(ui, server)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62402433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档