Using Plotly event data with a key on a ggplotly object
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 25/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- r
- Bereich
- data-visualization
Rechercherichtung
Reproduzieren Sie das bereitgestellte R-Shiny-reprex mit Fokus auf den Aufruf von ggplotly und den Pfad des plotly_click-event_data. Als erledigt gilt dies, wenn ein in ggplot aes() definierter eindeutiger Schlüssel in den Ereignisdaten vorhanden ist und die Tabelle korrekt filtert; der Edit des Issues beschreibt einen funktionierenden Ansatz.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I am using Plotly in an R Shiny dashboard with event data so a user can click on a visualization and the linked table will filter to show just that data observation. In the reprex below, I have a plot made in ggplot that I converted to a Plotly object using ggplotly. This works fine, but when identifying observations using pointNumber in the event data, it misidentifies the observation that was clicked on because the plot and the table have different numbers of observations.
Because of this, I'm trying to identify observations using a "key" argument, but no matter how I define the key, it does not appear as a column in the event data. When this plot is made using Plotly to begin with, eliminating ggplot entirely, it works fine and the key column does appear. However, the visualization I need to use is a phylogenetic tree that has proven impossible to visualize in Plotly, which is why I started it off in ggplot. I have searched extensively, but I can't find a way to make event data work with a key using a ggplot -> plotly object. Is there a way to make this work?
### Load data
data(mtcars)
mtcars$index <- c(1:32)
data <- mtcars
# Define UI
ui <- fluidPage(
titlePanel("Dashboard"),
tags$style('.container-fluid {
background-color: #e3f2fd;
}'),
fluidRow(
column(6,
h3("Scatterplot"),
plotlyOutput("phylo_tree")),
# Metadata
column(12, h3("Metadata")),
column(12, DT::dataTableOutput("data_table"))
)
)
# Define server logic
server <- function(input, output) {
output$phylo_tree <- renderPlotly({
# Create a scatterplot using ggplot2
scatterplot <- ggplot(mtcars, aes(x = mpg, y = hp, label = rownames(mtcars))) +
geom_point() +
geom_text(nudge_y = 5, nudge_x = 1, check_overlap = TRUE) +
labs(title = "Scatterplot of mtcars Dataset",
x = "Miles Per Gallon (mpg)",
y = "Horsepower (hp)") +
theme_minimal()
scatterplot <- plotly::ggplotly(scatterplot, tooltip = "text",
source = "source1", key = ~index)
# Collect data when a user clicks on a point
event_register(scatterplot, event = "plotly_selected")
scatterplot
})
output$data_table <- DT::renderDataTable({
# Use click event data
click_data <- event_data("plotly_click", source = "source1")
observe({
print(event_data("plotly_click", source = "source1"))
})
# Check if any points are clicked
if (!is.null(click_data)) {
# Filter data based on the clicked point
data <- data[data$index %in% click_data$key,]
}
datatable(data,
rownames = FALSE,
filter = "top",
extensions = "Buttons", # Add download buttons
options = list(scrollX = TRUE, dom = "Bfrtip",
buttons = c("csv", "excel", "pdf"),
lengthMenu = list(c(10,25,50,-1),
c(10,25,50,"All"))),
selection = list(mode = "multiple", target = "row")) %>%
formatStyle(names(data),lineHeight='80%')
})
}
Edit: I solved my own problem. The key needs to be specified in the aes() argument of the ggplot code. The following ggplot code should work with the above datatable code. Note that the id variable specified here should be some unique key identifier.
# Create a scatterplot using ggplot2
scatterplot <- ggplot(mtcars, aes(x = mpg, y = hp, label = rownames(mtcars), key = id)) +
geom_point() +
geom_text(nudge_y = 5, nudge_x = 1, check_overlap = TRUE) +
labs(title = "Scatterplot of mtcars Dataset",
x = "Miles Per Gallon (mpg)",
y = "Horsepower (hp)") +
theme_minimal()
- Vorherrschende Sprache
- R
- Sterne
- 2.7k
- Forks
- 641
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus plotly/plotly.R
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 72/100
-
save_image Error Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 52/100
Alle Issues in plotly/plotly.R
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
easystats/performance#950 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
briandconnelly/airnow#9 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
OHDSI/CohortConstructor#774 ·
-
pre-review R TeX Track: 5 (DSAIS)
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 60/100
openjournals/joss-reviews#11330 · 7 Kommentare ·