37 releases

0.10.1 Sep 23, 2024
0.10.0 Jul 24, 2024
0.9.3 May 15, 2024
0.8.3 Oct 4, 2023
0.6.0 Mar 22, 2023

#290 in Text processing

31 downloads per month

MIT license

155KB
2.5K SLoC

Ascii Graph

Draw beautiful graphs in ascii art!

Showcase

use asciigraph::*;
use hmath::Ratio;

fn main() {
    let mut g1 = Graph::default();

    g1.set_1d_data(&vec![0, 1, 1, 0, 2, 0, 1, 2, 0, 0, 0, 1, 0, 1000])
    .set_y_min(-1)
    .set_y_max(3)
    .set_plot_height(20)
    .set_block_width(3)
    .set_y_label_margin(1)
    .set_title("HEllo World!123123123")
    .set_paddings([1;4])
    .set_big_title(true)
    .set_x_axis_label("x_axis_label\nxz")
    .set_y_axis_label("y_axis_label\nyy");

    println!("{g1}");

    let mut g2 = Graph::default();
    g2.set_1d_data(&vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
    .set_plot_height(4)
    .set_y_min("0.0")
    .set_y_max(16.0)
    .set_block_width(3)
    .set_y_label_margin(1);

    println!("{g2}");

    let mut g3 = Graph::default();
    g3.set_1d_data::<u32>(&vec![1])
    .set_block_width(12);

    println!("{g3}");

    let mut g4 = Graph::default();
    g4.set_1d_data(
        &vec![
            vec![32; 1024],
            vec![16, 1024],
            vec![32; 1024],
        ].concat()
    );

    println!("{g4}");

    let mut g5 = Graph::default();
    g5.set_1d_data(&vec![1001, 1002, 1003, 1004, 1003, 1002, 1001, 1, 2, 3, 1000, 1006]);

    println!("{g5}");

    let mut g6 = Graph::new(52, 26);
    g6.set_2d_data_high_resolution(
        &(0..(52usize * 104)).map(
            |i| (i / 52, i % 52)
        ).filter(
            |(x, y)| {
                let d = x.abs_diff(52) * x.abs_diff(52) + y.abs_diff(26) * y.abs_diff(26) * 4;

                1200 < d && d < 2000
            }
        ).collect::<Vec<_>>(),
        &vec![None; 52],
        &vec![None; 26],
    );

    println!("{g6}");

    let mut g7 = Graph::new(24, 24);
    g7.set_block_width(5);
    g7.set_1d_data(
        &vec![0, 0, 0, 5000, 0, 0, 0, 7000, 0]
    );

    let mut g8 = Graph::new(24, 24);
    g8.set_block_width(5);
    g8.set_skip_range(SkipValue::none());
    g8.set_1d_data(
        &vec![0, 0, 0, 5000, 0, 0, 0, 7000, 0]
    );

    println!("{}", merge_horiz(
        &g7.to_string(),
        &g8.to_string(),
        ColorMode::None,
        Alignment::First,
        2,
    ));

    let mut g9 = Graph::new(24, 24);
    g9.set_block_width(5)
    .set_1d_data(
        &vec![
            0, 0, 0,
            60000,
            0, 0, 0,
            50000,
            0, 0,
            1200, 1500,
            0, 400
        ]
    )
    .set_y_min(0)
    .set_pretty_y(50);

    println!("{g9}");

    let mut g10 = Graph::new(72, 24);
    g10.set_1d_labeled_data(
        &(0..62832).map(
            |i| {
                let x = i as f64 / 10000.0;
                let y = x.sin();

                (x.to_string(), Ratio::try_from(y).unwrap())
            }
        ).collect::<Vec<_>>()
    )
    .set_y_max("1.2")
    .set_y_min("-1.2")
    .add_labeled_interval(0, 31415, "first pi")
    .add_labeled_interval(31416, 62831, "second pi")
    .add_labeled_interval(0, 62831, "two pi")
    .add_labeled_interval(0, 3000, "small interval")
    .add_labeled_interval(1200, 9000, "small interval2");

    println!("{g10}");

    let mut g11 = Graph::new(72, 24);
    g11.set_1d_labeled_data(&vec![
        ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0),
        ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0),
        ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0),
        ("five".to_string(), 5), ("nine".to_string(), 9), ("four".to_string(), 4), ("ten".to_string(), 10),
        ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0), ("zero".to_string(), 0),
    ])
    .set_title("hello")
    .set_skip_range(SkipValue::None)
    .set_horizontal_break(12, 36);

    println!("{g11}");
}
                                                                            
 ▌ ▐ ▛▀▀ ▜▌ ▜▌        ▌ ▐        ▜▌   ▐ ▐▌ ▟▌ ▞▀▚ ▞▀▚ ▟▌ ▞▀▚ ▞▀▚ ▟▌ ▞▀▚ ▞▀▚ 
 ▛▀▜ ▛▀▀ ▐▌ ▐▌ ▞▀▚    ▌▄▐ ▞▀▚ ▄▄ ▐▌ ▞▀▜ ▐▌ ▐▌   ▞  ▝▌ ▐▌   ▞  ▝▌ ▐▌   ▞  ▝▌ 
 ▌ ▐ ▙▄▄ ▐▙ ▐▙ ▚▄▞    ▛ ▜ ▚▄▞ ▌  ▐▙ ▚▄▟ ▗▖ ▟▙ ▗▙▄ ▚▄▞ ▟▙ ▗▙▄ ▚▄▞ ▟▙ ▗▙▄ ▚▄▞ 
                                                                            
                                                                            
         y_axis_label                                                       
         yy                                                                 
            3^^^                    
          2.8│                                       ███                    
          2.6│                                       ███                    
          2.4│                                       ███                    
          2.2│                                       ███                    
            2│            ███      ███               ███                    
          1.8│            ███      ███               ███                    
          1.6│            ███      ███               ███                    
          1.4│            ███      ███               ███                    
          1.2│            ███      ███               ███                    
            1│   ██████   ███   ██████         ███   ███                    
          0.8│   ██████   ███   ██████         ███   ███                    
          0.6│   ██████   ███   ██████         ███   ███                    
          0.4│   ██████   ███   ██████         ███   ███                    
          0.2│   ██████   ███   ██████         ███   ███                    
            0│██████████████████████████████████████████                    
         -0.2│██████████████████████████████████████████                    
         -0.4│██████████████████████████████████████████                    
         -0.6│██████████████████████████████████████████                    
         -0.8│██████████████████████████████████████████                    
             ╰──────────────────────────────────────────x_axis_label        
              0     2     4     6     8     10    12    xz                  
                 1     3     5     7     9     11    13                     
                                                                            
16│                                       ▂▂▂▄▄▄▆▆▆███
12│                           ▂▂▂▄▄▄▆▆▆███████████████
 8│               ▂▂▂▄▄▄▆▆▆███████████████████████████
 4│   ▂▂▂▄▄▄▆▆▆███████████████████████████████████████
  ╰───────────────────────────────────────────────────
   0     2     4     6     8     10    12    14    16 
      1     3     5     7     9     11    13    15    
 8│            
  │            
 7│            
  │            
 6│            
  │            
 5│            
  │            
 4│            
  │            
 3│            
  │            
 2│            
  │            
 1│████████████
  │████████████
 0│████████████
  │████████████
-1│████████████
  │████████████
-2│████████████
  │████████████
-3│████████████
  │████████████
-4│████████████
  │████████████
-5│████████████
  │████████████
  ╰────────────
   0           
               
1086│                                                                                
    │                                                                                
1055│                                                                                
    │                                                                                
1024│                                        █                                       
    │                                        █                                       
 993│                                        █                                       
    │                                        █                                       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  34│                                        █                                       
    │                                        █                                       
  32│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  30│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  28│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  26│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  24│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  22│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  20│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  18│███████████████████████████████████████ ████████████████████████████████████████
    │███████████████████████████████████████ ████████████████████████████████████████
  16│████████████████████████████████████████████████████████████████████████████████
    ╰────────────────────────────────────────────────────────────────────────────────
     0  51  153  307  410  563  666  820  922  1076  1230  1383  1537  1691  1845    
      0  102  205  358  461  615  717  871  1024  1127  1281  1435  1588  1742  1896 
    1006│                                                                                
        │                                                                          ██████
    1005│                                                                          ██████
        │                                                                          ██████
    1004│                                                                          ██████
        │                                                                          ██████
    1004│                    ▄▄▄▄▄▄▄                                               ██████
        │                    ███████                                               ██████
    1003│                    ███████                                               ██████
        │              ▄▄▄▄▄▄███████▄▄▄▄▄▄▄                                        ██████
    1002│              ████████████████████                                        ██████
        │              ████████████████████                                        ██████
    1002│       ▆▆▆▆▆▆▆████████████████████▆▆▆▆▆▆                                  ██████
        │       █████████████████████████████████                                  ██████
    1001│       █████████████████████████████████                                  ██████
        │███████████████████████████████████████████████                           ██████
    1000│███████████████████████████████████████████████                           ██████
        │███████████████████████████████████████████████                    ▂▂▂▂▂▂▂██████
999.9802│███████████████████████████████████████████████                    █████████████
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   3.125│███████████████████████████████████████████████             ▆▆▆▆▆▆▆█████████████
        │███████████████████████████████████████████████             ████████████████████
  2.5625│███████████████████████████████████████████████             ████████████████████
        │███████████████████████████████████████████████             ████████████████████
       2│███████████████████████████████████████████████       ██████████████████████████
        │███████████████████████████████████████████████       ██████████████████████████
  1.4375│███████████████████████████████████████████████       ██████████████████████████
        │███████████████████████████████████████████████▄▄▄▄▄▄▄██████████████████████████
        ╰────────────────────────────────────────────────────────────────────────────────
         0             2            4            6             8            10           
                1            3             5            7            9             11    
│                                                    
│                                                    
│                  ▗▄▄▄▟███████▄▄▄▄                  
│              ▗▄▟███████████████████▄▄              
│           ▗▄██████████▀▀▀▀▀▀▜█████████▙▄           
│         ▗▟██████▛▀▘             ▀▀███████▄         
│        ▄██████▀                    ▝▜█████▙▖       
│       ▟█████▀                        ▝▜█████▖      
│      ▟████▛                            ▝█████▖     
│     ▟████▛                              ▝█████▖    
│    ▐████▛                                ▝█████    
│    ▟████▘                                 ▜████▖   
│    █████                                  ▐████▌   
│    █████                                  ▐████▌   
│    █████                                  ▐████▌   
│    ▐████▌                                 █████    
│    ▝█████▖                               ▟████▛    
│     ▝█████▖                             ▟████▛     
│      ▝█████▄                          ▗▟████▛      
│       ▝██████▄                      ▗▟█████▛       
│         ▜██████▄▖                 ▄▟██████▘        
│          ▝▜███████▙▄▄▄      ▗▄▄▄████████▀          
│             ▀▜███████████████████████▀▘            
│                ▝▀▜███████████████▀▀                
│                      ▝▀▀▀▀▀▀▀                      
│                                                    
╰────────────────────────────────────────────────────
                                                     
                                                     
7123│                                   ▂▂▂▂▂        7434│                                             
    │                                   █████            │                                   ▆▆▆▆▆     
6842│                                   █████        6778│                                   █████     
    │                                   █████            │                                   █████     
6561│                                   █████        6122│                                   █████     
    │                                   █████            │                                   █████     
6280│                                   █████        5466│                                   █████     
    │                                   █████            │               ▆▆▆▆▆               █████     
5999│                                   █████        4810│               █████               █████     
    │                                   █████            │               █████               █████     
5718│                                   █████        4154│               █████               █████     
    │                                   █████            │               █████               █████     
5437│                                   █████        3498│               █████               █████     
    │                                   █████            │               █████               █████     
5156│                                   █████        2842│               █████               █████     
    │               █████               █████            │               █████               █████     
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   2186│               █████               █████     
 314│               █████               █████            │               █████               █████     
    │               █████               █████        1530│               █████               █████     
 135│               █████               █████            │               █████               █████     
    │▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█████▄▄▄▄▄  874.5│               █████               █████     
 -44│█████████████████████████████████████████████       │               █████               █████     
    │█████████████████████████████████████████████  218.5│▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█████▄▄▄▄▄
-223│█████████████████████████████████████████████       │█████████████████████████████████████████████
    ╰─────────────────────────────────────────────       ╰─────────────────────────────────────────────
     0         2         4         6         8            0         2         4         6         8    
          1         3         5         7                      1         3         5         7         
60600│               ▆▆▆▆▆                                                  
     │               █████                                                  
57400│               █████                                                  
     │               █████                                                  
54200│               █████                                                  
     │               █████                                                  
51000│               █████               ▄▄▄▄▄                              
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1600│               █████               █████                              
     │               █████               █████               █████          
 1400│               █████               █████               █████          
     │               █████               █████               █████          
 1200│               █████               █████          ██████████          
     │               █████               █████          ██████████          
 1000│               █████               █████          ██████████          
     │               █████               █████          ██████████          
  800│               █████               █████          ██████████          
     │               █████               █████          ██████████          
  600│               █████               █████          ██████████          
     │               █████               █████          ██████████          
  400│               █████               █████          ██████████     █████
     │               █████               █████          ██████████     █████
  200│               █████               █████          ██████████     █████
     │               █████               █████          ██████████     █████
     ╰──────────────────────────────────────────────────────────────────────
      0         2         4         6         8         10        12        
           1         3         5         7         9         11        13   
 1.2│                                                                        
    │                                                                        
   1│             ▄▄██████▄▄                                                 
    │           ▆▆██████████▆▆                                               
 0.8│         ▆▆██████████████▆▆                                             
    │       ▄▄██████████████████▄▄                                           
 0.6│      ▂██████████████████████▂                                          
    │     ██████████████████████████                                         
 0.4│   ▄▄██████████████████████████▄▄                                       
    │   ██████████████████████████████                                       
 0.2│ ▆▆██████████████████████████████▆▆                                     
    │ ██████████████████████████████████▂                                    
   0│█████████████████████████████████████                                  █
    │█████████████████████████████████████▄▄                              ▄▄█
-0.2│███████████████████████████████████████                              ███
    │███████████████████████████████████████▆▆                          ▆▆███
-0.4│█████████████████████████████████████████▂                        ▂█████
    │███████████████████████████████████████████                      ███████
-0.6│███████████████████████████████████████████▆▆                  ▆▆███████
    │█████████████████████████████████████████████▄▄              ▄▄█████████
-0.8│███████████████████████████████████████████████▄▄          ▄▄███████████
    │█████████████████████████████████████████████████▆▆▂▂▂▂▂▂▆▆█████████████
  -1│████████████████████████████████████████████████████████████████████████
    │████████████████████████████████████████████████████████████████████████
    ╰────────────────────────────────────────────────────────────────────────
     0  0.3489  1.0471  1.7452  2.4433  3.1415  3.8396  4.5377  5.2359       
      0.1744  0.8725  1.5707  2.2688  2.9669  3.6651  4.3632  5.0613  5.7595 
     <─────────────first pi─────────────><────────────second pi─────────────>
     <────────────────────────────────two pi────────────────────────────────>
     <──>                                                                    
      <─sma...>                                                             
                         hello                         
11.5│           ))                                     
    │           ((                                     
10.5))((                   ████              
 9.5))                   ████              
    │           ((            ████   ████              
 8.5))            ████   ████              
    │           ((            ████   ████              
 7.5))            ████   ████              
    │           ((            ████   ████              
 6.5))            ████   ████              
    │           ((            ████   ████              
 5.5))            ████   ████              
    │           ((         ███████   ████              
 4.5))         ███████   ████              
    │           ((         ██████████████              
 3.5))         ██████████████              
    │           ((         ██████████████              
 2.5))         ██████████████              
    │           ((         ██████████████              
 1.5))         ██████████████              
    │           ((         ██████████████              
 0.5))         ██████████████              
    │███████████((█████████████████████████████████████
    ╰───────────))─────────────────────────────────────
     zero    zer(( zero    five   four   zero   zero   
         zero   ))ro   zero   nine   ten     zero      

Dependencies

~1.6–2.1MB
~43K SLoC