从event_data获取数据点的行号

时间:2016-05-30 16:51:30

标签: r shiny plotly

我一直在使用闪亮和情节创建数据查看器应用程序。我想创建一个我的数据的多维缩放视图,然后单击一个数据点,以便能够将单个点视为条形图。我受this例子的启发。

这是一个最小的几乎工作的例子:

ui.r文件

library(shiny)
library(mlbench)
library(plotly)
library(shinythemes)
library(dplyr)

# Load the data
allDat <- iris[,-5]

# ui.R definition
ui <- fluidPage(
  # Set theme
  theme = shinytheme("spacelab"),

  # Some help text
  h2("Inspect each element in iris data set"),
  h4("This a shiny app exploiting coupled events in plotly"),
  tags$ol(
    tags$li("The first chart showcases", tags$code("plotly_click"))
  ),

  # Vertical space
  tags$hr(),

  # First row
  fixedRow(
    column(6, plotlyOutput("Plot1", height = "600px")),
    column(6, plotlyOutput("Plot2", height = "600px"))),

  tags$hr())

server.r文件

# server.R definition
server <- function(input, output){

  d <- dist(allDat) # euclidean distances between the rows
  fit <- cmdscale(d,eig=TRUE, k=2) # k is the number of dim

  # plot solution
  x <- fit$points[,1]
  y <- fit$points[,2]
  plot.df <- data.frame(x=x,y=y,allDat)

  output$Plot1 <- renderPlotly({
    plot_ly(plot.df, x = x, y = y, mode="markers", source = "mds") %>%
      layout(title = "MDS of iris data",
             plot_bgcolor = "6A446F")
  })

  # Coupled event 2
  output$Plot2 <- renderPlotly({

    # Try to get the mouse click data
    event.data <- event_data("plotly_click", source = "mds")

    # If NULL dont do anything
    if(is.null(event.data) == T) return(NULL)

    # I need the row of the data in the allDat data frame
    # pretty sure this is not correct
    ind <- as.numeric(event.data[2])

    p1 <- plot_ly(x = colnames(allDat), y=as.numeric(allDat[ind,]),type="bar")

  })

}

要运行此功能,请将这两个文件放在名为something的文件夹中,例如dataViewer,然后从包含dataViewer文件夹的目录运行runApp("dataViewer")

问题是什么,我在寻求什么?

我不理解来自event_data函数的输出。我希望能够点击散点图上的点,并从allDat数据框或plot.df数据框中提取该数据点的行号,因为它应该相同。然后我想使用该行号进一步可视化右侧条形图中的特定点。

1 个答案:

答案 0 :(得分:1)

我查看了event.data对象,并认为您要查找的值是event.data$pointNumber(以0开头,因此您需要使用event.data$pointNumber + 1来标识该行。)< / p>

event.data是一个包含四个名称的列表:curveNumberpointNumberxy