1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
// See https://en.wikipedia.org/wiki/Block_Elements //static H_CHARS: [char; 9] = [' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█']; static V_CHARS: [char; 9] = [' ', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']; /// will panic if counts aren't consistent with the max or /// if the max is 0. /// Use full height only if you don't need to keep a margin with /// le line above pub fn histo_line( counts: &[u64], max: u64, full_height: bool, ) -> String { let mut h = String::new(); let m = if full_height { 8f32 } else { 7f32 }; for &c in counts { if max == 0 { // I lied: it doesn't panic h.push(V_CHARS[0]); } else { let idx = (m * (c as f32) / (max as f32)).round() as usize; h.push(V_CHARS[idx]); } } h }