The option to download graphics and reports can be added easily using downloadHandler(). Essentially, downloadHandler() has two arguments that both contain functions: one to define the path to which the download should go, and one that defines what is to be downloaded.
The first thing we need to do is take any functions that are used either in the download graphic request or the report and make them reactive functions, which can be called from anywhere rather than instructions to draw a graph within a call to renderPlot(). The effect of this, of course, is that we only have one function to write and maintain rather than one inside the download graphic function, one inside the download report function, and so on. This is achieved very simply:
trendGraph <- reactive({ ... rest of function that was inside renderPlot })
The graph can now...