library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
AirData<-read.csv("ad_viz_plotval_data.csv")
glimpse(AirData)Rows: 6,452
Columns: 21
$ Date <chr> "01/01/2026", "01/02/2026", "01/0…
$ Source <chr> "AQS", "AQS", "AQS", "AQS", "AQS"…
$ Site.ID <int> 360010012, 360010012, 360010012, …
$ POC <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ Daily.Max.8.hour.Ozone.Concentration <dbl> 0.040, 0.033, 0.038, 0.034, 0.023…
$ Units <chr> "ppm", "ppm", "ppm", "ppm", "ppm"…
$ Daily.AQI.Value <int> 37, 31, 35, 31, 21, 12, 22, 21, 2…
$ Local.Site.Name <chr> "LOUDONVILLE", "LOUDONVILLE", "LO…
$ Daily.Obs.Count <int> 17, 17, 17, 17, 17, 17, 17, 17, 1…
$ Percent.Complete <dbl> 100, 100, 100, 100, 100, 100, 100…
$ AQS.Parameter.Code <int> 44201, 44201, 44201, 44201, 44201…
$ AQS.Parameter.Description <chr> "Ozone", "Ozone", "Ozone", "Ozone…
$ Method.Code <int> 87, 87, 87, 87, 87, 87, 87, 87, 8…
$ CBSA.Code <int> 10580, 10580, 10580, 10580, 10580…
$ CBSA.Name <chr> "Albany-Schenectady-Troy, NY", "A…
$ State.FIPS.Code <int> 36, 36, 36, 36, 36, 36, 36, 36, 3…
$ State <chr> "New York", "New York", "New York…
$ County.FIPS.Code <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ County <chr> "Albany", "Albany", "Albany", "Al…
$ Site.Latitude <dbl> 42.68075, 42.68075, 42.68075, 42.…
$ Site.Longitude <dbl> -73.75733, -73.75733, -73.75733, …
AirData %>%
mutate(Date = as.Date(Date, format = "%m/%d/%Y")) %>%
filter(Date >= "2026-09-01") %>%
ggplot(aes(x=Date, y=Daily.Max.8.hour.Ozone.Concentration))+geom_line(color="blue") + labs(title="Daily Ozone Concentration this Year in New York")