Ich habe eine glänzende App, die ein Streudiagramm basierend auf Benutzereingaben für die Variablen x und y aktualisiert. Ich möchte die Daten für das x und y im Tooltip haben und diese Aktualisierung haben, wenn der Benutzer aktualisiert, was sie auf der x- und y-Achse wollen. Unten ist ein Beispielcode mit 2 von meinem Versuch zu diesem Thema (2. Versuch auskommentiert). Beachten Sie, dass ich den Iris-Datensatz hinzugefügt habe, um jedem Datenpunkt basierend auf seiner Zeilennummer im Datensatz eine eindeutige ID zuzuweisen.Plotdaten in GGVIS-Tooltip anzeigen
#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)
Vielen Dank Ich habe nur Ihre 2. Lösung versucht, da es am einfachsten zu implementieren war mit dem, was ich bereits hatte und es funktionierte genau so, wie ich es wollte! – User247365