use crate::common::*;
use gnuplot::*;
use std::iter::repeat;
mod common;
fn example(c: Common)
{
let x = &[1.0f32, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0];
let x = x.iter2();
let y1: Vec<f32> = x
.map(|&v| {
let z = v - 4.0;
z * z - 5.0
})
.collect();
let y1 = y1.iter2();
let y2: Vec<f32> = x
.map(|&v| {
let z = v - 4.0;
-z * z + 5.0
})
.collect();
let y2 = y2.iter2();
let y3: Vec<f32> = x.map(|&v| v - 4.0).collect();
let y3 = y3.iter2();
let y4: Vec<f32> = x.map(|&v| 0.9 * v - 4.0).collect();
let y4 = y4.iter2();
let x_err = repeat(0.1f32);
let y_err = repeat(0.2f32);
let mut fg = Figure::new();
fg.axes2d()
.set_size(0.75, 1.0)
.set_title("Example Plot fg1.1", &[])
.set_x_ticks(Some((Fix(1.0), 1)), &[Mirror(false)], &[])
.set_y_ticks(Some((Fix(1.0), 1)), &[Mirror(false)], &[])
.set_legend(
Graph(1.0),
Graph(0.5),
&[Placement(AlignLeft, AlignCenter)],
&[TextAlign(AlignRight)],
)
.set_border(true, &[Left, Bottom], &[LineWidth(2.0)])
.set_x_label("Abscissa", &[])
.set_y_label("Ordinate", &[])
.arrow(
Axis(5.7912),
Axis(2.7912),
Axis(5.7912),
Axis(1.7912),
&[
ArrowType(Closed),
ArrowSize(0.1),
LineWidth(2.0),
Color("black".into()),
],
)
.label("Here", Axis(5.7912), Axis(3.1), &[TextAlign(AlignCenter)])
.fill_between(
x,
y1.map(|&y| y * 0.85 - 1.0),
y1.map(|&y| y * 1.15 + 1.0),
&[Color("#aaaaff".into())],
)
.lines(
x,
y1,
&[
Caption("(x - 4)^2 - 5"),
LineWidth(1.5),
Color("black".into()),
],
)
.y_error_lines(
x,
y2,
repeat(1.0f32),
&[
Caption("-(x - 4)^2 + 5"),
LineWidth(1.5),
Color("red".into()),
],
)
.lines_points(
x,
y3,
&[
Caption("x - 4"),
PointSymbol('t'),
LineWidth(1.5),
LineStyle(Dash),
Color("#11ff11".into()),
],
);
c.show(&mut fg, "example1_1");
let mut fg = Figure::new();
fg.axes2d()
.set_pos_grid(2, 2, 0)
.lines(
x,
y1,
&[Caption("Lines"), LineWidth(3.0), Color("violet".into())],
)
.set_title("Plot1 fg1.2", &[]);
fg.axes2d()
.set_pos_grid(2, 1, 1)
.points(
x,
y2,
&[
Caption("Points"),
PointSymbol('D'),
Color("#ffaa77".into()),
PointSize(2.0),
],
)
.set_title("Plot2", &[]);
c.show(&mut fg, "example1_2");
let mut fg = Figure::new();
fg.axes2d().lines(
x,
y1,
&[Caption("Lines"), LineWidth(3.0), Color("violet".into())],
);
fg.axes2d()
.set_pos(0.2, 0.4)
.set_size(0.3, 0.6)
.set_aspect_ratio(Fix(1.0))
.points(
x,
y2,
&[Caption("Points"), PointSymbol('T'), Color("#ffaa77".into())],
)
.set_title("Inset fg1.3", &[]);
c.show(&mut fg, "example1_3");
let mut fg = Figure::new();
fg.axes2d()
.lines(
x,
y1,
&[Caption("Lines"), LineWidth(3.0), Color("violet".into())],
)
.set_y_range(Fix(-30.0), Auto)
.set_y_label("This axis is manually scaled on the low end", &[])
.set_title("Range fg1.4", &[]);
c.show(&mut fg, "example1_4");
let mut fg = Figure::new();
fg.axes2d()
.x_error_lines(
x,
y1,
x_err.clone(),
&[
Caption(r"x\_error\_lines"),
LineWidth(2.0),
PointSymbol('O'),
Color("red".into()),
],
)
.y_error_lines(
x,
y2,
y_err.clone(),
&[
Caption(r"y\_error\_lines"),
LineWidth(2.0),
PointSymbol('S'),
Color("blue".into()),
],
)
.x_error_bars(
x,
y3,
x_err,
&[
Caption(r"x\_error\_bars"),
PointSymbol('T'),
Color("cyan".into()),
],
)
.y_error_bars(
x,
y4,
y_err,
&[
Caption(r"y\_error\_bars"),
PointSymbol('R'),
Color("green".into()),
],
)
.set_title("Error fg1.5", &[]);
c.show(&mut fg, "example1_5");
let mut fg = Figure::new();
fg.axes2d()
.set_size(1.0, 0.8)
.set_pos(0.0, 0.2)
.fill_between(
x,
y1,
y3,
&[
Color("red".into()),
FillAlpha(0.5),
FillRegion(Above),
Caption("A > B"),
],
)
.fill_between(
x,
y1,
y3,
&[
Color("green".into()),
FillAlpha(0.5),
FillRegion(Below),
Caption("A < B"),
],
)
.fill_between(
x,
y2,
y3,
&[
Color("blue".into()),
FillAlpha(0.5),
FillRegion(Between),
Caption("Between C and B"),
],
)
.lines(
x,
y1,
&[
Color("black".into()),
LineWidth(2.0),
LineStyle(Dash),
Caption("A"),
],
)
.lines(
x,
y2,
&[Color("black".into()), LineWidth(2.0), Caption("C")],
)
.lines(
x,
y3,
&[
Color("black".into()),
LineWidth(2.0),
LineStyle(DotDotDash),
Caption("B"),
],
)
.set_title("Fill and legend fg1.6", &[])
.set_legend(
Graph(0.5),
Graph(-0.2),
&[
Horizontal,
Placement(AlignCenter, AlignTop),
Title("Legend Title"),
],
&[TextAlign(AlignRight)],
);
c.show(&mut fg, "example1_6");
let mut fg = Figure::new();
fg.axes2d()
.set_pos(0.1, 0.1)
.set_size(0.8, 0.8)
.lines(
x,
y1,
&[
Caption("(x - 4)^2 - 5"),
LineWidth(3.0),
Color("violet".into()),
LineStyle(DotDash),
],
)
.points(
x,
y2,
&[
Caption("-(x - 4)^2 + 5"),
PointSymbol('S'),
Color("#ffaa77".into()),
],
)
.lines_points(
x,
y3,
&[
Caption("x - 4"),
PointSymbol('O'),
Color("black".into()),
LineStyle(SmallDot),
],
)
.set_x_label(
"X Label",
&[Font("Arial", 24.0), TextColor("red".into()), Rotate(45.0)],
)
.set_y_label("Y Label", &[Rotate(0.0)])
.set_title(
"Goings nuts with the formatting fg1.7",
&[Font("Times", 24.0), TextOffset(-10.0, 0.5)],
)
.label(
"Intersection",
Axis(2.208),
Axis(-1.791),
&[
MarkerSymbol('*'),
TextAlign(AlignCenter),
TextOffset(0.0, -1.0),
MarkerColor(RGBString("red")),
MarkerSize(2.0),
],
);
c.show(&mut fg, "example1_7");
}
fn main()
{
Common::new().map(|c| example(c));
}