Hi there,
I have been trying to create a website using shiny and when trying to create a histogram I have encountered some problems.
So what I'm trying to do is ...
- To create a histogram that shows the relationship between abortion (x-axis) and parity (y-axis), and having abortion types being reactive to the user's selections
However, based on the graph that I have generated, it indicates parity and the frequency of each based on the infert dataset.
So, I was hoping that someone could please help me fix that
-
To create a graph (prehaps a stacked barplot) that shows the relationship of levels of education (on the x-axis) and numbers of abortion (y-axis) and having that graph being reactive to the radioButton of selections on education levels
-
To create a graph that indicates the relationship between parity (y-axis) and age (x-axis) and having age being reactive to the sliderInput
I guess what I'm struggling at the most is to have my graphs to depend on the inputs so if anyone can explain or show me how that is done, it would be much, much appreciated
p.s not all 3 things need to be explained at once, individual answers for singular issues are helpful
here is my code and what I have done so far
library(shiny)
library(tidyverse)
library(ggplot2)
library(datasets)
### Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Infertility and Abortions:"),
p("How does induced and spontaneous abortions affect women's infertility?"),
# Sidebar
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Select Input for Abortions ----
selectInput("display_var", label = h4(strong("Abortion Type (valid for Histogram only):")),
choices = list("Induced Abortion" = "induced",
"Spontaneous Abortion" = "spontaneous",
"Induced and Spontaneous Abortion" = c("induced, spontaneous")),
selected = "induced"
),
# Radio Buttons for Education Levels ----
radioButtons("buttons", label = h4(strong("Education Level:")),
choices = list("Low Levels of Education" = "0-5yrs",
"High Levels of Education" = "6-11yrs",
"Tertiary Levels of Education and Above" = "12+ yrs"),
selected = "6-11yrs"
),
# Slider Input for ages in numbers ----
sliderInput("age",
label = h4(strong("Age:")),
min = 20,
max = 50,
value = c(30, 40)
)),
# Main panel for displaying outputs ----
mainPanel(
# Output: Tab-set w/plots, summary
tabsetPanel(type = "tabs",
tabPanel("Histogram", plotOutput("distPlot"), br(),
radioButtons("filetype", "Select File Type To Download",
c("PDF", "JPEG")),
downloadButton("dwd", "Download Graph")),
tabPanel("Education vs. Abortion", plotOutput("barplot"),br()),
tabPanel("Age vs. Parity", plotOutput("barplot2")),
tabPanel("Summary", verbatimTextOutput("summary"))
)
)
)
)
### Define server logic to draw the above graphs
# First Install GBM Package
install.packages("sde")
# Define server logic required to draw a histogram
server <- function(input, output) {
# Histogram
output$distPlot <- renderPlot({
## Set x-axis label depending on the value of display_var
if (input$display_var == "induced") {
xlabel <- "Number of Induced Abortions"
} else if (input$display_var == "spontaneous") {
xlabel <- "Number of Spontaneous Abortions"
} else if (input$display_var == "induced, spontaneous") {
xlabel <- "Number of Induced and Spontaneous Abortions"
}
## Create new data sets
parity <- infert$parity
abortion <- infert$induced + infert$spontaneous
hist(parity, breaks = 10,
col = "grey",
xlab = xlabel,
ylab = "frequency",
main = "Histogram of Parity vs Abortion")
## Download file
output$dwd <- downloadHandler(filename = function(){
paste((str_c(input$display_var, collapse = " & ")),input$filetype, sep = ".")
},
content = function(file){
if (input$filetype == "pdf") {pdf(file)}
if (input$filetype == "jpeg") {jpeg(file)}
})
# Education vs. Abortion
output$barplot <- renderPlot({
if (input$buttons == "0-5yrs") {
xlab <- "Low Levels of Education"
} else if (input$buttons == "6-11yrs") {
xlab <- "High Levels of Education"
} else if (input$buttons == "12+ yrs") {
xlab <- "Tertiary Level of Education and Above"
}
plot(infert$education, infert$induced, main="education vs. abortion",
xlab = xlab)
})
# Age vs. Parity
output$barplot2 <- renderPlot({
})
# Summary
output$summary <- renderText({"Summary:
increased numbers of induced and spontaneous abortion will cause
decreased levels of fertility"})
})
}
# Run the application
shinyApp(ui = ui, server = server)