2016-10-13 54 views
4

これが可能かどうかはわかりませんが、ここでは何をしたいのですか?ドロップダウンメニューから選択してプロットしたプロットのデータを更新したいと思います。plotly:ドロップダウン選択によるデータの更新

簡単な例として、私は散布図でdf$xdf$yを使用し、そこからデータフレーム

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

を有していると仮定することができます。私は、ドロップダウンを使用して達成したいデータ操作の2つのシナリオ:

  1. は、私は次の2つの例を見てdf$xdf$y

の唯一の最初のndf$z

  • プロットでdf$yを交換してください私は簡単に再現することができます: https://plot.ly/r/dropdowns/

    しかし、私はどのようにinfドロップダウン選択に基づいてプロットされるデータに関する指定。例えばシナリオ2の場合。私はargs = list("data", df[1:n,])でそれを試しましたが動作しませんでした。

    シナリオ1の場合、(例によると)唯一の(?)方法はそれぞれトレースを隠している/表示しているようです。これはシナリオ2の唯一の方法ですか?

    いずれかの代替案がありますか?

    更新1:だからここ

    再現性の例を追加しますが、私はここに、シナリオ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/~spietrzyk/96/drop-down-menus-styling/ をこれはからの例に基づいています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"))) 
    )) 
    

    結果:df$zからのデータがグリッド(https://plot.ly/~spietrzyk/99/)に掲載されていないとして、このアプローチhttps://plot.ly/~spietrzyk/98/drop-down-menus-styling/ 、動作することはできません。

    私は、すべてのトレースをプロットし、ドロップダウン選択でvisibleプロパティを切り替える以外に、ドロップダウン選択に基づいてプロットされるデータを操作することはとにかく思っていました。

  • +0

    まさにあなたのコードたちを示す(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)[再現可能な例]を提供してみてください。をしていました。どのようにあなたが 'プロット'を呼び出すのか、あるいはあなたがそれらの引数を貼った場所でさえ明らかにしていません。これにより、より簡単にあなたを助けることができます。 – MrFlick

    +0

    正直言って、私はR APIにあまり慣れていないので、コメントは限られた有用性しかないかもしれませんが、これは能動的な開発の特徴です。 updatemenusコマンドで直接データを渡すこともできますが、これを容易にするための新しい 'frame'概念もあります。 '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 
    
    関連する問題