根据RShiny中的不同日期范围改变绘图

根据RShiny中的不同日期范围改变绘图,r,ggplot2,shiny,R,Ggplot2,Shiny,我正在尝试制作一个闪亮的应用程序,根据不同的日期绘制自定义ggplotplot1。 plot1的参数是days,该参数按不同的日期进行打印,并相应地指定了天数。然而,我就是不知道如何集成到shiny的服务器部分。以下是我的最佳方法: # create sample data frame with dates set.seed(1) date = seq(Sys.Date(), by = "day", length.out = 30) number = 100 * rnorm(30) df = d

我正在尝试制作一个闪亮的应用程序,根据不同的日期绘制自定义ggplot
plot1
plot1
的参数是
days
,该参数按不同的日期进行打印,并相应地指定了天数。然而,我就是不知道如何集成到shiny的服务器部分。以下是我的最佳方法:

# create sample data frame with dates
set.seed(1)
date = seq(Sys.Date(), by = "day", length.out = 30)
number = 100 * rnorm(30)
df = data.frame(date = date, number = number)
head(df)


# Plot
library(ggplot2)
library(shiny)
library(dplyr)

plot1 <- function(days) {
  df %>% filter(between(date, max(df$date) - days, max(df$date))) %>%

    ggplot(aes(x = date, y = number)) +
    geom_line() +
    theme_classic()
}

# Shiny
ui <- fluidPage(
    dateRangeInput(
    inputId = "daterange",
    label = "Select the date range",
    start = min(df$date), 
    end = max(df$date), 
  ),

  plotOutput("plotA") 
)

server <- function(input, output, session) {
  output$plotA <- renderPlot({
    plot1(input$daterange)
  })
}

shinyApp(ui, server)
#创建带有日期的示例数据框
种子(1)
日期=序号(Sys.date(),by=“day”,length.out=30)
数量=100*rnorm(30)
df=数据帧(日期=日期,数字=数字)
头部(df)
#密谋
图书馆(GG2)
图书馆(闪亮)
图书馆(dplyr)
plot1%过滤器(介于(日期,最大值(df$日期)-天,最大值(df$日期))之间%>%
ggplot(aes(x=日期,y=编号))+
geom_线()+
主题(经典)
}
#闪亮的

ui对您来说,
filter
是一个屏蔽函数吗?您可以通过
dplyr::filter()
尝试使用限定函数调用
filter

除此之外,正如另一位用户指出的,
input$daterange
是一个有两个值的向量——一个是“开始”(
input$daterange[1]
)和一个是“结束”(
input$daterange[2]
)。您提到您尝试更改了
input$daterange[1]
[2]
,但不起作用:我想这意味着您将调用更改为
服务器中的
绘图(input$daterange)
,对吗?您应该在该函数的声明中更改并指定它。由于您已经基于
min(df$date)
max(df$date)
定义了从
input$daterange
开始的日期,因此您可以使用
days[1]
days[2]
引用用户输入的
min
max
。也许是这样

plot1 <- function(days) {
  df %>% dplyr::filter(between(date, days[1], days[2])) %>%

    ggplot(aes(x = date, y = number)) +
    geom_line() +
    theme_classic()
}

如果我只调用
ggplot
而不调用
print()
,则它并不总是按预期工作。

有什么问题?请检查您的代码,确保您没有丢失任何软件包,并且它是可复制的。问题是
input$daterange
会产生两个日期(开始和结束),而
plot1
只接受一个参数。使用
input$daterange[1]
[2]
根据您想要执行的操作@bretauv我已经尝试了
input$daterance[1]
[2]
,但仍然不起作用。情节不会改变。我认为就我想做的事情而言,
过滤器
部分是不正确的。
myPlot <- ggplot(df, aes(x=..., y=...)) + geoms_...
print(myPlot)