R 在Shinny中,在给定复选框输入的情况下,如何对绘图的变量(x和或y)进行日志转换?
在Shiny中,如何在给定复选框输入的情况下对变量(x和或y)进行日志转换? 如果输入变量是数字的,我希望在给定复选框输入的情况下对变量进行日志转换R 在Shinny中,在给定复选框输入的情况下,如何对绘图的变量(x和或y)进行日志转换?,r,shiny,shiny-server,R,Shiny,Shiny Server,在Shiny中,如何在给定复选框输入的情况下对变量(x和或y)进行日志转换? 如果输入变量是数字的,我希望在给定复选框输入的情况下对变量进行日志转换 library(shiny) library(ggplot2) ui <- fluidPage( selectInput(inputId = "xvariable", label = "X Variable", choices = colna
library(shiny)
library(ggplot2)
ui <- fluidPage(
selectInput(inputId = "xvariable",
label = "X Variable",
choices = colnames(mtcars)),
checkboxInput("LogX", "Log Transform", FALSE),
selectInput(inputId = "yvariable",
label = "Y Variable",
choices = colnames(mtcars)),
checkboxInput("LogY", "Log Transform", FALSE),
h3(""),
plotOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlot({
req(input$xvariable)
req(input$yvariable)
g <- ggplot(mtcars, aes(x = !!as.symbol(input$xvariable), y = !!as.symbol(input$yvariable)))
if (input$xvariable %in% c("mpg", "disp", "hp", "drat", "wt", "qsec")) {
# numeric
g <- g + geom_point()
} else {
# categorical
g <- g + geom_bar()
}
g
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(GG2)
ui这应该行得通。根据选定的变量,创建新的X和Y列。如果启用日志转换,则转换该列。也使ggplot调用更容易一些
library(shiny)
library(ggplot2)
ui <- fluidPage(
selectInput(inputId = "xvariable",
label = "X Variable",
choices = colnames(mtcars)),
checkboxInput("LogX", "Log Transform", FALSE),
selectInput(inputId = "yvariable",
label = "Y Variable",
choices = colnames(mtcars)),
checkboxInput("LogY", "Log Transform", FALSE),
h3(""),
plotOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlot({
req(input$xvariable)
req(input$yvariable)
## Copy mtcars into new dataframe
df <- mtcars
## Create Y Variable
# If LogY is TRUE
if(isTRUE(input$LogY)){
df$y <- log(df[[as.character(input$yvariable)]])
}
# If LogY is FALSE
if(!isTRUE(input$LogY)){
df$y <- df[[as.character(input$yvariable)]]
}
## Modify X Variable Based on Variable
if (input$xvariable %in% c("mpg", "disp", "hp", "drat", "wt", "qsec")) {
## Create X Variable
# If LogX is TRUE
if(isTRUE(input$LogX)){
df$x <- log(df[[as.character(input$xvariable)]])
}
# If LogX is FALSE
if(!isTRUE(input$LogX)){
df$x <- df[[as.character(input$xvariable)]]
}
## Graph
g <- ggplot(df, aes(x = x, y = y)) + geom_point()
} else {
df$x <- as.factor(df[[as.character(input$xvariable)]])
## Graph
g <- ggplot(df, aes(x = x)) + geom_bar()
}
g
})
}
库(闪亮)
图书馆(GG2)
ui如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,则更容易帮助您。@MrFlick,很抱歉,我添加了一个示例。您已经有条件地添加了不同的geom。为什么不对你的秤做同样的操作呢?如果要进行log10变换,可以选择添加scale\u x\u log10
或scale\u y\u log10
。