Я работаю над созданием интерактивного линейного графика, используя ggplot
в R глянцевый. Я делаю это так, чтобы пользователь в пользовательском интерфейсе выбирал значения, которые он хочет видеть на графике, используя ввод выбора. На сервере данные затем фильтруются на основе выбора пользователя. Я указал ось х в ggplot
, используя scale_x_continuous
. Я установил последовательность от 0 до 24 с перерывами на 1. Однако, когда пользователь выберет, скажем, 1-10, ось x изменится и покажет только 1-10.
Я хочу, чтобы x- ось остается от 0 до 24 независимо от того, что выберет пользователь. Есть способ сделать это? Будет ли решение в определении пределов ggplot
по оси X другими способами или в том, как я использую вход средства выбора для фильтрации данных?
Спасибо!
Вот мой код, если это поможет:
library(shiny)
library(tidyverse)
library(shinyWidgets)
# Create sample dataset and name bin
set.seed(1234)
hour <- sample(1:24, size=100, replace=TRUE)
calls <- sample(1:55, size=100, replace =TRUE)
mydata <- data.frame(hour,calls)
name <- mydata %>%
group_by(hour) %>%
summarize(n())
name_bin <- as.data.frame(name$hour)
ui <- fluidPage(
h1 ("R shiny ggplot Question"),
pickerInput(
inputId = "myPicker",
label = "Select Hour in the day",
choices = name_bin,
options = list(
`actions-box` = TRUE,
size = 10,
`selected-text-format` = "count > 3"),
multiple = TRUE),
box(
width = 11,
plotOutput("graph1"))
)
server <- function(input,output,session) {
output$graph1 <- renderPlot({
g1 <- dplyr::filter(mydata,hour %in% input$myPicker)
g2 <- g1 %>%
group_by(hour) %>%
summarize(number = n())
ggplot(g2, aes(x=hour, y=number)) +
geom_line(color = 'darkblue') + geom_point() +
scale_x_continuous(breaks = seq(0,24, by=1)) + ###### Better way to set x-limits?
scale_y_continuous(breaks = seq(0, max(g2$number), by=5))+
theme_minimal()+
labs(y="Number of Calls", x="Hour in the day",title = "")
})
}
shinyApp(ui, server)