]> pintos-os.org Git - pspp/commitdiff
Improve formatting of axis tick labels.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 9 May 2026 18:44:44 +0000 (11:44 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 9 May 2026 18:44:44 +0000 (11:44 -0700)
rust/doc/src/spv/graphs.md
rust/pspp/src/spv/read/graph.rs
rust/pspp/src/spv/read/graph/format.rs
rust/pspp/src/spv/testdata/graph1.expected.svg
rust/pspp/src/spv/testdata/graph2.expected.svg
rust/pspp/src/spv/testdata/graph3.expected.svg
rust/pspp/src/spv/testdata/graph4.expected.svg

index 40f193a4c95f2fa8da4b199dc1366953cfa84267..6544d9b99bb04b5102d1b543188fcbf964643efa 100644 (file)
@@ -904,3 +904,12 @@ stripes like \ => 2
 stripes like / => 8
 stripes like | => 3
 stripes like - => 9
+
+
+Formatting of axis labels comes from the variable specified on an
+element placed on that axis.  If there is more than one such variable,
+it appears that the variable with the name alphabetically earlier is
+used.  Whether a given variable has a specified format is not
+considered.  The details are muddled; for example, it appears that if
+one of the variables lacks a specified format entirely, then none of
+their formats is used.
index a8603e57ef36dfcca0a21a2c852ee20220de56fc..6f0b9d66e38524e7cdb6891be227333f046cfd0a 100644 (file)
@@ -400,6 +400,7 @@ impl Visualization {
     fn pass<'a>(
         &'a self,
         graph: &'a Graph,
+        locale: &'static Locale<'static>,
         domains: &BTreeMap<&str, Domain>,
         series: &BTreeMap<&str, Series>,
         bin_widths: &mut BTreeMap<String, f64>,
@@ -426,10 +427,15 @@ impl Visualization {
             } else {
                 None
             };
+            let mut formatter = None;
             for element in &elements {
-                if let Some(variable) = &element.variables[axis]
-                    && !element.ignore_minmax[axis]
-                {
+                let Some(variable) = &element.variables[axis] else {
+                    continue;
+                };
+                if formatter.is_none() {
+                    formatter = Some(variable.formatter.clone());
+                }
+                if !element.ignore_minmax[axis] {
                     let domain = domain.get_or_insert_with(|| {
                         if variable.categorical {
                             Domain::new_categorical()
@@ -462,7 +468,6 @@ impl Visualization {
                     }
                 }
             }
-
             let mut domain = domain.unwrap_or_default();
             if let Domain::Interval { min, max, exact } = &mut domain
                 && (!*exact || min.is_none() || max.is_none())
@@ -501,6 +506,7 @@ impl Visualization {
                 .and_then(|dimension| dimension.axis.first());
             axis_domains[axis] = AxisDomain {
                 domain,
+                formatter: formatter.unwrap_or_else(|| Formatter::default_for_locale(locale)),
                 label: axis2.and_then(|axis| axis.label.as_ref()),
                 major_ticks: axis2.and_then(|axis| axis.major_ticks.as_ref()),
             };
@@ -625,6 +631,7 @@ impl Visualization {
             document.append(self.decode_graph(
                 graph_frame,
                 graph,
+                locale,
                 &domains,
                 &series,
                 &style_cycles,
@@ -639,6 +646,7 @@ impl Visualization {
         &self,
         graph_frame: &Frame,
         graph: &Graph,
+        locale: &'static Locale<'static>,
         domains: &BTreeMap<&str, Domain>,
         series: &BTreeMap<&str, Series>,
         style_cycles: &HashMap<&str, &StyleCycle>,
@@ -646,10 +654,12 @@ impl Visualization {
     ) -> Result<svg::node::element::Group, GraphError> {
         let mut graph_svg = Group::new().with_id(&graph.id);
         let mut bin_widths = BTreeMap::new();
-        let mut axis_domains = EnumMap::<Axis3, AxisDomain>::default();
+        let mut axis_domains =
+            EnumMap::<Axis3, AxisDomain>::from_fn(|_| AxisDomain::default_for_locale(locale));
         let mut patterns = Patterns::new();
         self.pass(
             &graph,
+            locale,
             &domains,
             &series,
             &mut bin_widths,
@@ -658,6 +668,7 @@ impl Visualization {
         )?;
         let elements = self.pass(
             &graph,
+            locale,
             &domains,
             &series,
             &mut bin_widths,
@@ -1648,14 +1659,23 @@ impl Variable for DerivedVariable {
     }
 }
 
-#[derive(Clone, Debug, Default)]
+#[derive(Clone, Debug)]
 struct AxisDomain<'a> {
     domain: Domain,
+    formatter: Formatter,
     label: Option<&'a Label>,
     major_ticks: Option<&'a MajorTicks>,
 }
 
 impl<'a> AxisDomain<'a> {
+    fn default_for_locale(locale: &'static Locale<'static>) -> Self {
+        Self {
+            domain: Domain::default(),
+            formatter: Formatter::default_for_locale(locale),
+            label: None,
+            major_ticks: None,
+        }
+    }
     fn ticks(&self) -> Vec<(f64, String)> {
         let mut ticks = Vec::new();
         match &self.domain {
@@ -1664,9 +1684,23 @@ impl<'a> AxisDomain<'a> {
                 max: Some(max),
                 exact: _,
             } => {
-                for x in Scaling::for_range(*min..*max).ticks() {
-                    if let Some(frac) = self.domain.lookup(&Datum::Number(Some(x))) {
-                        ticks.push((frac, format!("{x:.1}")));
+                let scaling = Scaling::for_range(*min..*max);
+                let formatter = match &self.formatter {
+                    Formatter::Number(number_formatter)
+                        if number_formatter.maximum_fraction_digits.is_none() =>
+                    {
+                        Cow::Owned(Formatter::Number(
+                            number_formatter.clone().with_maximum_fraction_digits(Some(
+                                scaling.maximum_fraction_digits(),
+                            )),
+                        ))
+                    }
+                    _ => Cow::Borrowed(&self.formatter),
+                };
+                for x in scaling.ticks() {
+                    let datum = Datum::Number(Some(x));
+                    if let Some(frac) = self.domain.lookup(&datum) {
+                        ticks.push((frac, formatter.display(&datum).to_string()));
                     }
                 }
             }
@@ -1957,6 +1991,7 @@ impl RawDomain for IntervalDomain {
                     }
                 }
             } else {
+                dbg!(variable.reference.as_str());
                 todo!()
             }
         }
@@ -4434,6 +4469,27 @@ impl Scaling {
         }
     }
 
+    pub fn maximum_fraction_digits(&self) -> usize {
+        // Base-10 logarithm of the interval:
+        // 10 => 1
+        // 1 => 0
+        // .1 => -1
+        // .2 => -1
+        // .5 => -1
+        // .01 => -2
+        // .02 => -2
+        // .05 => -2
+        let log10 = (self.interval * 1.01).log10().floor() as isize;
+
+        // 10 => 0
+        // 1 => 0
+        // .1 => 1
+        // .01 => 2
+        let result = (-log10).max(0) as usize;
+        dbg!(self, result);
+        result
+    }
+
     pub fn for_range(range: impl Borrow<Range<f64>>) -> Scaling {
         let range = range.borrow();
         let r = range.end - range.start;
@@ -5022,11 +5078,12 @@ mod tests {
 
     #[test]
     fn scaling() {
-        for (range, (base, interval, n_ticks)) in [
-            (5.5..9.2, (5.0, 1.0, 6)),
-            (0.0..10.0, (0.0, 2.0, 6)),
-            (55.0..92.0, (50.0, 10.0, 6)),
-            (0.0..100.0, (0.0, 20.0, 6)),
+        for (range, (base, interval, n_ticks), maximum_fraction_digits) in [
+            (5.5..9.2, (5.0, 1.0, 6), 0),
+            (0.55..0.92, (0.5, 0.1, 6), 1),
+            (0.0..10.0, (0.0, 2.0, 6), 0),
+            (55.0..92.0, (50.0, 10.0, 6), 0),
+            (0.0..100.0, (0.0, 20.0, 6), 0),
         ] {
             let expected = Scaling::new(base, interval, n_ticks);
             let scaling = Scaling::for_range(&range);
@@ -5036,6 +5093,7 @@ mod tests {
             assert_eq!(scaling.first(), Some(scaling.base));
             assert!(scaling.base <= range.start);
             assert!(scaling.last().unwrap() >= range.end);
+            assert_eq!(scaling.maximum_fraction_digits(), maximum_fraction_digits);
         }
     }
 
index 88bed0865a004ce26dbbd63903c04ea4ea8bffcd..02f8490fbe1244ec0f8c7c5e32acc88522013d37 100644 (file)
@@ -21,7 +21,7 @@ use crate::{
 };
 
 #[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
-enum Negatives {
+pub enum Negatives {
     /// Show negative values with a minus sign.
     #[default]
     Minus,
@@ -49,7 +49,7 @@ impl Negatives {
 }
 
 #[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
-enum NegativeLocation {
+pub enum NegativeLocation {
     /// Show negatives inside the prefix or suffix, e.g. `$-123` or `(55)%`.
     #[default]
     Inside,
@@ -58,7 +58,7 @@ enum NegativeLocation {
 }
 
 #[derive(Copy, Clone, Debug, Default, PartialEq, Deserialize)]
-enum Scientific {
+pub enum Scientific {
     #[default]
     Auto,
     OnlyForSmall(f64),
@@ -96,13 +96,14 @@ enum NumberExpression {
 
 #[derive(Clone, Debug)]
 pub struct NumberFormatter {
-    locale: &'static Locale<'static>,
-    minimum_fraction_digits: Option<usize>,
-    maximum_fraction_digits: Option<usize>,
-    minimum_integer_digits: Option<usize>,
-    maximum_integer_digits: Option<usize>,
-    negatives: Negatives,
-    negative_location: NegativeLocation,
+    pub locale: &'static Locale<'static>,
+
+    pub minimum_fraction_digits: Option<usize>,
+    pub maximum_fraction_digits: Option<usize>,
+    pub minimum_integer_digits: Option<usize>,
+    pub maximum_integer_digits: Option<usize>,
+    pub negatives: Negatives,
+    pub negative_location: NegativeLocation,
 
     /// A number to divide the value by before formatting.
     ///
@@ -111,22 +112,22 @@ pub struct NumberFormatter {
     /// - `scaling_factor` of 1000 with a `suffix` of `thousands`.
     ///
     /// - `scaling_factor` of 1e-6 with a `suffix` of `μ`.
-    scaling_factor: f64,
+    pub scaling_factor: f64,
 
     /// When to use scientific notation.
-    scientific: Scientific,
+    pub scientific: Scientific,
 
     /// Decimal point (commonly `.` or `,`).
-    decimal: char,
+    pub decimal: char,
     /// Grouping character (commonly `,` or `.`), only if grouping is enabled.
-    group: Option<char>,
+    pub group: Option<char>,
     /// For indicating errors (commonly `*`).
-    error: char,
+    pub error: char,
 
     /// Prefix (such as `$`).
-    prefix: String,
+    pub prefix: String,
     /// Suffix (such as `%`).
-    suffix: String,
+    pub suffix: String,
 }
 
 #[derive(Clone, Debug)]
@@ -187,7 +188,7 @@ impl Default for NumberFormatter {
 }
 
 impl NumberFormatter {
-    fn default_for_locale(locale: &'static Locale<'static>) -> Self {
+    pub fn default_for_locale(locale: &'static Locale<'static>) -> Self {
         Self {
             minimum_fraction_digits: None,
             maximum_fraction_digits: None,
@@ -206,7 +207,7 @@ impl NumberFormatter {
         }
     }
 
-    fn new(format: &Format, locale: &'static Locale<'static>) -> Self {
+    pub fn new(format: &Format, locale: &'static Locale<'static>) -> Self {
         Self {
             maximum_fraction_digits: format.maximum_fraction_digits,
             minimum_fraction_digits: format.minimum_fraction_digits,
@@ -252,55 +253,56 @@ impl NumberFormatter {
         }
     }
 
-    fn with_scientific(self, scientific: Scientific) -> Self {
+    pub fn with_scientific(self, scientific: Scientific) -> Self {
         Self { scientific, ..self }
     }
-    fn with_minimum_fraction_digits(self, minimum_fraction_digits: Option<usize>) -> Self {
+    pub fn with_minimum_fraction_digits(self, minimum_fraction_digits: Option<usize>) -> Self {
         Self {
             minimum_fraction_digits,
             ..self
         }
     }
-    fn with_maximum_fraction_digits(self, maximum_fraction_digits: Option<usize>) -> Self {
+    pub fn with_maximum_fraction_digits(self, maximum_fraction_digits: Option<usize>) -> Self {
         Self {
             maximum_fraction_digits,
             ..self
         }
     }
-    fn with_minimum_integer_digits(self, minimum_integer_digits: Option<usize>) -> Self {
+    pub fn with_minimum_integer_digits(self, minimum_integer_digits: Option<usize>) -> Self {
         Self {
             minimum_integer_digits,
             ..self
         }
     }
-    fn with_maximum_integer_digits(self, maximum_integer_digits: Option<usize>) -> Self {
+    pub fn with_maximum_integer_digits(self, maximum_integer_digits: Option<usize>) -> Self {
         Self {
             maximum_integer_digits,
             ..self
         }
     }
-    fn with_negatives(self, negatives: Negatives) -> Self {
+    pub fn with_negatives(self, negatives: Negatives) -> Self {
         Self { negatives, ..self }
     }
-    fn with_negative_location(self, negative_location: NegativeLocation) -> Self {
+    pub fn with_negative_location(self, negative_location: NegativeLocation) -> Self {
         Self {
             negative_location,
             ..self
         }
     }
-    fn with_prefix(self, prefix: impl Into<String>) -> Self {
+    pub fn with_prefix(self, prefix: impl Into<String>) -> Self {
         Self {
             prefix: prefix.into(),
             ..self
         }
     }
-    fn with_suffix(self, suffix: impl Into<String>) -> Self {
+    pub fn with_suffix(self, suffix: impl Into<String>) -> Self {
         Self {
             suffix: suffix.into(),
             ..self
         }
     }
-    fn display<'a>(&'a self, value: &'a Datum<String>) -> DisplayNumberFormatter<'a> {
+
+    pub fn display<'a>(&'a self, value: &'a Datum<String>) -> impl Display {
         DisplayNumberFormatter {
             format: self,
             value,
@@ -337,6 +339,7 @@ impl NumberFormatter {
 
     fn format_decimal(&self, f: &mut std::fmt::Formatter, number: f64) -> std::fmt::Result {
         let body = number.abs().to_small_string();
+        dbg!(number, &body);
         let pn = ParsedNumber::from_decimal(body).unwrap();
         let body;
         let pn = if let Some(maximum_fraction_digits) = self.maximum_fraction_digits
@@ -439,7 +442,7 @@ pub struct DateFormatter {
 }
 
 impl DateFormatter {
-    fn new(format: &Format, locale: &'static Locale<'static>) -> Self {
+    pub fn new(format: &Format, locale: &'static Locale<'static>) -> Self {
         let mut show_date = format.show_era.unwrap_or(false)
             || format.show_year.unwrap_or(false)
             || format.show_quarter.unwrap_or(false)
index 6494e8b6b4f2d4cc4c9939da55630a12d2bb8036..dae403567156b6e3219eb60383946a41ca935a46 100644 (file)
@@ -9,27 +9,27 @@ ROC Curve
 <line stroke="black" x1="61.25" x2="618.75" y1="439" y2="439"/>
 <line stroke="black" x1="61.25" x2="61.25" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="61.25" y="449">
-0.0
+0
 </text>
 <line stroke="black" x1="172.75" x2="172.75" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="172.75" y="449">
-0.2
+0,2
 </text>
 <line stroke="black" x1="284.25" x2="284.25" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="284.25" y="449">
-0.4
+0,4
 </text>
 <line stroke="black" x1="395.75000000000006" x2="395.75000000000006" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="395.75000000000006" y="449">
-0.6
+0,6
 </text>
 <line stroke="black" x1="507.25" x2="507.25" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="507.25" y="449">
-0.8
+0,8
 </text>
 <line stroke="black" x1="618.75" x2="618.75" y1="439" y2="449"/>
 <text dominant-baseline="hanging" text-anchor="middle" x="618.75" y="449">
-1.0
+1
 </text>
 <text dominant-baseline="hanging" text-anchor="middle" x="340" y="472">
 X Axis
@@ -39,27 +39,27 @@ X Axis
 </line>
 <line stroke="black" x1="61.25" x2="51.25" y1="439" y2="439"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="439">
-0.0
+0
 </text>
 <line stroke="black" x1="61.25" x2="51.25" y1="361.40000000000003" y2="361.40000000000003"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="361.40000000000003">
-0.2
+0,2
 </text>
 <line stroke="black" x1="61.25" x2="51.25" y1="283.79999999999995" y2="283.79999999999995"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="283.79999999999995">
-0.4
+0,4
 </text>
 <line stroke="black" x1="61.25" x2="51.25" y1="206.19999999999996" y2="206.19999999999996"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="206.19999999999996">
-0.6
+0,6
 </text>
 <line stroke="black" x1="61.25" x2="51.25" y1="128.59999999999997" y2="128.59999999999997"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="128.59999999999997">
-0.8
+0,8
 </text>
 <line stroke="black" x1="61.25" x2="51.25" y1="51" y2="51"/>
 <text dominant-baseline="middle" text-anchor="end" x="51.25" y="51">
-1.0
+1
 </text>
 <text dominant-baseline="hanging" text-anchor="middle" transform="rotate(-90, 6.25, 245)" x="6.25" y="245">
 Y Axis
index 24dad4c95c55ed37fe5593e856b6703cb2864f2c..a1d6d25b29490e1f5ced384c1b8a8662deaf4e4d 100644 (file)
 Title
 </text>
 <g id="graph_11559">
-<line stroke="black" x1="41" x2="167.9999935913086" y1="95.20000000000002" y2="95.20000000000002"/>
-<line stroke="black" x1="77.95712236069218" x2="77.95712236069218" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="77.95712236069218" y="105.20000000000002">
-10.0
+<line stroke="black" x1="28" x2="167.9999935913086" y1="95.20000000000002" y2="95.20000000000002"/>
+<line stroke="black" x1="68.7401350767013" x2="68.7401350767013" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="68.7401350767013" y="105.20000000000002">
+10
 </text>
-<line stroke="black" x1="129.71779793589133" x2="129.71779793589133" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="129.71779793589133" y="105.20000000000002">
-15.0
+<line stroke="black" x1="125.79914778916813" x2="125.79914778916813" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="125.79914778916813" y="105.20000000000002">
+15
 </text>
-<text dominant-baseline="hanging" text-anchor="middle" x="104.4999967956543" y="128.20000000000002">
+<text dominant-baseline="hanging" text-anchor="middle" x="97.9999967956543" y="128.20000000000002">
 V2
 </text>
-<line stroke="black" x1="41" x2="41" y1="0" y2="95.20000000000002">
+<line stroke="black" x1="28" x2="28" y1="0" y2="95.20000000000002">
 <!-- Y axis 0 -->
 </line>
-<line stroke="black" x1="41" x2="31" y1="95.20000000000002" y2="95.20000000000002"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="95.20000000000002">
-0.0
+<line stroke="black" x1="28" x2="18" y1="95.20000000000002" y2="95.20000000000002"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="95.20000000000002">
+0
 </text>
-<line stroke="black" x1="41" x2="31" y1="79.58720000000001" y2="79.58720000000001"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="79.58720000000001">
-10.0
+<line stroke="black" x1="28" x2="18" y1="79.58720000000001" y2="79.58720000000001"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="79.58720000000001">
+10
 </text>
-<line stroke="black" x1="41" x2="31" y1="63.9744" y2="63.9744"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="63.9744">
-20.0
+<line stroke="black" x1="28" x2="18" y1="63.9744" y2="63.9744"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="63.9744">
+20
 </text>
-<line stroke="black" x1="41" x2="31" y1="48.36160000000001" y2="48.36160000000001"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="48.36160000000001">
-30.0
+<line stroke="black" x1="28" x2="18" y1="48.36160000000001" y2="48.36160000000001"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="48.36160000000001">
+30
 </text>
-<line stroke="black" x1="41" x2="31" y1="32.7488" y2="32.7488"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="32.7488">
-40.0
+<line stroke="black" x1="28" x2="18" y1="32.7488" y2="32.7488"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="32.7488">
+40
 </text>
-<line stroke="black" x1="41" x2="31" y1="17.136000000000006" y2="17.136000000000006"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="17.136000000000006">
-50.0
+<line stroke="black" x1="28" x2="18" y1="17.136000000000006" y2="17.136000000000006"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="17.136000000000006">
+50
 </text>
-<line stroke="black" x1="41" x2="31" y1="1.5232000000000017" y2="1.5232000000000017"/>
-<text dominant-baseline="middle" text-anchor="end" x="31" y="1.5232000000000017">
-60.0
+<line stroke="black" x1="28" x2="18" y1="1.5232000000000017" y2="1.5232000000000017"/>
+<text dominant-baseline="middle" text-anchor="end" x="18" y="1.5232000000000017">
+60
 </text>
 <g id="area_11560">
-<polygon fill="#f5f5f5" points="44.174999839782714 95.20000000000002 44.174999839782714 51.93561445783134 50.52499951934814 74.5083373493976 56.87499919891357 87.6757590361446 63.224998878478985 91.43787951807231 69.57499855804444 93.31893975903617 75.92499823760986 93.31893975903617 107.674996635437 93.31893975903617 114.02499631500243 93.31893975903617 120.37499599456787 83.91363855421689 126.7249956741333 48.17349397590362 133.0749953536987 87.6757590361446 139.42499503326417 91.43787951807231 158.47499407196045 91.43787951807231 158.47499407196045 95.20000000000002" stroke="#000000"/>
+<polygon fill="#f5f5f5" points="31.499999839782717 95.20000000000002 31.499999839782717 51.93561445783134 38.49999951934814 74.5083373493976 45.49999919891357 87.6757590361446 52.49999887847899 91.43787951807231 59.49999855804444 93.31893975903617 66.49999823760986 93.31893975903617 101.499996635437 93.31893975903617 108.49999631500242 93.31893975903617 115.49999599456787 83.91363855421689 122.49999567413329 48.17349397590362 129.4999953536987 87.6757590361446 136.49999503326416 91.43787951807231 157.49999407196043 91.43787951807231 157.49999407196043 95.20000000000002" stroke="#000000"/>
 </g>
 <g id="area_11564">
-<polygon fill="#0000ff" points="107.674996635437 95.20000000000002 107.674996635437 91.39200000000001 114.02499631500243 91.39200000000001 120.37499599456787 72.35200000000002 126.7249956741333 0 133.0749953536987 79.96800000000002 139.42499503326417 87.58400000000002 158.47499407196045 87.58400000000002 158.47499407196045 95.20000000000002" stroke="#000000"/>
+<polygon fill="#0000ff" points="101.499996635437 95.20000000000002 101.499996635437 91.39200000000001 108.49999631500242 91.39200000000001 115.49999599456787 72.35200000000002 122.49999567413329 0 129.4999953536987 79.96800000000002 136.49999503326416 87.58400000000002 157.49999407196043 87.58400000000002 157.49999407196043 95.20000000000002" stroke="#000000"/>
 </g>
 </g>
 <g id="graph_11578">
-<line stroke="black" x1="208.9999935913086" x2="335.9999871826172" y1="95.20000000000002" y2="95.20000000000002"/>
-<line stroke="black" x1="219.58332639058548" x2="219.58332639058548" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="219.58332639058548" y="105.20000000000002">
-0.6
+<line stroke="black" x1="195.9999935913086" x2="335.9999871826172" y1="95.20000000000002" y2="95.20000000000002"/>
+<line stroke="black" x1="207.66665972391894" x2="207.66665972391894" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="207.66665972391894" y="105.20000000000002">
+0.575
 </text>
-<line stroke="black" x1="272.49999038696404" x2="272.49999038696404" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="272.49999038696404" y="105.20000000000002">
-0.6
+<line stroke="black" x1="265.9999903869642" x2="265.9999903869642" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="265.9999903869642" y="105.20000000000002">
+0.58
 </text>
-<line stroke="black" x1="325.4166543833427" x2="325.4166543833427" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="325.4166543833427" y="105.20000000000002">
-0.6
+<line stroke="black" x1="324.33332105000943" x2="324.33332105000943" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="324.33332105000943" y="105.20000000000002">
+0.585
 </text>
-<text dominant-baseline="hanging" text-anchor="middle" x="272.4999903869629" y="128.20000000000002">
+<text dominant-baseline="hanging" text-anchor="middle" x="265.9999903869629" y="128.20000000000002">
 V1
 </text>
-<line stroke="black" x1="208.9999935913086" x2="208.9999935913086" y1="0" y2="95.20000000000002">
+<line stroke="black" x1="195.9999935913086" x2="195.9999935913086" y1="0" y2="95.20000000000002">
 <!-- Y axis 0 -->
 </line>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="95.20000000000002" y2="95.20000000000002"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="95.20000000000002">
-0.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="95.20000000000002" y2="95.20000000000002"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="95.20000000000002">
+0
 </text>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="76.16000000000001" y2="76.16000000000001"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="76.16000000000001">
-10.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="76.16000000000001" y2="76.16000000000001"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="76.16000000000001">
+10
 </text>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="57.12000000000001" y2="57.12000000000001"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="57.12000000000001">
-20.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="57.12000000000001" y2="57.12000000000001"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="57.12000000000001">
+20
 </text>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="38.080000000000005" y2="38.080000000000005"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="38.080000000000005">
-30.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="38.080000000000005" y2="38.080000000000005"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="38.080000000000005">
+30
 </text>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="19.04" y2="19.04"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="19.04">
-40.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="19.04" y2="19.04"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="19.04">
+40
 </text>
-<line stroke="black" x1="208.9999935913086" x2="198.9999935913086" y1="0" y2="0"/>
-<text dominant-baseline="middle" text-anchor="end" x="198.9999935913086" y="0">
-50.0
+<line stroke="black" x1="195.9999935913086" x2="185.9999935913086" y1="0" y2="0"/>
+<text dominant-baseline="middle" text-anchor="end" x="185.9999935913086" y="0">
+50
 </text>
 <g id="area_11579">
-<polygon fill="#f5f5f5" points="212.17499343109097 95.20000000000002 212.17499343109097 92.75897435897437 231.22499246978748 82.99487179487181 243.9249918289181 85.43589743589746 250.274991508484 87.87692307692309 262.9749908676146 92.75897435897437 275.67499022674525 92.75897435897437 282.02498990631113 82.99487179487181 294.72498926544176 90.31794871794872 307.4249886245724 75.67179487179489 313.77498830413833 0 326.4749876632689 73.23076923076925 326.4749876632689 95.20000000000002" stroke="#000000"/>
+<polygon fill="#f5f5f5" points="199.49999343109093 95.20000000000002 199.49999343109093 92.75897435897437 220.49999246978746 82.99487179487181 234.49999182891807 85.43589743589746 241.49999150848402 87.87692307692309 255.49999086761463 92.75897435897437 269.49999022674524 92.75897435897437 276.49998990631116 82.99487179487181 290.49998926544174 90.31794871794872 304.4999886245724 75.67179487179489 311.4999883041383 0 325.49998766326894 73.23076923076925 325.49998766326894 95.20000000000002" stroke="#000000"/>
 </g>
 <g id="area_11583">
-<polygon fill="#0000ff" points="212.17499343109097 95.20000000000002 212.17499343109097 89.91111111111113 231.22499246978748 68.75555555555556 243.9249918289181 74.04444444444447 250.274991508484 79.33333333333336 262.9749908676146 89.91111111111113 275.67499022674525 89.91111111111113 282.02498990631113 74.04444444444447 307.4249886245724 79.33333333333336 313.77498830413833 63.46666666666668 326.4749876632689 52.8888888888889 326.4749876632689 95.20000000000002" stroke="#000000"/>
+<polygon fill="#0000ff" points="199.49999343109093 95.20000000000002 199.49999343109093 89.91111111111113 220.49999246978746 68.75555555555556 234.49999182891807 74.04444444444447 241.49999150848402 79.33333333333336 255.49999086761463 89.91111111111113 269.49999022674524 89.91111111111113 276.49998990631116 74.04444444444447 304.4999886245724 79.33333333333336 311.4999883041383 63.46666666666668 325.49998766326894 52.8888888888889 325.49998766326894 95.20000000000002" stroke="#000000"/>
 </g>
 </g>
 <g id="graph_11597">
-<line stroke="black" x1="376.9999871826172" x2="504" y1="95.20000000000002" y2="95.20000000000002"/>
-<line stroke="black" x1="390.3282374566248" x2="390.3282374566248" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="390.3282374566248" y="105.20000000000002">
-30.0
+<line stroke="black" x1="363.9999871826172" x2="504" y1="95.20000000000002" y2="95.20000000000002"/>
+<line stroke="black" x1="378.692546402099" x2="378.692546402099" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="378.692546402099" y="105.20000000000002">
+30
 </text>
-<line stroke="black" x1="432.5481324001404" x2="432.5481324001404" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="432.5481324001404" y="105.20000000000002">
-35.0
+<line stroke="black" x1="425.23416243909924" x2="425.23416243909924" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="425.23416243909924" y="105.20000000000002">
+35
 </text>
-<line stroke="black" x1="474.76802734365594" x2="474.76802734365594" y1="95.20000000000002" y2="105.20000000000002"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="474.76802734365594" y="105.20000000000002">
-40.0
+<line stroke="black" x1="471.7757784760995" x2="471.7757784760995" y1="95.20000000000002" y2="105.20000000000002"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="471.7757784760995" y="105.20000000000002">
+40
 </text>
-<text dominant-baseline="hanging" text-anchor="middle" x="440.49999359130857" y="128.20000000000002">
+<text dominant-baseline="hanging" text-anchor="middle" x="433.99999359130857" y="128.20000000000002">
 V3
 </text>
-<line stroke="black" x1="376.9999871826172" x2="376.9999871826172" y1="0" y2="95.20000000000002">
+<line stroke="black" x1="363.9999871826172" x2="363.9999871826172" y1="0" y2="95.20000000000002">
 <!-- Y axis 0 -->
 </line>
-<line stroke="black" x1="376.9999871826172" x2="366.9999871826172" y1="95.20000000000002" y2="95.20000000000002"/>
-<text dominant-baseline="middle" text-anchor="end" x="366.9999871826172" y="95.20000000000002">
-0.0
+<line stroke="black" x1="363.9999871826172" x2="353.9999871826172" y1="95.20000000000002" y2="95.20000000000002"/>
+<text dominant-baseline="middle" text-anchor="end" x="353.9999871826172" y="95.20000000000002">
+0
 </text>
-<line stroke="black" x1="376.9999871826172" x2="366.9999871826172" y1="65.17538461538463" y2="65.17538461538463"/>
-<text dominant-baseline="middle" text-anchor="end" x="366.9999871826172" y="65.17538461538463">
-10.0
+<line stroke="black" x1="363.9999871826172" x2="353.9999871826172" y1="65.17538461538463" y2="65.17538461538463"/>
+<text dominant-baseline="middle" text-anchor="end" x="353.9999871826172" y="65.17538461538463">
+10
 </text>
-<line stroke="black" x1="376.9999871826172" x2="366.9999871826172" y1="35.15076923076924" y2="35.15076923076924"/>
-<text dominant-baseline="middle" text-anchor="end" x="366.9999871826172" y="35.15076923076924">
-20.0
+<line stroke="black" x1="363.9999871826172" x2="353.9999871826172" y1="35.15076923076924" y2="35.15076923076924"/>
+<text dominant-baseline="middle" text-anchor="end" x="353.9999871826172" y="35.15076923076924">
+20
 </text>
-<line stroke="black" x1="376.9999871826172" x2="366.9999871826172" y1="5.12615384615385" y2="5.12615384615385"/>
-<text dominant-baseline="middle" text-anchor="end" x="366.9999871826172" y="5.12615384615385">
-30.0
+<line stroke="black" x1="363.9999871826172" x2="353.9999871826172" y1="5.12615384615385" y2="5.12615384615385"/>
+<text dominant-baseline="middle" text-anchor="end" x="353.9999871826172" y="5.12615384615385">
+30
 </text>
 <g id="area_11598">
-<polygon fill="#f5f5f5" points="380.17498750305174 95.20000000000002 380.17498750305174 87.9651529193698 392.87498878479005 91.58257645968492 399.2249894256592 66.26061167747916 405.5749900665283 33.7037998146432 411.92499070739746 22.851529193697868 418.2749913482666 48.17349397590362 424.62499198913576 59.025764596848944 430.97499263000486 66.26061167747916 437.324993270874 91.58257645968492 450.02499455261227 91.58257645968492 469.07499647521973 91.58257645968492 488.12499839782714 91.58257645968492 488.12499839782714 95.20000000000002" stroke="#000000"/>
+<polygon fill="#f5f5f5" points="367.4999875030518 95.20000000000002 367.4999875030518 87.9651529193698 381.49998878479005 91.58257645968492 388.4999894256592 66.26061167747916 395.4999900665283 33.7037998146432 402.49999070739744 22.851529193697868 409.4999913482666 48.17349397590362 416.49999198913576 59.025764596848944 423.4999926300049 66.26061167747916 430.49999327087403 91.58257645968492 444.4999945526123 91.58257645968492 465.49999647521975 91.58257645968492 486.49999839782714 91.58257645968492 486.49999839782714 95.20000000000002" stroke="#000000"/>
 </g>
 <g id="area_11602">
-<polygon fill="#0000ff" points="399.2249894256592 95.20000000000002 399.2249894256592 51.26153846153848 405.5749900665283 0 411.92499070739746 14.646153846153839 418.2749913482666 43.93846153846154 424.62499198913576 80.55384615384617 469.07499647521973 87.87692307692309 488.12499839782714 87.87692307692309 488.12499839782714 95.20000000000002" stroke="#000000"/>
+<polygon fill="#0000ff" points="388.4999894256592 95.20000000000002 388.4999894256592 51.26153846153848 395.4999900665283 0 402.49999070739744 14.646153846153839 409.4999913482666 43.93846153846154 416.49999198913576 80.55384615384617 465.49999647521975 87.87692307692309 486.49999839782714 87.87692307692309 486.49999839782714 95.20000000000002" stroke="#000000"/>
 </g>
 </g>
 </svg>
index 47a964691a5635a995dd2bdaee7aef0dd8fdaa5a..866c0e657224e7ec830dde8fb4cbd879ada68517 100644 (file)
@@ -1,70 +1,70 @@
 <svg height="500" style="font-family: &quot;Sans Serif&quot;" viewBox="0 0 625 500" width="625" xmlns="http://www.w3.org/2000/svg">
 <g id="frame_data_1">
-<line stroke="black" x1="70.25" x2="618.75" y1="439" y2="439"/>
-<line stroke="black" x1="207.375" x2="207.375" y1="439" y2="449"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="207.375" y="449">
+<line stroke="black" x1="83.25" x2="618.75" y1="439" y2="439"/>
+<line stroke="black" x1="217.125" x2="217.125" y1="439" y2="449"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="217.125" y="449">
 Value0
 </text>
-<line stroke="black" x1="481.625" x2="481.625" y1="439" y2="449"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="481.625" y="449">
+<line stroke="black" x1="484.875" x2="484.875" y1="439" y2="449"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="484.875" y="449">
 Value1
 </text>
-<text dominant-baseline="hanging" text-anchor="middle" x="344.5" y="472">
+<text dominant-baseline="hanging" text-anchor="middle" x="351" y="472">
 V0
 </text>
-<line stroke="black" x1="70.25" x2="70.25" y1="5" y2="219.5">
+<line stroke="black" x1="83.25" x2="83.25" y1="5" y2="219.5">
 <!-- Y axis 0 -->
 </line>
-<line stroke="black" x1="70.25" x2="60.25" y1="219.5" y2="219.5"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="219.5">
-0.0
+<line stroke="black" x1="83.25" x2="73.25" y1="219.5" y2="219.5"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="219.5">
+.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="164.9174107142857" y2="164.9174107142857"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="164.9174107142857">
-10.0
+<line stroke="black" x1="83.25" x2="73.25" y1="164.9174107142857" y2="164.9174107142857"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="164.9174107142857">
+10.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="110.33482142857142" y2="110.33482142857142"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="110.33482142857142">
-20.0
+<line stroke="black" x1="83.25" x2="73.25" y1="110.33482142857142" y2="110.33482142857142"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="110.33482142857142">
+20.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="55.75223214285713" y2="55.75223214285713"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="55.75223214285713">
-30.0
+<line stroke="black" x1="83.25" x2="73.25" y1="55.75223214285713" y2="55.75223214285713"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="55.75223214285713">
+30.0%
 </text>
 <text dominant-baseline="hanging" text-anchor="middle" transform="rotate(-90, 6.25, 112.25)" x="6.25" y="112.25">
 Percent
 </text>
-<line stroke="black" x1="70.25" x2="70.25" y1="224.5" y2="439">
+<line stroke="black" x1="83.25" x2="83.25" y1="224.5" y2="439">
 <!-- Y axis 1 -->
 </line>
-<line stroke="black" x1="70.25" x2="60.25" y1="439" y2="439"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="439">
-0.0
+<line stroke="black" x1="83.25" x2="73.25" y1="439" y2="439"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="439">
+.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="384.41741071428567" y2="384.41741071428567"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="384.41741071428567">
-10.0
+<line stroke="black" x1="83.25" x2="73.25" y1="384.41741071428567" y2="384.41741071428567"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="384.41741071428567">
+10.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="329.83482142857144" y2="329.83482142857144"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="329.83482142857144">
-20.0
+<line stroke="black" x1="83.25" x2="73.25" y1="329.83482142857144" y2="329.83482142857144"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="329.83482142857144">
+20.0%
 </text>
-<line stroke="black" x1="70.25" x2="60.25" y1="275.2522321428571" y2="275.2522321428571"/>
-<text dominant-baseline="middle" text-anchor="end" x="60.25" y="275.2522321428571">
-30.0
+<line stroke="black" x1="83.25" x2="73.25" y1="275.2522321428571" y2="275.2522321428571"/>
+<text dominant-baseline="middle" text-anchor="end" x="73.25" y="275.2522321428571">
+30.0%
 </text>
 <text dominant-baseline="hanging" text-anchor="middle" transform="rotate(-90, 6.25, 331.75)" x="6.25" y="331.75">
 Percent
 </text>
-<rect fill="#f0f0f0" height="214.5" stroke="#000000" width="548.5" x="70.25" y="5"/>
+<rect fill="#f0f0f0" height="214.5" stroke="#000000" width="535.5" x="83.25" y="5"/>
 <g id="element_bar_1">
-<rect fill="url(#pattern12_d3ce97_000000)" height="92.56696428571429" stroke="#000000" width="205.6875" x="104.53125" y="126.93303571428571"/>
-<rect fill="url(#pattern12_d3ce97_000000)" height="204.2857142857143" stroke="#000000" width="205.6875" x="378.78125" y="15.214285714285701"/>
+<rect fill="url(#pattern12_d3ce97_000000)" height="92.56696428571429" stroke="#000000" width="200.8125" x="116.71875" y="126.93303571428571"/>
+<rect fill="url(#pattern12_d3ce97_000000)" height="204.2857142857143" stroke="#000000" width="200.8125" x="384.46875" y="15.214285714285701"/>
 </g>
-<rect fill="#f0f0f0" height="214.5" stroke="#000000" width="548.5" x="70.25" y="224.5"/>
+<rect fill="#f0f0f0" height="214.5" stroke="#000000" width="535.5" x="83.25" y="224.5"/>
 <g id="element_bar_1">
-<rect fill="url(#pattern12_d3ce97_000000)" height="121.29464285714289" stroke="#000000" width="205.6875" x="104.53125" y="317.7053571428571"/>
-<rect fill="url(#pattern12_d3ce97_000000)" height="127.67857142857144" stroke="#000000" width="205.6875" x="378.78125" y="311.32142857142856"/>
+<rect fill="url(#pattern12_d3ce97_000000)" height="121.29464285714289" stroke="#000000" width="200.8125" x="116.71875" y="317.7053571428571"/>
+<rect fill="url(#pattern12_d3ce97_000000)" height="127.67857142857144" stroke="#000000" width="200.8125" x="384.46875" y="311.32142857142856"/>
 </g>
 <defs>
 <pattern fill="#d3ce97" height="8" id="pattern12_d3ce97_000000" patternUnits="userSpaceOnUse" width="8">
index 2d277fd075f63f74474bba3a5219ada4e718a6f0..b8c23486d67b645a85041fa7b238f7f3c5a1dde3 100644 (file)
@@ -1,52 +1,52 @@
 <svg height="500" style="font-family: &quot;Sans Serif&quot;" viewBox="0 0 625 500" width="625" xmlns="http://www.w3.org/2000/svg">
 <g id="frame_pie_1">
-<line stroke="black" x1="38.25" x2="468.75" y1="462" y2="462"/>
-<line stroke="black" x1="38.25" x2="38.25" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="38.25" y="472">
-0.0
+<line stroke="black" x1="25.25" x2="468.75" y1="462" y2="462"/>
+<line stroke="black" x1="25.25" x2="25.25" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="25.25" y="472">
+0
 </text>
-<line stroke="black" x1="117.40645161290323" x2="117.40645161290323" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="117.40645161290323" y="472">
-10.0
+<line stroke="black" x1="106.79677419354839" x2="106.79677419354839" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="106.79677419354839" y="472">
+10
 </text>
-<line stroke="black" x1="196.56290322580645" x2="196.56290322580645" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="196.56290322580645" y="472">
-20.0
+<line stroke="black" x1="188.34354838709677" x2="188.34354838709677" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="188.34354838709677" y="472">
+20
 </text>
-<line stroke="black" x1="275.7193548387097" x2="275.7193548387097" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="275.7193548387097" y="472">
-30.0
+<line stroke="black" x1="269.89032258064515" x2="269.89032258064515" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="269.89032258064515" y="472">
+30
 </text>
-<line stroke="black" x1="354.8758064516129" x2="354.8758064516129" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="354.8758064516129" y="472">
-40.0
+<line stroke="black" x1="351.43709677419355" x2="351.43709677419355" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="351.43709677419355" y="472">
+40
 </text>
-<line stroke="black" x1="434.03225806451616" x2="434.03225806451616" y1="462" y2="472"/>
-<text dominant-baseline="hanging" text-anchor="middle" x="434.03225806451616" y="472">
-50.0
+<line stroke="black" x1="432.98387096774195" x2="432.98387096774195" y1="462" y2="472"/>
+<text dominant-baseline="hanging" text-anchor="middle" x="432.98387096774195" y="472">
+50
 </text>
-<line stroke="black" x1="38.25" x2="38.25" y1="5" y2="231">
+<line stroke="black" x1="25.25" x2="25.25" y1="5" y2="231">
 <!-- Y axis 0 -->
 </line>
-<line stroke="black" x1="38.25" x2="28.25" y1="NaN" y2="NaN"/>
-<text dominant-baseline="middle" text-anchor="end" x="28.25" y="NaN">
-0.0
+<line stroke="black" x1="25.25" x2="15.25" y1="NaN" y2="NaN"/>
+<text dominant-baseline="middle" text-anchor="end" x="15.25" y="NaN">
+0
 </text>
-<line stroke="black" x1="38.25" x2="38.25" y1="236" y2="462">
+<line stroke="black" x1="25.25" x2="25.25" y1="236" y2="462">
 <!-- Y axis 1 -->
 </line>
-<line stroke="black" x1="38.25" x2="28.25" y1="NaN" y2="NaN"/>
-<text dominant-baseline="middle" text-anchor="end" x="28.25" y="NaN">
-0.0
+<line stroke="black" x1="25.25" x2="15.25" y1="NaN" y2="NaN"/>
+<text dominant-baseline="middle" text-anchor="end" x="15.25" y="NaN">
+0
 </text>
-<rect fill="rgb(0, 0, 0, 0.00)" height="226" stroke="rgb(0, 0, 0, 0.00)" width="430.5" x="38.25" y="5"/>
+<rect fill="rgb(0, 0, 0, 0.00)" height="226" stroke="rgb(0, 0, 0, 0.00)" width="443.5" x="25.25" y="5"/>
 <g id="element_element_1">
-<rect fill="#3e58ac" height="113" stroke="#000000" width="1" x="246.55645161290323" y="118"/>
+<rect fill="#3e58ac" height="113" stroke="#000000" width="1" x="239.84677419354838" y="118"/>
 </g>
 <g id="element_element_1">
-<rect fill="#2eb848" height="113" stroke="#000000" width="1" x="191.00806451612905" y="118"/>
+<rect fill="#2eb848" height="113" stroke="#000000" width="1" x="182.62096774193552" y="118"/>
 </g>
-<rect fill="rgb(0, 0, 0, 0.00)" height="226" stroke="rgb(0, 0, 0, 0.00)" width="430.5" x="38.25" y="236"/>
+<rect fill="rgb(0, 0, 0, 0.00)" height="226" stroke="rgb(0, 0, 0, 0.00)" width="443.5" x="25.25" y="236"/>
 <g id="element_element_1">
 <rect fill="#2eb848" height="113" stroke="#000000" width="1" x="468.75" y="349"/>
 </g>