使用Shiny时将主题应用于绘图

时间:2018-03-14 20:12:43

标签: r ggplot2 shiny shinydashboard

我正在尝试使用Shiny创建一个Web应用程序,在其上显示一些图表。

我已经使用ggplot在R Studio中创建了许多绘图。我正在尝试在我正在创建的Web应用程序上显示以下情节。

enter image description here

我的R服务器代码:

shinyServer(function(input, output){

output$bakePlot <- renderPlotly({
ggplot(sales_bakery, aes(ProductName, ProductSales))+ 
stat_summary(fun.y=sum,geom="bar",colour="red",fill="red",show.legend = FALSE) +
coord_cartesian(ylim = c(7000, 9500)) + ggtitle("January Sales in Bakery") + 
xlab("Category") + ylab("Quantity Sold")
})
})

UI代码:

shinyUI(
dashboardPage(
dashboardHeader(title = "Dashboard"),
dashboardSidebar(
  menuItem("Categories"),
    menuSubItem("Cereals"),
    menuSubItem("Bakery"),
  menuItem("Products")
),
dashboardBody(
  fluidRow(
    box(plotlyOutput("bakePlot"))
  )
)
)
)

当我使用此代码时,我会在网络应用程序上显示以下内容。

enter image description here

我的问题是,如何在第一张图片中以与第一张图片相同的方式在Web应用上设置此图?

我的主题代码是:

bakeryMonthlyPlot <- bakeryMonthlyPlot +
  theme(axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text.x = element_text(colour = "black", size = 14),
    axis.text.y = element_text(colour = "black", size = 14),
    panel.background = element_rect(fill = "white"),
    panel.grid.minor = element_blank(),
    panel.grid.major = element_blank(),
    axis.line = element_line(colour = "black", size = 1),
    legend.position = "right",
    plot.title = element_text(lineheight = 1.8, face = "bold"))

有人可以告诉我在哪里放置我的主题代码以便将主题应用到Web应用程序中的绘图中吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

是@ eipi10,我可以通过将主题添加到情节的底部来实现。

对于将来对此感兴趣的人,代码现在看起来像这样:

shinyServer(function(input, output){

output$bakePlot <- renderPlotly({
ggplot(sales_bakery, aes(ProductName, ProductSales))+ 
stat_summary(fun.y=sum,geom="bar",colour="red",fill="red",show.legend = FALSE) +
coord_cartesian(ylim = c(7000, 9500)) + ggtitle("January Sales in Bakery") + 
xlab("Category") + ylab("Quantity Sold")+
  theme(
        axis.text.x = element_text(angle = 60, hjust = 1),
        axis.text.y = element_text(colour = "black", size = 14),
        panel.background = element_rect(fill = "white"),
        panel.grid.minor = element_blank(),
        panel.grid.major = element_blank(),
        axis.line = element_line(colour = "black", size = 1),
        legend.position = "none",
        plot.title = element_text(lineheight = 1.8, face = "bold"))
})