MCPcopy Index your code
hub / github.com/askanium/rustplotlib / rescale

Method rescale

src/scales/band.rs:89–140  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

87 }
88
89 fn rescale(&mut self) {
90 let n = self.domain.len();
91 let r0 = self.range[0];
92 let r1 = self.range[1];
93 let reverse = r1 < r0;
94 let mut start = r0 as f32;
95 let mut stop = r1 as f32;
96
97 if reverse {
98 self.range = vec![r1, r0];
99 start = r1 as f32;
100 stop = r0 as f32;
101 }
102
103 let step_denominator = {
104 let computed_step = n as f32 - self.padding_inner + self.padding_outer * 2f32;
105 if computed_step > 1f32 {
106 computed_step
107 } else {
108 1f32
109 }
110 };
111 self.step = (stop - start) / step_denominator;
112
113 // TODO implement rounding of step, start and bandwidth values if specified by user.
114
115 start += (stop - start - self.step * (n as f32 - self.padding_inner)) * self.align;
116
117 self.bandwidth = self.step * (1f32 - self.padding_inner);
118
119 self.offsets.clear();
120 for i in 0..n {
121 self.offsets.push(start + self.step * i as f32);
122 }
123
124 if reverse {
125 self.offsets.reverse();
126 }
127
128 self.index.clear();
129 let mut processed_domains = Vec::new();
130 for domain in self.domain.iter() {
131 // Check for already existing keys to remove any duplicates in the domain vector.
132 if !self.index.contains_key(domain) {
133 self.index.insert(domain.clone(), processed_domains.len());
134 processed_domains.push(domain.clone());
135 }
136 }
137 // Re-assign domains with any duplicates removed.
138 self.domain.clear();
139 self.domain = processed_domains;
140 }
141}
142
143impl Scale<String> for ScaleBand {

Callers 4

set_inner_paddingMethod · 0.80
set_outer_paddingMethod · 0.80
set_domainMethod · 0.80
set_rangeMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected