use std::error::Error;
use meteostat::{LatLon, Meteostat, Year};
use plotlars::{Line, Plot, Rgb, TimeSeriesPlot};
use polars::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
println!("Fetching weather data from Meteostat...");
let client = Meteostat::new().await?;
let location = LatLon(52.118641, 5.185589);
let weather_data = client
.daily()
.location(location)
.call()
.await?
.get_for_period(Year(2023))?
.frame
.collect()?;
println!("Generating temperature plot...");
plot_temperature(&weather_data);
println!("Plot shown in browser.");
Ok(())
}
fn plot_temperature(dataset: &DataFrame) {
TimeSeriesPlot::builder()
.data(dataset)
.x("date")
.y("tavg")
.additional_series(vec!["tmin", "tmax"])
.colors(vec![
Rgb(120, 120, 120), Rgb(69, 143, 196), Rgb(199, 115, 42), ])
.lines(vec![Line::Solid, Line::Dot, Line::Dot])
.plot_title("Temperature at De Bilt (2023)")
.build()
.plot();
}