格式化 Shiny Plotly 子图 - 单个标题和图形大小
Formatting Shiny Plotly subplots - Individual titles and graph size
我试图在 plotly
的 subplot
函数中为我的每个图表提供单独的标题,我发现了一个 post,您可以在其中使用 [=13 扩展子图=] 但我想要每个图表的单独标题(我正在使用 ggtitle
但它只绘制了最后提供的标题(图 4)。我发现了一个类似的 post 但是我不认为我可以 facet_wrap
在我的场景中。
此外 - 我想知道如何增加子图中图表之间的边距,因为它们似乎真的被压在一起了。
感谢任何帮助!
ui <- fluidPage(
sidebarPanel("This is a sidebar"),
mainPanel(plotlyOutput("myplot"))
)
server <- function(input, output){
output$myplot <- renderPlotly({
gg1 <- ggplotly(
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
geom_point() +
theme_minimal() +
ggtitle("Plot 1")
)
gg2 <- ggplotly(
ggplot(iris, aes(x=Species, y=Sepal.Length)) +
geom_boxplot() +
theme_minimal() +
ggtitle("Plot 2")
)
gg3 <- ggplotly(
ggplot(iris, aes(x=Petal.Width)) +
geom_histogram() +
ggtitle("Plot 3")
)
gg4 <- ggplotly(
ggplot(iris, aes(x=Petal.Length)) +
geom_histogram() +
ggtitle("Plot 4")
)
subplot(list(gg1,gg2,gg3,gg4), nrows = 2)
})
}
shinyApp(ui = ui, server = server)
正如@Edo 已经提到的,子图标题是 open issue regarding R's plotly api. Currently we need to use annotations. Here is an official example。
subplot
函数为我们提供了一个参数margin
来添加一些space.
library(shiny)
library(plotly)
ui <- fluidPage(
sidebarPanel("This is a sidebar"),
mainPanel(plotlyOutput("myplot"))
)
server <- function(input, output, session){
output$myplot <- renderPlotly({
gg1 <- ggplotly(
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
geom_point() +
theme_minimal()
) %>% add_annotations(
text = "Plot 1",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg2 <- ggplotly(
ggplot(iris, aes(x=Species, y=Sepal.Length)) +
geom_boxplot() +
theme_minimal()
) %>% add_annotations(
text = "Plot 2",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg3 <- ggplotly(
ggplot(iris, aes(x=Petal.Width)) +
geom_histogram()
) %>% add_annotations(
text = "Plot 3",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg4 <- ggplotly(
ggplot(iris, aes(x=Petal.Length)) +
geom_histogram()
) %>% add_annotations(
text = "Plot 4",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
subplot(list(gg1,gg2,gg3,gg4), nrows = 2, margin = 0.06)
})
}
shinyApp(ui = ui, server = server)
顺便说一下,您可以使用 schema()
浏览 plotly 的属性。
我试图在 plotly
的 subplot
函数中为我的每个图表提供单独的标题,我发现了一个 post,您可以在其中使用 [=13 扩展子图=] 但我想要每个图表的单独标题(我正在使用 ggtitle
但它只绘制了最后提供的标题(图 4)。我发现了一个类似的 post facet_wrap
在我的场景中。
此外 - 我想知道如何增加子图中图表之间的边距,因为它们似乎真的被压在一起了。
感谢任何帮助!
ui <- fluidPage(
sidebarPanel("This is a sidebar"),
mainPanel(plotlyOutput("myplot"))
)
server <- function(input, output){
output$myplot <- renderPlotly({
gg1 <- ggplotly(
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
geom_point() +
theme_minimal() +
ggtitle("Plot 1")
)
gg2 <- ggplotly(
ggplot(iris, aes(x=Species, y=Sepal.Length)) +
geom_boxplot() +
theme_minimal() +
ggtitle("Plot 2")
)
gg3 <- ggplotly(
ggplot(iris, aes(x=Petal.Width)) +
geom_histogram() +
ggtitle("Plot 3")
)
gg4 <- ggplotly(
ggplot(iris, aes(x=Petal.Length)) +
geom_histogram() +
ggtitle("Plot 4")
)
subplot(list(gg1,gg2,gg3,gg4), nrows = 2)
})
}
shinyApp(ui = ui, server = server)
正如@Edo 已经提到的,子图标题是 open issue regarding R's plotly api. Currently we need to use annotations. Here is an official example。
subplot
函数为我们提供了一个参数margin
来添加一些space.
library(shiny)
library(plotly)
ui <- fluidPage(
sidebarPanel("This is a sidebar"),
mainPanel(plotlyOutput("myplot"))
)
server <- function(input, output, session){
output$myplot <- renderPlotly({
gg1 <- ggplotly(
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
geom_point() +
theme_minimal()
) %>% add_annotations(
text = "Plot 1",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg2 <- ggplotly(
ggplot(iris, aes(x=Species, y=Sepal.Length)) +
geom_boxplot() +
theme_minimal()
) %>% add_annotations(
text = "Plot 2",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg3 <- ggplotly(
ggplot(iris, aes(x=Petal.Width)) +
geom_histogram()
) %>% add_annotations(
text = "Plot 3",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
gg4 <- ggplotly(
ggplot(iris, aes(x=Petal.Length)) +
geom_histogram()
) %>% add_annotations(
text = "Plot 4",
x = 0,
y = 1,
yref = "paper",
xref = "paper",
xanchor = "left",
yanchor = "top",
yshift = 20,
showarrow = FALSE,
font = list(size = 15)
)
subplot(list(gg1,gg2,gg3,gg4), nrows = 2, margin = 0.06)
})
}
shinyApp(ui = ui, server = server)
顺便说一下,您可以使用 schema()
浏览 plotly 的属性。