我正在创建一个带有绘图散点图的Shiny应用程序。我试图保持散点图方形,但想要比默认大得多的尺寸。例如,在下面的简单MWE中,我将宽度和高度参数设置为1400px。但是,即使我更改这些值(比如800px),它似乎也没有对绘图散点图的大小做任何改变。
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”。例如,我试过“自动”和“100%” - 但这些似乎也没有什么区别。如何更改此MWE中的绘图散点图的大小?感谢您的任何意见。
答案 0 :(得分:4)
当您使用HttpContext
时,您可以使用服务器部分中的布局选项更改ggplotly()
的大小:
plotlyOutput
如果您直接从p2 <- ggplotly(p) %>% layout(height = 800, width = 800)
而不是plotlyOutput
提供输入,我发现width = "600px", height = "600px"
仅适用于参数plot_ly()
,例如
ggplotly()
答案 1 :(得分:1)
似乎plotlyOutput函数没有移交高度/宽度参数。如前所述,您可以强制绘制一定的大小:
p <- plot_ly(x = x, y = y, height=800)
但是,如果您在网站上有以下元素(例如我的情况下的其他情节),则该图部分隐藏。我通过操作服务器端的plotlyOutput对象找到了一种解决方法。这是一个简单的例子:
服务器:
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:
uiOutput("plotly")
我无论如何都必须通过renderUI,因为我有一个动态数量的图。 希望这对你也有帮助