6

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

Rの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())
})
```

光沢のある統合の有無にかかわらず、これがフレックスダッシュボードで達成できるかどうか疑問に思っています。

4

1 に答える 1

13

次のコードはそれを行います。簡単に言えば、主な手順は次のとおりです。

  1. マップを初期化するときは、必ず列をその として指定してlayerIdください。このようにして、イベントを指定したときに返す値を Leaflet が認識します。
  2. eventReactivethat の値を返す を作成しますlayerId。これを使用して、必要に応じてデータをサブセット化し、チャートに渡すことができます。
  3. clicked に基づくマスター データ フレームのサブセットであるリアクティブ データ フレームを作成するのが好き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')

```
于 2016-06-24T11:21:05.210 に答える