は、私はおそらく、詳細にあなたは、どのような可能性をあなたが持つことができるかについて、この時間をより多くを行く:
highchart
イベント関数は、常にフォームJS("function(event) { ... }")
を持っています。 JS
はJavaScriptを表し、Rが内部のコードを解釈するのを防ぎます。幸いなことに、JavaScriptはRのように見えます。これはJavaScriptを知らなくても文を書くのを簡単にします。
内部関数は常にevent
パラメータを持つ必要があります。 highcharts
のドキュメントから、このイベントにはいくつかのプロパティがありますが、最も重要なのはpoint
です。 JavaScriptのプロパティには、と同様にドット.
でアクセスできます。event.point
は、クリックしたポイントになります。
今、この点も多くのプロパティを持っていますが、そのほとんどは非常に有用ではありません。しかし、使用する可能性のある値は、軸値ごとにcategory
,color
,x
およびy
です。したがって、クリックしたポイントのy値を知りたい場合は、event.point.y
がコマンドです。別の例:あなたのケースではevent.point.x
はx
の値を返します。棒グラフの場合はcategory
ではなく、category
のインデックスです(ここでは0から始まります)。前の例(コードスニペット)では、オブジェクトthis
も使用しました。 this
は、クリックされたseries
の略です。これは単なるショートカットです。これは、event.point.series
でシリーズを取得することもできるからです。シリーズ自体には、例えばname
のような多くのプロパティがあります。
JavaScriptに関する注意:JavaScriptのリスト(配列)は、角括弧[ ... ]
で作成されます。私は1つのコマンドで複数の値を送信するために、以下のコードでこれを使用しました。
これが最初の部分です。今、選択肢をあなたの光沢のあるアプリに伝えたいと思っています。シャイニーはこの目的のために情報チャネルを内蔵しています。 1つはJavaScript関数Shiny.onInputChange
です。この関数には2つの引数があり、2つ目は送信したい値です。最初の名前は後で値にアクセスする名前です。したがって、使用方法は常にShiny.onInputChange('myVar', value)
です。この値はサーバーに送信され、input$myVar
の下にアクセスできます。そこには、他の入力と同じ規則があります。反応する環境にinput$myVar
を入れて、新しい何かがinput$myVar
に送信されたときに反応します。
ダイレクトリクエストについて:クリックした値がどのカテゴリに属しているかを知るには、最初のクリック機能をちょっと変えてください。 (私はその機能に合わせて関数の名前を変更しました)上記の説明は理解できるはずです。 2番目の機能は、凡例のクリックとともに、highcharts
に組み込まれた別のイベント「スロット」を使用します。 legendItemClick
は通常のclick
と同じように動作しますが、凡例のクリックだけを再生します。ホバーイベントが必要な場合は、割り当て可能なイベントハンドラーがいくつかあります(mouseOver
)。
敬具
library("shiny")
library("highcharter")
ui <- shinyUI(
fluidPage(
column(width = 8, highchartOutput("hcontainer", height = "500px")),
column(width = 4, textOutput("text"))
)
)
server <- function(input, output) {
a <- data.frame(b = LETTERS[1:10], c = 11:20, d = 21:30, e = 31:40)
output$hcontainer <- renderHighchart({
canvasClickFunction <- JS("function(event) {Shiny.onInputChange('canvasClicked', [this.name, event.point.category]);}")
legendClickFunction <- JS("function(event) {Shiny.onInputChange('legendClicked', this.name);}")
highchart() %>%
hc_xAxis(categories = a$b) %>%
hc_add_series(name = "c", data = a$c) %>%
hc_add_series(name = "d", data = a$d) %>%
hc_add_series(name = "e", data = a$e) %>%
hc_plotOptions(series = list(stacking = FALSE, events = list(click = canvasClickFunction, legendItemClick = legendClickFunction))) %>%
hc_chart(type = "column")
})
makeReactiveBinding("outputText")
observeEvent(input$canvasClicked, {
outputText <<- paste0("You clicked on series ", input$canvasClicked[1], " and the bar you clicked was from category ", input$canvasClicked[2], ".")
})
observeEvent(input$legendClicked, {
outputText <<- paste0("You clicked into the legend and selected series ", input$legendClicked, ".")
})
output$text <- renderText({
outputText
})
}
shinyApp(ui, server)
グレート:
さて、ここで私が上に書いたもののために働くの例を与えるためのサンプルコードです!ありがとうございました! – hsilva
非常にgooooodの答え! – jbkunst