由于直方图的单个条形图中的值范围较大,因此单击不正确事件不起作用

时间:2019-01-30 23:25:49

标签: r plotly dt

我的数据框如下:

col1<-sample(500, size = 500, replace = TRUE)
col2<-sample(500, size = 500, replace = TRUE)
d<-data.frame(col1,col2)

然后我创建此数据框的直方图,该数据框已激活点击事件。当用户单击条时,具有相对值的数据框的行将显示在数据表中。问题在于该应用程序可以在几个值下正常工作。例如,如果我的数据框有5行而不是500行:

col1<-sample(5, size = 5, replace = TRUE)
col2<-sample(5, size = 5, replace = TRUE)
d<-data.frame(col1,col2)

但是使用更多的值时,该应用程序将无法运行,因为该图会在每个单独的条形图中给出一定范围的值,而不是唯一的值。

library(plotly)
library(shiny)
library(DT)

ui <- fluidPage(
  mainPanel(
    plotlyOutput("heat")
  ),
  DT::dataTableOutput('tbl4')
)

server <- function(input, output, session) {
  output$heat <- renderPlotly({
        render_value(d) # You need function otherwise data.frame NN is not visible
    p <- plot_ly(x = d$col2, type = "histogram",source="subset") # set source so
    # that you can get values from source using click_event

  })

  render_value=function(NN){
    output$tbl4 <- renderDataTable({
      s <- event_data("plotly_click",source = "subset")
      print(s)
      return(DT::datatable(d[d$col2==s$y,]))           
    })  
  }           
}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:1)

您可以尝试执行此操作(添加代码以捕获计数)。您需要绘制计数的直方图,然后才能基于click事件获取原始数据。

async getRestautants() {

    return new Promise<boolean>((resolve, reject) => {
      console.log('Calling Google Place API to get nearby restaurants...');
      const googleMapsAPIEndpoint = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants&location='
        + this.common.getLatitudeFromSessionStore() + ',' + this.common.getLongitudeFromSessionStore()
        + '&radius=1000&key=' + this.common.googleMapsAPIKey;
      console.log(googleMapsAPIEndpoint);

      this.http.jsonp(googleMapsAPIEndpoint, 'callback').subscribe(data => {
        console.log(data);
      });
    });

}

工作原型的屏幕截图: enter image description here