r - 无法在闪亮中使用 Selectinput 进行选择
问题描述
嗨,我无法从下面的查询中理解我在哪里犯了错误,我得到了选项“B”的图,但是当我选择选项“A”时,没有显示图。当我选择“A”时,我想从“l”和“k”绘制第一部分,但不知何故它缺少“A”,这适用于“B”。需要一些帮助。
library(shinydashboard)
library(shiny)
library(shinyWidgets)
library(ggplot2)
## test data
Quarter <- c("Fy17Q1","Fy17Q1","Fy17Q1","Fy17Q2","Fy17Q2","Fy17Q2","Fy17Q3",
"Fy17Q3","Fy17Q3","Fy17Q4","Fy17Q4","Fy17Q4","Fy18Q1","Fy18Q1",
"Fy18Q1","Fy18Q2","Fy18Q2","Fy18Q2")
RiskTierDesc <- c("Above Normal","High","Normal","Above Normal","High","Normal",
"Above Normal","High","Normal","Above Normal","High","Normal",
"Above Normal","High","Normal","Above Normal","High","Normal")
Freq <- c(502,62,1452,549,88,1582,617,80,1578,530,68,1455,536,61,1551,600,52,2038)
FreqbyPercent <- c(25,3,72,25,4,71,27,4,69,26,3,71,25,3,72,22,2,76)
QuarterInNum<- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6)
TotalNRinM <- c(33.044,0,56.459,18.089,0.234,39.774,99.451,20.608,86.166,257.532,
3.93,336.079,493.464,7.952,298.565,661.728,189.184,1172.245)
TotalNRinMPercent <- c(37,0,63,31,0,68,48,10,42,43,1,56,62,1,37,33,9,58)
File2<- data.frame(Quarter,RiskTierDesc,Freq,FreqbyPercent,QuarterInNum,TotalNRinM,
TotalNRinMPercent)
File2$RiskTierDesc = factor(File2$RiskTierDesc, levels=c("High", "Above Normal", "Normal"))
#========================================UI=============================================================#
ui <- dashboardPage(
dashboardHeader(title = "Basic Dashboard"),
dashboardSidebar(
sidebarMenu( selectInput("app",
"Select App:",
choices = c("","A","B"),
selected = "A",
multiple = FALSE)),
sliderTextInput("Quarter","Select Quarter:",
choices = unique(File2$Quarter),
selected = unique(File2$Quarter)[c(2, 5)])),
dashboardBody(
fluidRow(
box(solidHeader = TRUE
,collapsible = TRUE,align="center",offset = 2,title = "RiskTier Vs Quater",status = "warning", plotOutput("k", height = "300px"),width = 6)
,
box(solidHeader = TRUE
,collapsible = TRUE,align="center",offset = 4,title = "RiskTier Vs Quater(%)",status = "warning", plotOutput("l", height = "300px"),width = 6)
)))
#==========================================SERVER=======================================================#
server <- function(input, output) {
dataInput <- reactive({
qfrom <- File2$QuarterInNum[match(input$Quarter[1], File2$Quarter)]
qto <- File2$QuarterInNum[match(input$Quarter[2], File2$Quarter)]
test <- File2[File2$QuarterInNum %in% seq(from=qfrom,to=qto),]
#print(test)
test
})
x<-reactive({input$app})
output$k<- renderPlot({
if (x()=="A"){
ggplot(dataInput(),
aes(x=Quarter, y=Freq, group=RiskTierDesc, colour=RiskTierDesc)) +
geom_line(aes(size=RiskTierDesc)) +
geom_point() + ylim(0,2500) +
scale_color_manual(values=c("red","orange","green")) +
scale_size_manual(values=c(1,1,1)) +
labs( x = "Quarter", y = "Frequency") +
geom_text(aes(label = Freq), position = position_dodge(0),vjust = -1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())}})
output$l<- renderPlot({
if (x()=="A"){
ggplot(dataInput(),
aes(x=Quarter, y=FreqbyPercent, group=RiskTierDesc, colour=RiskTierDesc)) +
geom_line(aes(size=RiskTierDesc)) +
geom_point() + ylim(0,100) +
scale_color_manual(values=c("red","orange","green")) +
scale_size_manual(values=c(1,1,1)) +
labs( x = "Quarter", y = "Frequency(%)") +
geom_text(aes(label = FreqbyPercent), position = position_dodge(0),vjust = -1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())}})
output$k<- renderPlot({
if (x()=="B"){
ggplot(dataInput(),
aes(x=Quarter, y=TotalNRinM, group=RiskTierDesc, colour=RiskTierDesc)) +
geom_line(aes(size=RiskTierDesc)) +
geom_point() + ylim(0,2500) +
scale_color_manual(values=c("red","orange","green")) +
scale_size_manual(values=c(1,1,1)) +
labs( x = "Quarter", y = "Frequency") +
geom_text(aes(label = TotalNRinM), position = position_dodge(0),vjust = -1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
}})
output$l<- renderPlot({
if (x()=="B"){ggplot(dataInput(),
aes(x=Quarter, y=TotalNRinMPercent, group=RiskTierDesc, colour=RiskTierDesc)) +
geom_line(aes(size=RiskTierDesc)) +
geom_point() + ylim(0,100) +
scale_color_manual(values=c("red","orange","green")) +
scale_size_manual(values=c(1,1,1)) +
labs( x = "Quarter", y = "Frequency(%)") +
geom_text(aes(label = TotalNRinMPercent), position = position_dodge(0),vjust = -1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())}})
}
shinyApp(ui, server)
解决方案
一些简短的想法:为什么要重复大约。相同的功能四次?写一个函数有什么用?据我所知,只有 y 轴的数据不同。做一个反应,改变 y 轴的值并将其传递给函数。
yaxis <- reactive({
if (input$app == "A")
x <- list("Freq","FreqbyPercent")
else if (input$yearset == "B")
x <- list("TotalNR","TotalNRinMPercent")
})
plotter<- function(df,xname,yname){
x_var <- enquo(xname)
y_var <- enquo(yname)
ggplot(df,
aes(x=x_var, y=y_var, group=RiskTierDesc, colour=RiskTierDesc)) +
geom_line(aes(size=RiskTierDesc)) +
geom_point() + ylim(0,100) +
scale_color_manual(values=c("red","orange","green")) +
scale_size_manual(values=c(1,1,1)) +
labs( x = "Quarter", y = "Frequency(%)") +
geom_text(aes(label = TotalNRinMPercent), position =position_dodge(0),vjust = -1) +
theme(panel.grid.major = element_blank(), panel.grid.minor=element_blank())}}) }
然后在你的调用它。
renderPlot{(
plotter(dataInput(),quarter,x[[1]])
)}
对不起,有点快和肮脏,也许其中有一些错误。
推荐阅读
- image-processing - 使用 graphicsmagick 裁剪可变宽度框架
- node.js - 从多个视频文件到单个输出
- sql - 如何选择与列表中所有值匹配的值?
- elasticsearch - Kibana - 日志分析 - 查找唯一事务号
- spring-boot - 如何注册来自不同 IP 地址的服务?
- python - 如何在 django-oscar 2.0 中定义店内现金支付方式
- android - 使用 facebook android firebase 登录时空对象引用上的虚拟方法“boolean java.lang.String.equals(java.lang.Object)”
- sql - 无法获取所有订单项目并继续获取具有子组件的订单行
- azure - 如何在 MS Azure 中结合两种算法进行预测分析
- php - 如何定义常量?