2016-10-13 2 views
4

이것이 가능한지 확실하지 않지만 여기에 내가하고 싶은 것이 있습니다. 드롭 다운 메뉴에서 선택하여 플롯 플롯의 데이터를 업데이트하고 싶습니다. 간단한 예로서 음모 : 드롭 다운 선택으로 데이터 업데이트

내가 데이터 프레임이 I 산점도에 df$x df$y를 사용하고있는

df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 

있다고 가정 할. df$x의 첫 번째 ndf$z

  • 플롯과 df$y를 교체하고 df$y
  • 나는 다음과 같은 두 가지 예제를 보았다

    1. : 내가 좋아하는 것 데이터 조작의 두 시나리오는 드롭 다운을 사용하여 달성하기 위해 , 쉽게 재현 할 수 있습니다 : https://plot.ly/r/dropdowns/

      그러나 inf를 전달하는 방법을 모릅니다. 드롭 다운 선택에 기초하여 플롯 될 데이터에 관한 오믹 (ormation). 예를 들어 시나리오 2의 경우 나는 작동하지 않았다 args = list("data", df[1:n,])로 그것을 시도했다.

      시나리오 1의 경우 (예에 따라)가는 길은 각각 흔적을 숨기거나 표시하는 것 같습니다. 이것이 시나리오 2의 유일한 방법입니까?

      다른 아이디어가 있습니까?

      업데이트 1 : https://plot.ly/~spietrzyk/96/drop-down-menus-styling/ 이것은의 예를 기반으로합니다 재현 예 그래서 여기

      추가 내가 시나리오 1. 여기

      require(plotly) 
      df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 
      Sys.setenv("plotly_username"="xxx") #actual credentials replaced 
      Sys.setenv("plotly_api_key"="xxx") #actual credentials replaced 
      
      p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>% 
          add_trace(mode = "markers", y = df$z, name = "B", visible = T) %>% 
          layout(
          title = "Drop down menus - Styling", 
          xaxis = list(domain = c(0.1, 1)), 
          yaxis = list(title = "y"), 
          updatemenus = list(
           list(
           y = 0.7, 
           buttons = list(
            list(method = "restyle", 
             args = list("visible", list(TRUE, TRUE)), 
             label = "Show All"), 
      
            list(method = "restyle", 
             args = list("visible", list(TRUE, FALSE)), 
             label = "Show A"), 
      
            list(method = "restyle", 
             args = list("visible", list(FALSE, TRUE)), 
             label = "Show B"))) 
          )) 
      
      plotly_POST(p) 
      

      결과에서 원하는 것을 달성 한 예이다 https://plot.ly/r/dropdowns/

      그러나에 대한 변경을 트리거하는 대신 플롯 할 데이터를 전달할 수 있는지 궁금합니다.개별 흔적의 속성.

      p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>% 
          layout(
          title = "Drop down menus - Styling", 
          xaxis = list(domain = c(0.1, 1)), 
          yaxis = list(title = "y"), 
          updatemenus = list(
           list(
           y = 0.7, 
           buttons = list(
            list(method = "restyle", 
             args = list("y", df$y), 
             label = "Show A"), 
            list(method = "restyle", 
             args = list("y", df$z), 
             label = "Show B"))) 
      )) 
      

      결과 여기 : https://plot.ly/~spietrzyk/98/drop-down-menus-styling/ 이 방법은 작동하지 않을 수 df$z의 데이터가 그리드 (https://plot.ly/~spietrzyk/99/)에 게시되지 않기 때문에 내가 노력

      한 가지는 다음이었다.

      그래서 모든 추적을 플로팅하고 드롭 다운 선택에 따라 visible 속성을 전환하는 것보다 드롭 다운 선택을 기반으로 플로팅되도록 데이터를 조작해야합니다.

    +0

    정확하게 코드 우리를 보여주는 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)는 [재현 예]를 제공하기 위해 시도하십시오 하고 있었다. '플롯 (plotly) '을 호출하는 방법이나 당신이 그 args를 붙인 곳을 명확하게 밝히지는 않습니다. 이렇게하면보다 쉽게 ​​도움을받을 수 있습니다. – MrFlick

    +0

    솔직하게 말해 R API에 익숙하지 않아 내 의견이 제한적으로 유용 할 수 있지만 적극적인 개발 기능입니다. updatemenus 명령을 통해 직접 데이터를 전달할 수 있지만이를 용이하게하기 위해 새로운 '프레임'개념이 있습니다. 'plotly.js'에 대한'animation' 문서에는 몇 가지 예가 있습니다 : https://plot.ly/javascript/animations/#defining-named-frames-with-plotlyaddframes 불행히도, 프레임이 R을 통해 접근 가능한지 모르겠습니다. API는 아직 (https://github.com/plotly/plotly.js/issues/1014 참조), 이것이 아마도 만족스런 대답이 아닌 이유입니다. – Ricky

    +0

    그리고 FWIW는 updatemenus 명령을 통해 직접 데이터를 전달하는 다소 야심적인 예제입니다. http://codepen.io/rsreusser/pen/mAjpkb?editors=0010 다시 R API를 통하지 않음을 사과드립니다. – Ricky

    답변

    4

    본인이 본인이 맞습니까?

    require(plotly) 
    df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 
    p <- plot_ly(df, x = ~x, y = ~y, mode = "markers", name = "A", visible = T) %>% 
    layout(
        title = "Drop down menus - Styling", 
        xaxis = list(domain = c(0.1, 1)), 
        yaxis = list(title = "y"), 
        updatemenus = list(
        list(
         y = 0.7, 
         buttons = list(
         list(method = "restyle", 
          args = list("y", list(df$y)), # put it in a list 
          label = "Show A"), 
         list(method = "restyle", 
          args = list("y", list(df$z)), # put it in a list 
          label = "Show B"))) 
    )) 
    p 
    
    관련 문제