Использование глобальных данных в High Charts наведите указатель мыши на пользовательскую функцию в R Shiny

Я пытаюсь показать другую таблицу или график в другом 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() данные (переменные cats и datum) жестко запрограммированы. Приведенное выше приложение работает должным образом, когда щелкают полосу, другой график с данными выскакивает должным образом.

Но если я хочу использовать другие данные, то есть если у меня есть другой фрейм данных в R и я хочу использовать этот фрейм данных в barclick_func(), консоль выдает ошибку, что переменная не распознается, и если я посмотрю на тип эта переменная отображается как «неопределенная». Может ли кто-нибудь подсказать, как отправить данные в функцию 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)
            })
    })

person Shiva    schedule 29.06.2015    source источник


Ответы (1)


Вы можете попробовать использовать 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, что и в вашей жестко запрограммированной версии.

person NicE    schedule 29.06.2015
comment
Большое тебе спасибо. Теперь я могу передать данные в функцию javascript. Вы закончили мои недельные поиски. Я не знал, что паста может передавать данные. - person Shiva; 29.06.2015