2016-06-14 1 views
5

リーフレットでイベント(map_marker_click)を使用して同じページの別のチャートにハイチャートの縦棒グラフを表示するflexdashboardを作成しようとしています。私は他の例を取り上げて、Flexdashboardsのチュートリアルや例題で探しているものを見つけることができません。 Thisは、光沢のある入力やplot.lyの統合やポリゴンの代わりにマーカを使用することなく(はるかに少ない)、私が望むものに非常に近いものです。FlexdashboardsとリーフレットとマーカーHighchartsでクリック

私はRでflexdashboardため、次のコードを持っている:これは光沢のある統合の有無に関わらずflexdashboardで達成することができれば

title: "Flexdashboards and Leaflet" 
output: 
flexdashboard::flex_dashboard: 
vertical_layout: fill 
runtime: shiny 
--- 

```{r,include=FALSE} 
library(flexdashboard) 
library(shiny) 
library(leaflet) 
library(highcharter) 
``` 

```{r,include=FALSE} 
latitude<-c(35.94077, 35.83770, 35.84545, 35.81584, 35.79387, 36.05600) 
longitude<-c(-78.58010, -78.78084, -78.72444, -78.62568, -78.64262,-78.67600) 
amounts1<-c(27, 44, 34, 46, 25, 15) 
amounts2<-c(34, 52, 35, 78, 14, 24) 
ids<-c("a", "b", "c", "d", "e", "f") 
df<-data.frame(ids,amounts1,amounts2,latitude,longitude) 
renderLeaflet({ 
leaflet() %>% 
addTiles() %>% 
addMarkers(lng=c(longitude),lat=c(latitude)) 
}) 

observeEvent(input$map_marker_click,{ 
     click<-input$map_marker_click 
     if(is.null(click)) 
     return() 
}) 
``` 

```{r} 
renderHighchart({ 
highchart() %>% 
hc_chart(type = 'column')%>% 
hc_add_series(name=amounts1, data=click()) 
hc_add_series(name=amounts2, data=click()) 
}) 
``` 

私は疑問に思って。

答えて

11

次のコードを実行します。簡単に言えば、重要な手順は次のとおりです。マップを初期化するとき

  1. 、そのlayerIdとして列を指定してください。こうすることで、リーフレットはイベントを指定するときに返される値を知ることができます。
  2. eventReactiveを作成し、その値layerIdを返します。これを使用して、必要に応じてデータをサブセット化してチャートに渡すことができます。
  3. 私は、クリックされたlayerIdに基づいてマスターデータフレームのサブセットであるリアクティブデータフレームを作成したいと考えています。これをしなくてもアプリケーションを書くことができますが、Shinyアプリケーションをできるだけコンポーネントに分けたいのです。そしてその値 - - あなたは今、この反応性データフレームを使用することができます
  4. renderHighchart

にあなたの呼び出しでは、この情報がお役に立てば幸い!

--- 
title: "Flex Dashboard" 
output: 
    flexdashboard::flex_dashboard: 
    orientation: columns 
    vertical_layout: fill 
runtime: shiny 
--- 

```{r setup, include=FALSE} 
library(flexdashboard) 
library(shiny) 
library(leaflet) 
library(highcharter) 

latitude<-c(35.94077, 35.83770, 35.84545, 35.81584, 35.79387, 36.05600) 
longitude<-c(-78.58010, -78.78084, -78.72444, -78.62568, -78.64262,-78.67600) 
amounts1<-c(27, 44, 34, 46, 25, 15) 
amounts2<-c(34, 52, 35, 78, 14, 24) 
ids<-c("a", "b", "c", "d", "e", "f") 
df<-data.frame(ids,amounts1,amounts2,latitude,longitude) 
``` 

Column {data-width=650} 
----------------------------------------------------------------------- 

```{r} 
output$map <- renderLeaflet({ 

    leaflet() %>% 
    addTiles() %>% 
    addMarkers(data = df, lng = longitude, lat = latitude, 
       layerId = ~ids) 

}) 

leafletOutput('map') 

``` 

Column {data-width=350} 
----------------------------------------------------------------------- 

```{r} 

click_marker <- eventReactive(input$map_marker_click, { 

    x <- input$map_marker_click 

    return(x$id) 

}) 

data_for_chart <- reactive({ 

    return(df[df$ids == click_marker(), ]) 

}) 

output$chart <- renderHighchart({ 

    highchart() %>% 
    hc_chart(type = 'column') %>% 
    hc_add_series(data = c(data_for_chart()$amounts1, 
          data_for_chart()$amounts2)) 

}) 

highchartOutput('chart') 

``` 
+1

答えと明快さに感謝します。 – Lebeauski

関連する問題