繁体   English   中英

在ggvis工具提示中显示绘图数据

[英]Display plot data in ggvis tooltip

我有一个闪亮的应用程序,可以根据用户输入的x和y变量更新散点图。 我希望能够在工具提示中包含x和y的数据,并在用户更新其在x和y轴上的内容时进行更新。 下面是一些示例代码,其中有2个我尝试解决此问题(第2次尝试已被注释掉)。 请注意,我已经向Iris数据集中添加了一个数据,以根据其在数据集中的行号为每个数据点赋予唯一的ID。

#Check packages to use in library
{
library('shiny') #allows for the shiny app to be used
library('stringr') #string opperator
library('ggvis') #allows for interactive ploting
library('dplyr')
library('RSQLite')
}

alldata <- iris

#adds a column of a unique ID for each row
alldata$ID <- 1:nrow(alldata)

# UI

ui<-fluidPage(
titlePanel("Iris"),
fluidRow(
column(12,
       ggvisOutput("plot1")
),
column(4,
       wellPanel(
         h4("Data Variables"),
         selectInput(inputId = "x", label="Select x-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Length', multiple = FALSE),
         selectInput(inputId = "y", label="Select y-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Width', multiple = FALSE)
       ))
))

#SERVER
server<-function(input,output,session)
{
# Function for generating tooltip text
my_tooltip <- function(tt) {
if (is.null(tt)) return(NULL)
if (is.null(tt$ID)) return(NULL)

# Pick out the shot with this ID
alldata <- isolate(alldata)
Datapoint <- alldata[alldata$ID == tt$ID, ]

paste0("<b>", "Species: ", Datapoint$`Species`, 
       "</b><br>", "ID: ", Datapoint$`ID`,
       "<br>", "X Variable: ", Datapoint$`input$x`,
       "<br>", "Y Variable: ", Datapoint$`input$y`
       # "<br>", "X Variable: ", Datapoint %>% `input$x`,
       # "<br>", "Y Variable: ", Datapoint %>% `input$y`
)
}

vis <- reactive({

xvar <- prop("x", as.symbol(input$x))
yvar <- prop("y", as.symbol(input$y))

p1 = alldata %>%
  ggvis(x = xvar, y = yvar) %>%
  layer_points(size.hover := 200,
               fillOpacity:= 0.5, fillOpacity.hover := 1,
               fill = ~Species,
               key := ~ID
  ) %>%

  # Adds the previously defined tool_tip my_tooltip
  add_tooltip(my_tooltip, "hover")

  # Specifies the size of the plot
  # set_options(width = 800, height = 450, duration = 0)
})

#Actually plots the data
vis %>% bind_shiny("plot1")
}

#Run the Shiny App to Display Webpage
shinyApp(ui=ui, server=server)

一种选择是仅对工具提示函数中感兴趣的列进行子集处理,然后显示该数据集中的所有值。

my_tooltip <- function(tt) {
        if (is.null(tt)) return(NULL)
        if (is.null(tt$ID)) return(NULL)

        Datapoint <- alldata[alldata$ID == tt$ID, c("Species", "ID", input$x, input$y)]

        paste0(names(Datapoint), ": ", format(Datapoint), collapse = "<br />")
    }

或者直接使用,例如,直接input$x ,因为它们是字符,因此很容易从数据集中提取出来并用作工具提示名称。

my_tooltip <- function(tt) {
        if (is.null(tt)) return(NULL)
        if (is.null(tt$ID)) return(NULL)

        Datapoint = alldata[alldata$ID == tt$ID, ]

        paste0("<b>", "Species: ", Datapoint$`Species`,
              "</b><br>", "ID: ", Datapoint$`ID`,
              "<br>", input$x, ": ", Datapoint[[input$x]],
              "<br>", input$y, ": ", Datapoint[[input$y]])
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM