You really should make an effort and try to solve this yourself before asking SO. There are many great guides just a google search away. However, this stuff isn't easy and I would like to help you on your way.
library(tidyverse)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
setwd("/Users/magnusnordmo/Desktop/Magnus/R Wizard")
df <- read_csv('flowdata.csv')
#> Parsed with column specification:
#> cols(
#> date = col_character(),
#> flow = col_double()
#> )
df <- df %>%
mutate(date = mdy(df$date))
dfyear <- df %>%
mutate(year = floor_date(date, "year")) %>%
group_by(year) %>%
summarize(avg = mean(flow))
#> `summarise()` ungrouping output (override with `.groups` argument)
dfyear$year <- ymd(dfyear$year)
ggplot(dfyear,aes(year,avg,fill = 'streamflow')) +
geom_col() +
labs(fill = '') +
theme(legend.position = 'bottom')

ggplot(dfyear,aes(reorder(year,-avg),avg,fill = 'streamflow')) +
geom_col() +
labs(fill = '',x = 'year') +
scale_x_discrete(breaks = c('1953-01-01','1947-01-01','1944-01-01'),
labels = c('1953','1947','1944')) +
theme(legend.position = 'bottom')

# This plot doesnt really work in this context. Consider flipping the axis
dfyear <- dfyear %>%
mutate(gmean = mean(avg)) %>%
mutate(diff = avg-gmean)
ggplot(dfyear,aes(year,diff,fill = 'streamflow')) +
geom_col() +
labs(fill = '') +
theme(legend.position = 'bottom')

Created on 2020-11-26 by the reprex package (v0.3.0)