use ruviz::prelude::*;
fn main() -> Result<()> {
line_plot_pdf()?;
scatter_plot_pdf()?;
bar_chart_pdf()?;
multi_series_pdf()?;
println!("All PDF examples saved successfully!");
println!("Open the PDF files in a PDF viewer to see vector graphics.");
Ok(())
}
fn line_plot_pdf() -> Result<()> {
let x: Vec<f64> = (0..50).map(|i| i as f64 * 0.1).collect();
let y: Vec<f64> = x.iter().map(|&x| (x * 2.0).sin()).collect();
Plot::new()
.line(&x, &y)
.color(Color::new(31, 119, 180))
.title("Sine Wave (PDF Export)")
.xlabel("X")
.ylabel("sin(2x)")
.save_pdf("line_plot.pdf")?;
println!("Saved: line_plot.pdf");
Ok(())
}
fn scatter_plot_pdf() -> Result<()> {
let x: Vec<f64> = (0..30).map(|i| i as f64 * 0.3).collect();
let y: Vec<f64> = x.iter().map(|&x| x * 0.5 + (x * 3.0).sin() * 0.5).collect();
Plot::new()
.scatter(&x, &y)
.color(Color::new(214, 39, 40))
.title("Scatter Plot (PDF)")
.xlabel("X")
.ylabel("Y")
.save_pdf("scatter_plot.pdf")?;
println!("Saved: scatter_plot.pdf");
Ok(())
}
fn bar_chart_pdf() -> Result<()> {
let categories = vec!["Q1", "Q2", "Q3", "Q4"];
let values = vec![25.0, 45.0, 30.0, 55.0];
Plot::new()
.bar(&categories, &values)
.color(Color::new(44, 160, 44))
.title("Quarterly Sales (PDF)")
.xlabel("Quarter")
.ylabel("Sales ($K)")
.save_pdf("bar_chart.pdf")?;
println!("Saved: bar_chart.pdf");
Ok(())
}
fn multi_series_pdf() -> Result<()> {
let x: Vec<f64> = (0..40).map(|i| i as f64 * 0.1).collect();
let y1: Vec<f64> = x.iter().map(|&x| x.sin()).collect();
let y2: Vec<f64> = x.iter().map(|&x| x.cos()).collect();
Plot::new()
.line(&x, &y1)
.color(Color::new(31, 119, 180))
.label("sin(x)")
.line(&x, &y2)
.color(Color::new(255, 127, 14))
.label("cos(x)")
.title("Trigonometric Functions (PDF)")
.xlabel("X (radians)")
.ylabel("Y")
.save_pdf("multi_series.pdf")?;
println!("Saved: multi_series.pdf");
Ok(())
}