Skip to content

[BUG] x_labels(n) add more entries than n. #526

Open
@SoapyDev

Description

@SoapyDev

So I could not find a mention of this, excuse me if it already exist.

Description

Doing a
- LineSeries with the SVGBackend, using NaiveDate as labels on the x-axis.

Expected :

  • Limiting the x_labels to 12 should actually limit it to 12.
  • Limiting the x_labels to 12 should not create extra labels

Results :

  • The graph contains 13 dates.
  • The graph created a date that is not existent in the data.
  • See the repetition of 2023-03

exemple

To reproduce

Code

from & to are NaiveDate made from String going from the first date in the data, to the last.

       let root_area =
            SVGBackend::new(&path, (width, height)).into_drawing_area();
       root_area.fill(&WHITE)?;

    let mut chart = ChartBuilder::on(&root_area)
        .caption(title, ("inter", 30.0).into_font())
        .margin(10)
        .set_label_area_size(LabelAreaPosition::Left, 8.percent())
        .set_label_area_size(LabelAreaPosition::Bottom, 8.percent())
        .set_label_area_size(LabelAreaPosition::Right, 8.percent())
        .build_cartesian_2d(from..to, 0..max)?;

    chart
        .configure_mesh()
        .x_labels(12)
        .y_labels(10)
        .x_label_formatter(&|d| d.format(format).to_string())
        .x_desc("Date")
        .y_desc("Beneficiaires")
        .x_max_light_lines(max_lines)
        .y_max_light_lines(1)
        .draw()?;
    
    for (i, values) in data.iter().enumerate() {
        let color = *colors.get(i % colors.len()).unwrap_or(&BLACK);
        let label = labels.get(i % labels.len());
        let label = label.unwrap().as_str();
        chart
            .draw_series(LineSeries::new(
                values
                    .iter()
                    .map(|(date, x)| (NaiveDate::from_str(date).unwrap(), *x)),
                &color,
            ))?
            .label(label)
            .legend(move |(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], color));
     }

Data

As you can see, I am feeding 5 lines of data, all of them use the same dates.
Only one date exist per month.

[
    [("2023-01-04", 48), ("2023-02-01", 47), ("2023-03-01", 20), ("2023-04-05", 47), ("2023-05-03", 38), 
     ("2023-06-07", 43), ("2023-07-05", 47), ("2023-08-02", 33), ("2023-09-06", 44), ("2023-10-04", 44), 
     ("2023-11-01", 35), ("2023-12-06", 48)],

    [("2023-01-04", 40), ("2023-02-01", 31), ("2023-03-01", 30), ("2023-04-05", 36), ("2023-05-03", 28), 
     ("2023-06-07", 20), ("2023-07-05", 49), ("2023-08-02", 43), ("2023-09-06", 44), ("2023-10-04", 44), 
     ("2023-11-01", 47), ("2023-12-06", 37)],

    [("2023-01-04", 35), ("2023-02-01", 29), ("2023-03-01", 42), ("2023-04-05", 39), ("2023-05-03", 24), 
     ("2023-06-07", 26), ("2023-07-05", 30), ("2023-08-02", 37), ("2023-09-06", 44), ("2023-10-04", 28), 
     ("2023-11-01", 34), ("2023-12-06", 35)],

    [("2023-01-04", 23), ("2023-02-01", 42), ("2023-03-01", 42), ("2023-04-05", 45), ("2023-05-03", 40), 
     ("2023-06-07", 40), ("2023-07-05", 28), ("2023-08-02", 23), ("2023-09-06", 28), ("2023-10-04", 43), 
     ("2023-11-01", 25), ("2023-12-06", 45)],

    [("2023-01-04", 36), ("2023-02-01", 39), ("2023-03-01", 39), ("2023-04-05", 33), ("2023-05-03", 45), 
     ("2023-06-07", 35), ("2023-07-05", 22), ("2023-08-02", 39), ("2023-09-06", 49), ("2023-10-04", 22), 
     ("2023-11-01", 41), ("2023-12-06", 49)]
]

Version information

  • Ubuntu 23.04
  • Rust 1.74 default
  • Plotters 0.3.5 features : datetime

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions