Softanza
DémarrerEnglish
Softanza
Recherche · narration

Softanza Ploting System: Where AsciiArt Meets DataViz

Data visualization turns raw numbers into understanding. The Softanza Ploting System elevates that idea by transforming numbers into expressive, text-based visual stories. Built entirely with ASCII characters, it integrates effortlessly into terminals, logs, reports, or any text-based environment.

par Mansour Ayouni · dans le dépôt depuis le 2025-06-08 · essai de fonction · domaine Graphisme

Cet article est écrit en anglais, comme la bibliothèque.

Introduction

At Softanza, we believe every chart should provide actionable insight, not just decoration. Our charts serve four fundamental purposes in data visualization: comparison, composition, distribution, and relationship:

  • Bar Plots are ideal for comparison – "Which value is bigger?"
  • Multi-bar Plots handle complex comparisons – "How do multiple metrics compare across categories?"
  • Surface Plots highlight composition – "What are the parts of this whole?"
  • Histograms show distribution – "How are values spread out?"
  • Scatter Plots uncover relationships – "How do variables relate to one another?"

This article guides you through a practical and pragmatic approach to data visualization, grounded in many years of hand-on experience in the field of data analytics.

The Foundation: Vertical Bar Plots for Comparison

Creating basic comparison visualizations is straightforward:

Haro
oPlot = new stzPlot([ 5, 4, 2, 5, 3, 2, 4 ])
ochart.Show()

illustration

This transforms data into recognizable patterns:

↑                       
│ ██       ██           
│ ██ ██    ██       ██  
│ ██ ██    ██ ██    ██  
│ ██ ██    ██ ██    ██  
│ ██ ██ ██ ██ ██ ██ ██  
│ ██ ██ ██ ██ ██ ██ ██  
│ ██ ██ ██ ██ ██ ██ ██  
╰──────────────────────>
  X1 X2 X3 X4 X5 X6 X7  

Customization options provide visual refinement:

Haro
ochart {
    SetTopChar("●")
    SetBarChar("┃")
    SetBarWidth(1)
    Show()
}

illustration

Sortie promise
↑                       
│ ●        ●            
│ ┃  ●     ┃        ●   
│ ┃  ┃     ┃  ●     ┃   
│ ┃  ┃     ┃  ┃     ┃   
│ ┃  ┃  ●  ┃  ┃  ●  ┃   
│ ┃  ┃  ┃  ┃  ┃  ┃  ┃   
│ ┃  ┃  ┃  ┃  ┃  ┃  ┃   
╰──────────────────────>
  X1 X2 X3 X4 X5 X6 X7  

Enhanced Analysis: Values and Averages

Statistical insights integrate directly into visualizations:

Haro
oPlot = new stzVBarPlot([
    :Q1 = 9, :Q2 = 25, :Q3 = 15, :Q4 = 32, :Q5 = 20
])

oPlot {
    AddValues()
    AddAverage()
    SetBarWidth(1)
    SetTopChar("▲")
    Show()
}

illustration

Sortie promise
↑                       
│          32           
│    25    ▲            
│    ▲     █  20        
│----█--15-█--▲--- 20.2 
│    █  ▲  █  █         
│ 9  █  █  █  █         
│ ▲  █  █  █  █         
│ █  █  █  █  █         
╰────────────────>      
  Q1 Q2 Q3 Q4 Q5      

The horizontal average line at 20.2 reveals which quarters performed above or below mean.

Global Perspective: Percentage Analysis

Percentage functionality provides crucial context for diverse datasets:

Haro
oPlot = new stzVBarPlot([
    :Mali = 42, :Niger = 18, :Egypt = 73, :Bosnia = 29,
    :Brazil = 35, :France = 70, :Spain = 14, :SouthKorea = 34
])

oPlot {
    AddLabels()
    AddPercent()
    SetHeight(5)
    Show()
}

illustration

This creates a normalized view that reveals relative proportions:

↑                                                          
│             23.2%               22.2%                    
│              ██                   ██                     
│ 13.3%        ██          11.1%    ██           10.8%     
│  ██   5.7%   ██    9.2%    ██     ██             ██      
│  ██    ██    ██     ██     ██     ██   4.4%      ██      
│  ██    ██    ██     ██     ██     ██    ██       ██      
╰─────────────────────────────────────────────────────────>
  Mali  Niger Egypt Bosnia Brazil France Spain Southkorea  

Horizontal Perspectives: Alternative Viewpoints

Sometimes, the most insightful perspective comes from changing your viewpoint. Horizontal bar charts excel when category names are long or when you want to emphasize ranking:

Haro
oPlot = new stzHBarPlot([ :Warda = 5, :Yessmina = 8, :Folla = 3 ])
oPlot.AddPercent()
oPlot.Show()

illustration

Sortie promise
         ^                         
   Warda │ ▇▇▇▇▇▇▇▇▇▇▇▇ 31.2%      
Yessmina │ ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 50%  
   Folla │ ▇▇▇▇▇▇▇ 18.8%           
         ╰───────────────────>   

This format immediately highlights Yessmina's leadership position while maintaining clear proportional relationships.

Multi-Dimensional Analysis: Complex Comparisons

Multi-bar charts handle simultaneous metric comparisons:

Haro
oPlot = new stzMultiBarPlot([
    :Sales = [ :Q1=25, :Q2=35, :Q3=30, :Q4=40 ],
    :Costs = [ :Q1=15, :Q2=20, :Q3=18, :Q4=22 ],
    :Profit = [ :Q1=10, :Q2=15, :Q3=12, :Q4=14 ]
])

oPlot {
    SetBarWidth(1)
    SetBarSpace(2)
    SetCategorySpace(5)
    AddValues()
    SetLegend(FALSE)
    Show()
}

illustration

This produces a comprehensive quarterly analysis:

↑                                              
│            35                      40        
│             █          30           █        
│25           █           █           █        
│ █           █ 20        █ 18        █ 22     
│ █ 15        █  ▒ 15     █  ▒ 12     █  ▒ 14  
│ █  ▒ 10     █  ▒  ▓     █  ▒  ▓     █  ▒  ▓  
│ █  ▒  ▓     █  ▒  ▓     █  ▒  ▓     █  ▒  ▓  
│ █  ▒  ▓     █  ▒  ▓     █  ▒  ▓     █  ▒  ▓  
╰─────────────────────────────────────────────>
    Q1          Q2          Q3          Q4     

The visual immediately reveals that while sales grew consistently, the profit margin remained relatively stable, suggesting effective cost management.

Compositional Insights: Understanding the Whole

When your goal shifts from comparison to understanding how parts relate to the whole, Softanza's surface charts provide an innovative treemap-like visualization:

Haro
oPlot = new stzSurfacePlot([
    :Sales = 45, :Marketing = 25, :Dev = 20, :Support = 10
])
oPlot.AddPercent().AddLegend().AddValues().Show()

illustration

Output:

╭──────────────────────────┬───────────╮
│                          │           │
│          Sales           │   Dev     │
│        45 (45%)          │ 20 (20%)  │
│                          │           │
│                          │           │
│                          │           │
├──────────────────────────┼───────────┤
│        Marketing         │ Support   │
│        25 (25%)          │ 10 (10%)  │
│                          │           │
╰──────────────────────────┴───────────╯

This format excels at showing organizational structure, budget allocation, or any scenario where understanding proportional relationships is crucial.

Statistical Distribution: Histograms for Deep Insights

Moving beyond simple comparison and composition, Softanza addresses the critical need for understanding data distribution through sophisticated histogram functionality:

Haro
aScores = [
    85, 92, 78, 88, 95, 82, 90, 87, 93, 86, 
    79, 91, 84, 89, 96, 83, 88, 92, 87, 85
]

oPlot = new stzHistogram(aScores)
oPlot {
    UseFrequency()
    AddPercent()
    Show()
}

illustration

Output:

^                                          
│                       25%                
│                20%    ██     20%         
│                ██     ██     ██     15%  
│  10%    10%    ██     ██     ██     ██   
│  ██     ██     ██     ██     ██     ██   
│  ██     ██     ██     ██     ██     ██   
╰──────────────────────────────────────────>
   78     81     84     87     90     93   
   81     84     87     90     93     96  

This histogram reveals the distribution shape, showing that most scores cluster around the 87-90 range, with the distribution being roughly normal. Such insights are impossible to glean from simple summary statistics alone.

Relationship Analysis: Scatter Plots for Correlation

Understanding relationships between variables is fundamental to data analysis. Softanza's scatter plots provide clear correlation visualization:

Haro
oPlot = new stzScatterPlot([ 
    :Ali = [10, 25], :Ben = [15, 30], 
    :Tom = [20, 22], :Maiga = [25, 35] 
])
oPlot.AddGrid()
oPlot.AddLabels()
oPlot.Show()

illustration

Output:

    X
    ▲
    │                                     
 35 ┼----------------------------● Maiga  
    │                            ⁞        
    │                            ⁞        
    │                            ⁞        
 30 ┼---------● Ben              ⁞        
    │         ⁞                  ⁞        
    │         ⁞                  ⁞        
 25 ┼● Ali    ⁞                  ⁞        
 22 ┼⁞--------⁞--------● Tom     ⁞        
    ╰┼────────┼────────┼─────────┼──► Y       
    10       15       20        25       

The grid lines make it easy to read precise values while the overall pattern reveals correlations—in this case, Tom appears to be an outlier in the otherwise positive relationship between X and Y variables.

Practical Intelligence: Automatic Formatting

One of Softanza's most thoughtful features is its automatic data formatting. When dealing with large numbers, the system intelligently converts them to more readable formats:

Haro
aSalaries = [
    45000, 52000, 48000, 67000, 55000, 49000, 58000, 
    62000, 51000, 46000, 59000, 53000, 47000, 61000, 
    56000, 50000, 54000, 48000, 60000, 57000
]

oPlot = new stzHistogram(aSalaries)
oPlot {
    SetClassCount(6)
    AddPercent()
    SetBarChar("▓")
    Show()
}

illustration

output:

^                                                      
│   25%                                                
│   ▓▓       20%               20%                     
│   ▓▓       ▓▓       15%      ▓▓       15%            
│   ▓▓       ▓▓       ▓▓       ▓▓       ▓▓             
│   ▓▓       ▓▓       ▓▓       ▓▓       ▓▓       5%    
│   ▓▓       ▓▓       ▓▓       ▓▓       ▓▓       ▓▓    
╰──────────────────────────────────────────────────────>
   45.0K    48.7K    52.3K    56.0K    59.7K    63.3K  
   48.7K    52.3K    56.0K    59.7K    63.3K    67.0K  

Notice how the system automatically converts thousands to "K" notation, dramatically improving readability without losing precision.

Softanza Advantages

Comparison with ASCII Ploting Solutions

Feature Softanza UniPlot asciicharts spark blessed termgraph
Language Haro Python JavaScript Various Node.js Python
Bar Plots ✅ Full ✅ Basic ✅ Basic ❌ ✅ Basic ✅ Basic
Multi-Bar Plots ✅ Advanced ❌ ❌ ❌ ❌ ❌
Histograms ✅ Full ✅ Basic ❌ ❌ ❌ ❌
Scatter Plots ✅ Full ✅ Basic ❌ ❌ ❌ ❌
Surface Plots ✅ Unique ❌ ❌ ❌ ❌ ❌
Automatic Formatting ✅ Advanced ❌ ❌ ❌ ❌ ✅ Basic
Statistical Integration ✅ Built-in ❌ ❌ ❌ ❌ ❌
Customizable Characters ✅ Full ✅ Limited ✅ Limited ❌ ✅ Limited ✅ Basic
Grid Support ✅ ✅ ❌ ❌ ✅ ❌
Percentage Display ✅ ❌ ❌ ❌ ❌ ❌
Value Labels ✅ ❌ ❌ ❌ ❌ ❌
Average Lines ✅ ❌ ❌ ❌ ❌ ❌

Future Horizons: Expanding the Analytical Toolkit

Planned extensions include:

Time Series Analysis: Line charts for trend analysis, revealing patterns and seasonality impossible to detect in static comparisons.

Enhanced Composition: Stacked bar charts and pie charts for deeper compositional insights across multiple categories.

Advanced Distribution: Box plots displaying median, quartiles, and outliers for rich statistical insights.

Specialized Analytics: Waterfall charts for financial analysis, dot plots for precise comparisons, and heatmaps for correlation matrices.

Dashboard Monitoring: Gauge charts for real-time KPI monitoring and performance dashboards.

Conclusion

The Softanza Ploting System prioritizes understanding over aesthetics, accessibility over complexity, and purpose over decoration. By combining ASCII art's universal readability with sophisticated analytical capabilities, it creates powerful data exploration tools that work everywhere.

Whether comparing quarterly performance, understanding demographics, or exploring correlations, Softanza provides the right analytical tool while maintaining core principles: simplicity in interface, sophistication in analysis, and clarity in communication.

Citer

Mansour Ayouni. « Softanza Ploting System: Where AsciiArt Meets DataViz ». Softanza narrations, 2025. https://mayouni.github.io/stzsite/fr/narrations/stz-plotting-system-narration.html

Non exécuté : son code touche aux fichiers, au réseau, à l'horloge ou au hasard. L'article est publié tel qu'il est écrit ; ses blocs sont des illustrations. Le code des articles est du code Haro. Là où un article a été écrit avant que la langue prenne son nom actuel, le nom a été changé et rien d'autre. Genre, domaine et série lus dans le nom du fichier, année tirée du premier commit : dérivés, jusqu'à ce que l'article porte son propre en-tête. Le fichier sur GitHub(s'ouvre dans un nouvel onglet)