2017-06-30 3 views
0

私は、プロット散布図を使ってShinyアプリケーションを作成しています。私は散布図を正方形に保つようにしていますが、デフォルトよりもはるかに大きなサイズが必要です。下の単純なMWEでは、例えば、幅と高さのパラメータを1400pxに設定しています。しかし、これらの値を変更しても(800pxなど)、プロットした散布図のサイズは変更されていないようです。Shiny plotlyOutput()が高さと幅のサイズに反応しない

library(plotly) 
library(shiny) 
library(ggplot2) 

set.seed(1) 
dat <- data.frame(ID = paste0("ID", 1:100), x = rnorm(100), y = rnorm(100), stringsAsFactors = FALSE) 

ui <- shinyUI(fluidPage(
    titlePanel("title panel"), 
    sidebarLayout(position = "left", 
    sidebarPanel(width=3, 
    actionButton("goButton", "Action") 
    ), 
    mainPanel(width=9, 
    plotlyOutput("scatMatPlot", width = "1400px", height = "1400px") 
) 
) 
)) 

server <- shinyServer(function(input, output, session) { 
    p <- ggplot(data= dat, aes(x=x, y=y)) + geom_point() + coord_cartesian(xlim = c(-5, 5), ylim = c(-5, 5)) + coord_equal(ratio = 1) 
    p2 <- ggplotly(p) 
    output$scatMatPlot <- renderPlotly({p2}) 
}) 

shinyApp(ui, server) 

「1400px」以外のサイズの値を試しました。例えば、私は "auto"と "100%"を試しましたが、これらはどちらかといえば違いはありませんでした。このMWEのプロット散布図のサイズを変更するにはどうすればよいですか?入力いただきありがとうございます。

+1

あなたのコードは私の側でうまく機能します。 –

+0

私にお知らせいただきありがとうございます。したがって、 "1400px"の値を他の値に変更することで、Plotly散布図のサイズを調整できますか? FireFox、Safari、Google Chromeを使用してこの正確なコードをもう一度試し、 "1400px"の値を何か他のものに変更すると、scatterplot Plotlyオブジェクトのサイズに何も影響しません。上のコードの使用と上のコードの使用との違いを引き起こす可能性のあるアイディア私は困惑している! –

+0

'renderPlotly'と' plotlyOutput'で 'height'パラメータを試しましたか?デフォルトで '400px'であり、' ggplot'オブジェクトで指定された 'height'を上書きするかもしれません。 –

答えて

3

あなたは、サーバーの一部でレイアウトオプションでplotlyOutputのサイズを変更することができggplotly()使用します。

p2 <- ggplotly(p) %>% layout(height = 800, width = 800) 

は、私はあなたがplot_ly()代わりggplotly()からの直接入力を提供する場合plotlyOutputはパラメータのみwidth = "600px", height = "600px"で動作することがわかりました、例えば

p2 <- plot_ly(dat, x = ~x, y = ~y) 
1

plotlyOutput関数はheight/widthパラメータを渡すことはできないようです。前に述べたように、あなたは、特定のサイズであることをプロットするために強制することができます。しかし

p <- plot_ly(x = x, y = y, height=800) 

、あなたがサイト(私の場合のように、例えば、別のプロット)上の次の要素を持っている場合、プロットは、部分的に隠されています。私はサーバー側でplotlyOutputオブジェクトを操作することで回避策を見つけました。ここでは簡単な例である:私はとにかく、私はプロットの動的な数を持っているのでrenderUI経由の道を行かなければならなかった

uiOutput("plotly") 

サーバー:

output$plotly <- renderUI({ 
    plot_output_list <- lapply(1:3, function(i) { 
    plotname <- paste0("plotly", i) 
    plot_output_object <- plotlyOutput(plotname) 
    plot_output_object <- renderPlotly({ 
     p <- plot_ly(x = a, y = b) 
     return(p) # only necessary when adding other plotly commands like add_trace 
    }) 
    }) 
    # for each element set the height (here went something wrong with plotlyOutput) 
    for(i in 1:length(plot_output_list)){ 
    attr(plot_output_list[[i]],'outputArgs') <- list(height="850px") 
    } 
    # return 
    return(plot_output_list) 
}) 

UI。 希望すると便利です。

関連する問題