如何解决当用户输入的值发生变化时,在 Shiny Dashboard 的 ggplot 中显示动态百分比和数量值
我正在尝试在闪亮的仪表板中的 ggplot 中显示百分比和数量标签,应根据用户对 ggplot 的输入进行更新。
我的数据集如下所示:
Week Region Flag Warehouse TAT Quantity
2021-W01 north Local ABC In TAT 10
2021-W01 north Local ABC Out TAT 5
2021-W01 East Local ABC In TAT 13
2021-W01 East Local ABC Out TAT 6
2021-W02 West UPC XYZ In TAT 15
2021-W02 West UPC XYZ Out TAT 10
这里Week是一年中的周数,Region代表north/East/West/South,Flag只有Local和UPC两个值是运动类型,Warehouse代表不同的仓库,TAT栏显示的是业绩部分。如果是 In tat 性能好,如果它 out 性能很差。
我现在取得的成就:
我已经能够在闪亮的仪表板中创建绘图和过滤器,并根据用户输入进行更新。但我无法向其中添加标签,这些标签会根据用户输入动态更改。
代码:
library(plotly)
library(ggplot2)
library(dplyr)
library(reshape2)
library(gtools)
ui <- shinyUI(
navbarPage(
title = 'Dashboard',tabPanel('Performance',tabsetPanel(
tabPanel('View1',selectInput('warehouse','Select Warehouse',unique(plot1$shipment_fc)),selectInput('region','Select Region',unique(plot1$regional_zone)),selectInput('mov_type','Select Movement Type',unique(plot1$flag)),fluidRow(
plotlyOutput("myplot_fwd")
)
),tabPanel('View 2'
)
))
)
)
server <- function(input,output) {
output$myplot_fwd <- renderPlotly({
plot1 <- read.csv("plot1.csv",sep = ",",header = TRUE)
data <- plot1 %>%
filter(Warehouse == input$warehouse,Region == input$region,flag == input$mov_type)
p<- ggplot(data,aes(fill=TAT,y=Quantity,x=Week)) +
geom_bar(position="fill",stat="identity",colour="black") +
labs(x = "Week") +
labs(y = "Percentage") +
labs(title = "Performance") +
scale_y_continuous(labels=scales::percent)
p <- ggplotly(p,tooltip="text")
p
})
}
shinyApp(ui,server)
我尝试更新我的渲染图部分以显示百分比:
output$myplot_fwd <- renderPlotly({
plot1 <- read.csv("plot1.csv",header = TRUE)
data <- plot1 %>%
filter(Warehouse == input$warehouse,flag == input$mov_type)
p<- ggplot(data,x=Week)) +
geom_bar(position="fill",colour="black") +
labs(x = "Week") +
labs(y = "Percentage") +
labs(title = "Performance") +
scale_y_continuous(labels=scales::percent) +
geom_text(aes(label = Quantity),position = position_stack(vjust = 0.5))
geom_text(data = . %>%
filter(Warehouse == input$warehouse,flag == input$flag) %>%
group_by(Week,TAT) %>%
mutate(p = Quantity / sum(Quantity)) %>%
ungroup(),aes(y = p,label = scales::percent(p)),position = position_stack(vjust = 3.25),show.legend = FALSE)
p <- ggplotly(p,tooltip="text")
p
})
有没有一种方法可以在 GGplot 中正确显示百分比和数量的标签(如果可能的话)。 任何帮助将不胜感激。 谢谢。
解决方法
试试这个:
output$myplot_fwd <- renderPlotly({
plot1 <- read.csv("plot1.csv",sep = ",",header = TRUE)
data <- plot1 %>%
filter(Warehouse == input$warehouse,Region == input$region,Flag == input$mov_type) %>%
group_by(Week) %>%
mutate(label = prop.table(Quantity) * 100)
p <- ggplot(data,aes(fill=TAT,y=label,x=Week,label = paste0(round(label,2),'%'))) +
geom_col(colour="black") +
labs(x = "Week") +
labs(y = "Percentage") +
labs(title = "Performance") +
geom_text(position = position_stack(vjust = 0.5))
p <- ggplotly(p,tooltip="text")
p
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。