仅当用户指定范围时才添加轴
add axis only if user specifies range
如果用户更改默认值,我正在尝试获得一个闪亮的应用程序来指定轴范围。
截至目前,用户可以根据指定值过滤数据(过滤器始终处于活动状态,这就是默认值如此极端的原因),但我想提供将轴范围指定为相同值的功能。
示例代码是我尝试这样做的,但我也希望能够让轴默认为最大值,如果它们只指定一个最小值(在第二张图片中,这意味着默认情况下,轴的最小值为 3,最大值为 3。我意识到我提供的示例中就是这种情况,但我希望用户能够将最小值设置为 -2 并展开轴以查看白色 space 到 x=-2,最大值仍设置为默认值),我不确定如何开始构建它。
#Check packages to use in library
{
library('shiny') #allows for the shiny app to be used. I am using V0.13.1
library('ggvis') #allows for interactive ploting. I am using V0.4.2
library('dplyr') #I am using V0.4.3
}
alldata <- iris
#establish options for drop down menus
{
specieschoices <- unique(as.character(alldata$Species))
petalwchoices <- unique(as.character(alldata$Petal.Width))
petallchoices <- unique(as.character(alldata$Petal.Length))
sepallchoices <- unique(as.character(alldata$Sepal.Length))
sepalwchoices <- unique(as.character(alldata$Sepal.Width))
}
# UI
ui<-fluidPage(
titlePanel("Explorer"),
fluidRow(
column(8,
ggvisOutput("plot1")
),
column(4,
wellPanel(
h4("Data Variables"),
selectInput(inputId = "x", label="Select x-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Length', multiple = FALSE),
selectInput(inputId = "y", label="Select y-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Width', multiple = FALSE)
)),
column(4,
wellPanel(
wellPanel(
numericInput(inputId = "minxaxis", label="Specify x axis min", value = -999999999),
numericInput(inputId = "maxxaxis", label="Specify x axis max", value = 999999999),
numericInput(inputId = "minyaxis", label="Specify y axis min", value = -999999999),
numericInput(inputId = "maxyaxis", label="Specify y axis max", value = 999999999)
)
))
))
#SERVER
server<-function(input,output,session)
{
#Set up reactive variables
filteredData <- reactive({
minX <- input$minxaxis
maxX <- input$maxxaxis
minY <- input$minyaxis
maxY <- input$maxyaxis
a <- which(names(alldata)==input$x)
xvariable <- as.numeric(alldata[,a])
b <- which(names(alldata)==input$y)
yvariable <- as.numeric(alldata[,b])
# Apply filters
m <- alldata %>% filter(
xvariable >= minX,
xvariable <= maxX,
yvariable >= minY,
yvariable <= maxY
)
m <- droplevels(as.data.frame(m))
m
})
vis <- reactive({
xvar <- prop("x", as.symbol(input$x))
yvar <- prop("y", as.symbol(input$y))
minX <- input$minxaxis
maxX <- input$maxxaxis
minY <- input$minyaxis
maxY <- input$maxyaxis
p1 = filteredData() %>%
ggvis(x = xvar, y = yvar) %>%
layer_points(size.hover := 200,
fillOpacity:= 0.5, fillOpacity.hover := 1
) %>%
# Specifies the size of the plot
set_options(width = 800, height = 450, duration = 0)
#################### THIS IS THE PART THAT I NEED HELP ON #######################
# %>%>
# if (minX != -999999999 & maxX != 999999999) {
# add_axis("x", values = minX:maxX)
# }
# else if (minY != -999999999 & maxY != 999999999) {
# add_axis("y", values = minY:maxY)
# }
#################################################################################
})
#Actually plots the data
vis %>% bind_shiny("plot1")
}
#Run the Shiny App to Display Webpage
shinyApp(ui=ui, server=server)
default view of program
您可以使用逻辑语句和输入值将轴限制设置为 NA 或所选值,例如 input$minxaxis
。
minX = if(input$minxaxis == -999999999) {NA} else {input$minxaxis}
maxX = if(input$maxxaxis == 999999999) {NA} else {input$maxxaxis}
minY = if(input$minyaxis == -999999999) {NA} else {input$minyaxis}
maxY = if(input$maxyaxis == 999999999) {NA} else {input$maxyaxis}
然后你可以使用scale_numeric
通过domain
设置轴的限制。如果限制之一是 NA,则使用默认域值。
p1 = filteredData() %>%
ggvis(x = xvar, y = yvar) %>%
layer_points(size.hover := 200,
fillOpacity:= 0.5, fillOpacity.hover := 1) %>%
scale_numeric("x", domain = c(minX, maxX), clamp = TRUE) %>%
scale_numeric("y", domain = c(minY, maxY), clamp = TRUE)
如果用户更改默认值,我正在尝试获得一个闪亮的应用程序来指定轴范围。 截至目前,用户可以根据指定值过滤数据(过滤器始终处于活动状态,这就是默认值如此极端的原因),但我想提供将轴范围指定为相同值的功能。
示例代码是我尝试这样做的,但我也希望能够让轴默认为最大值,如果它们只指定一个最小值(在第二张图片中,这意味着默认情况下,轴的最小值为 3,最大值为 3。我意识到我提供的示例中就是这种情况,但我希望用户能够将最小值设置为 -2 并展开轴以查看白色 space 到 x=-2,最大值仍设置为默认值),我不确定如何开始构建它。
#Check packages to use in library
{
library('shiny') #allows for the shiny app to be used. I am using V0.13.1
library('ggvis') #allows for interactive ploting. I am using V0.4.2
library('dplyr') #I am using V0.4.3
}
alldata <- iris
#establish options for drop down menus
{
specieschoices <- unique(as.character(alldata$Species))
petalwchoices <- unique(as.character(alldata$Petal.Width))
petallchoices <- unique(as.character(alldata$Petal.Length))
sepallchoices <- unique(as.character(alldata$Sepal.Length))
sepalwchoices <- unique(as.character(alldata$Sepal.Width))
}
# UI
ui<-fluidPage(
titlePanel("Explorer"),
fluidRow(
column(8,
ggvisOutput("plot1")
),
column(4,
wellPanel(
h4("Data Variables"),
selectInput(inputId = "x", label="Select x-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Length', multiple = FALSE),
selectInput(inputId = "y", label="Select y-axis Variable:", choices=as.character(names(alldata[,1:4])),selected='Petal.Width', multiple = FALSE)
)),
column(4,
wellPanel(
wellPanel(
numericInput(inputId = "minxaxis", label="Specify x axis min", value = -999999999),
numericInput(inputId = "maxxaxis", label="Specify x axis max", value = 999999999),
numericInput(inputId = "minyaxis", label="Specify y axis min", value = -999999999),
numericInput(inputId = "maxyaxis", label="Specify y axis max", value = 999999999)
)
))
))
#SERVER
server<-function(input,output,session)
{
#Set up reactive variables
filteredData <- reactive({
minX <- input$minxaxis
maxX <- input$maxxaxis
minY <- input$minyaxis
maxY <- input$maxyaxis
a <- which(names(alldata)==input$x)
xvariable <- as.numeric(alldata[,a])
b <- which(names(alldata)==input$y)
yvariable <- as.numeric(alldata[,b])
# Apply filters
m <- alldata %>% filter(
xvariable >= minX,
xvariable <= maxX,
yvariable >= minY,
yvariable <= maxY
)
m <- droplevels(as.data.frame(m))
m
})
vis <- reactive({
xvar <- prop("x", as.symbol(input$x))
yvar <- prop("y", as.symbol(input$y))
minX <- input$minxaxis
maxX <- input$maxxaxis
minY <- input$minyaxis
maxY <- input$maxyaxis
p1 = filteredData() %>%
ggvis(x = xvar, y = yvar) %>%
layer_points(size.hover := 200,
fillOpacity:= 0.5, fillOpacity.hover := 1
) %>%
# Specifies the size of the plot
set_options(width = 800, height = 450, duration = 0)
#################### THIS IS THE PART THAT I NEED HELP ON #######################
# %>%>
# if (minX != -999999999 & maxX != 999999999) {
# add_axis("x", values = minX:maxX)
# }
# else if (minY != -999999999 & maxY != 999999999) {
# add_axis("y", values = minY:maxY)
# }
#################################################################################
})
#Actually plots the data
vis %>% bind_shiny("plot1")
}
#Run the Shiny App to Display Webpage
shinyApp(ui=ui, server=server)
default view of program
您可以使用逻辑语句和输入值将轴限制设置为 NA 或所选值,例如 input$minxaxis
。
minX = if(input$minxaxis == -999999999) {NA} else {input$minxaxis}
maxX = if(input$maxxaxis == 999999999) {NA} else {input$maxxaxis}
minY = if(input$minyaxis == -999999999) {NA} else {input$minyaxis}
maxY = if(input$maxyaxis == 999999999) {NA} else {input$maxyaxis}
然后你可以使用scale_numeric
通过domain
设置轴的限制。如果限制之一是 NA,则使用默认域值。
p1 = filteredData() %>%
ggvis(x = xvar, y = yvar) %>%
layer_points(size.hover := 200,
fillOpacity:= 0.5, fillOpacity.hover := 1) %>%
scale_numeric("x", domain = c(minX, maxX), clamp = TRUE) %>%
scale_numeric("y", domain = c(minY, maxY), clamp = TRUE)