在 High Charts 中使用全局数据点击 R Shiny 中的自定义函数

Using global data in High Charts point click custom function in R Shiny

我试图在单击条形图上的条形图时显示不同的 table 或绘制不同的 div。我已经走到这一步了。

server.R

    library(shiny)
    shinyServer(function(input,output,session) {
    custom_data = # a data frame in R
    barclick_func <- "#! function() {
                            var cats = ['100','200','3000','4000'];
                            var datum = [20,40,30,10];
                    }       
                    $('#container_subcat').highcharts({
                            chart: {
                                    type: 'column',
                            },
                            xAxis: { categories:cats },
                            series: [{data :datum}]
                    }); 
    } !#"

    output$my_plot <- renderChart2({
                    a <- hPlot(x="id",y="variable",data=custom_data,type="column")
                    a$tooltip( animation = 'true', formatter = "#! function() {return '<b>' + 'Frequency of tag_id ' + this.x + '</b>' + ' is ' + this.y;} !#")
                    a$plotOptions(series = list(color = '#388E8E'),column = list(dataLabels = list(enabled = T, rotation =-90, align = 'right', color = '#FFFFFF', x = 4, y = 10),
cursor = 'pointer', point = list(events = list(click = barclick_func))))
                    return(a)
            })
    })

ui.R

library(shiny)
require(rCharts)
shinyUI(fluidPage(
  tags$head(
    tags$link(rel = "stylesheet", type = "text/css", href = "custom.css"),
    tags$script(src="http://code.jquery.com/jquery-git2.min.js"),
  ),
  titlePanel("Test"),
  fluidRow(  
      showOutput("my_plot","highcharts")
  ),
  div(id="container_subcat",style="min-width: 310-px; height: 400px; margin: 0 auto; margin-top:100px;")
 )
))

在上面的server.R脚本中,在barclick_func()函数中,数据(变量catsdatum)是硬编码的。当点击一个条形图时,上面的应用程序按预期工作,另一个图与数据正确弹出。

但是,如果我想使用另一个数据,也就是说,如果我在 R 中有另一个数据框并想在 barclick_func() 中使用该数据框,控制台会抛出一个错误,指出该变量不是已识别,如果我查看该变量的类型,它显示为 'undefined'。在这种特殊情况下,任何人都可以建议如何将数据发送到 javascript 函数。理想情况下,我想要的代码是这样的。

server.R

    library(shiny)
    shinyServer(function(input,output,session) {
    custom_data = # a data frame in R

    custom_data2 = # another data frame in R for which I wanna shoe a plot when the bar is clicked.

    barclick_func <- "#! function() { 

                            var cats = #subsetting custom_data2 ;
                            var datum = #subsetting custom_data2 ;

                      }       
                    $('#container_subcat').highcharts({
                            chart: {
                                    type: 'column',
                            },
                            xAxis: { categories:cats },
                            series: [{data :datum}]
                    }); 
    } !#"

    output$my_plot <- renderChart2({
                    a <- hPlot(x="id",y="variable",data=custom_data,type="column")
                    a$tooltip( animation = 'true', formatter = "#! function() {return '<b>' + 'Frequency of tag_id ' + this.x + '</b>' + ' is ' + this.y;} !#")
                    a$plotOptions(series = list(color = '#388E8E'),column = list(dataLabels = list(enabled = T, rotation =-90, align = 'right', color = '#FFFFFF', x = 4, y = 10), 
cursor = 'pointer', point = list(events = list(click = barclick_func))))
                    return(a)
            })
    })

您可以尝试使用 paste 将数据添加到您的 barclick_func

例如:

         custom_data2 = data.frame(cats=c(100,200,3000,400),datum=c(20,40,30,10))


        barclick_func <- paste("#! function() { 

        var cats = ",paste('[',paste(custom_data2$cats,collapse=','),']',sep=''),"
        var datum = ",paste('[',paste(custom_data2$datum,collapse=','),']',sep=''),"; 

        }       
        $('#container_subcat').highcharts({
        chart: {
        type: 'column',
        },
        xAxis: { categories:cats },
        series: [{data :datum}]
        }); 
        } !#")

应提供与您的硬编码版本相同的 barclick_func