A lightweight Python library for easy data visualization with OOP principles
Project description
LightenPlot
Dramatically Simplify Data Visualization in Python
LightenPlot is a Python library that reduces complex visualization code into single-line commands, while maintaining the power and flexibility of matplotlib and seaborn.
Table of Contents
- Features
- Installation
- Quick Start
- Examples
- Plot Composition
- Themes
- Exporting Plots
- Architecture Overview
- API Reference
- Testing
- Documentation
- Contributing
- RichieClan Team
- License
- Contact
Features
- One-Line Plotting: Create beautiful visualizations with single commands
- Method Chaining: Fluent API for intuitive plot customization
- Built-in Themes: Multiple professional themes (default, dark, minimal, colorful)
- Comprehensive Plot Types: Scatter, line, bar, histogram, box, heatmap
- Smart Composition: Easily combine multiple plots
- Easy Export: Save in multiple formats (PNG, PDF, SVG)
- Full OOP Design: Encapsulation, inheritance, polymorphism
Installation
pip install LightenPlot
From Source
git clone https://github.com/khassndrajayme/LightenPlot.git
cd LightenPlot
pip install -r requirement.txt
pip install -e .
Quick Start
Traditional Way (10+ lines)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.DataFrame({'x': [1, 2, 3, 4], 'y': [2, 4, 6, 8]})
fig, ax = plt.subplots(figsize=(10, 6))
ax.scatter(data['x'], data['y'], alpha=0.6)
ax.set_xlabel('X Values')
ax.set_ylabel('Y Values')
ax.set_title('My Scatter Plot')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
LightenPlot Way (1 line!)
import LightenPlot as lp
import pandas as pd
data = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})
lp.scatter(data, x='x', y='y').set_title('My Scatter Plot').show()
PyPI Package:
https://pypi.org/project/LightenPlot/
lightenplot
Examples
Scatter Plot
import LightenPlot as lp
import pandas as pd
data = pd.DataFrame({
'age': [25, 30, 35, 40, 45],
'salary': [50000, 60000, 75000, 80000, 95000]
})
lp.scatter(data, x='age', y='salary', color='steelblue') \
.set_title('Age vs Salary') \
.set_labels('Age (years)', 'Salary ($)') \
.apply_theme('minimal') \
.save('plot.png') \
.show()
Line Plot
lp.line(data, x='month', y='revenue', color='#FF6B6B', linewidth=2.5) \
.set_title('Monthly Revenue') \
.apply_theme('dark') \
.show()
Bar Plot
lp.bar(data, x='category', y='value', color='#4ECDC4') \
.set_title('Sales by Category') \
.show()
Histogram
import numpy as np
ages = np.random.normal(35, 10, 1000)
lp.histogram(ages, bins=30, color='skyblue') \
.set_title('Age Distribution') \
.show()
Box Plot
lp.boxplot(data, columns=['Group_A', 'Group_B', 'Group_C']) \
.set_title('Performance Comparison') \
.show()
Heatmap
correlation_matrix = data.corr()
lp.heatmap(correlation_matrix, cmap='coolwarm', annot=True) \
.set_title('Correlation Matrix') \
.show()
Plot Composition
# Create individual plots
plot1 = lp.scatter(data, x='x', y='y')
plot2 = lp.line(data, x='date', y='value')
plot3 = lp.bar(data, x='cat', y='count')
plot4 = lp.histogram(values, bins=20)
# Compose into 2x2 grid
composer = lp.compose(rows=2, cols=2)
composer.add_plot(plot1).add_plot(plot2).add_plot(plot3).add_plot(plot4)
composer.show()
Themes
LightenPlot includes 4 built-in themes:
default: Clean, professional lookdark: Dark mode with high contrastminimal: Minimalist design with no spinescolorful: Vibrant, eye-catching colors
# Apply theme
plot.apply_theme('dark')
# List available themes
print(lp.ThemeManager.list_themes())
Exporting Plots
# Single format
plot.save('output.png', dpi=300)
# Multiple formats
from LightenPlot import PlotExporter
exporter = PlotExporter(plot.figure)
exporter.save_multiple('output', formats=['png', 'pdf', 'svg'])
Architecture
LightenPlot is built with solid OOP principles:
Core Classes
- BasePlot: Abstract base class for all plots
- ScatterPlot, LinePlot, BarPlot, etc.: Specific plot implementations
- PlotComposer: Compose multiple plots (composition pattern)
- ThemeManager: Manage and apply themes (singleton pattern)
- PlotExporter: Handle plot exports
OOP Features Demonstrated
- Encapsulation: Private attributes (
_data,_theme) - Inheritance: All plots inherit from
BasePlot - Polymorphism: Theme classes with common interface
- Composition:
PlotComposercontainsBasePlotinstances - Dunder Methods:
__repr__,__str__,__eq__,__lt__
API Reference
Quick Functions
| Function | Description |
|---|---|
scatter() |
Create scatter plot |
line() |
Create line plot |
bar() |
Create bar plot |
histogram() |
Create histogram |
boxplot() |
Create box plot |
heatmap() |
Create heatmap |
compose() |
Create plot composer |
Common Methods
| Method | Description |
|---|---|
.set_title(title) |
Set plot title |
.set_labels(x, y) |
Set axis labels |
.apply_theme(name) |
Apply theme |
.save(filename) |
Save plot |
.show() |
Display plot |
Testing
Run unit tests:
# Simple run
pytest tests/test_all.py
# Verbose (shows test names)
pytest tests/test_all.py -v
# Show print statements
pytest tests/test_all.py -v -s
# Stop on first failure
pytest tests/test_all.py -x
# Run specific test class
pytest tests/test_all.py::TestScatterPlot -v
# Run specific test method
pytest tests/test_all.py::TestScatterPlot::test_scatter_creation -v
# With coverage
pytest tests/test_all.py --cov=lightenplot --cov-report=term
# Run all tests in tests/ folder
pytest tests/
Or with unittest:
python -m unittest discover tests/
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
RichieClan Team
- Khassandra Louise C. Jayme - Lead Developer - GitHub
- Sheena Angela T. Janog - Developer - GitHub
- Xavier Neo Mahilum - Developer - GitHub
- Allen Floro Ventura - Developer - GitHub
- Genetyron Zamoranos - Developer - GitHub
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Built on top of Matplotlib
- Inspired by Seaborn
- Thanks to our instructor for guidance and support
- Inspired by matplotlib, seaborn, and ggplot2
Contact
For questions or feedback, please open an issue on GitHub or contact us at khassandrajayme@gmail.com
Made with Love by RichieClan
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lightenplot-0.2.0.tar.gz.
File metadata
- Download URL: lightenplot-0.2.0.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0c927e61f7de2ed63fd8408860c0287d9e0ae04b099fade80b47056a9816809
|
|
| MD5 |
40da340a9ec9f7fd3f21923b8a7a5e07
|
|
| BLAKE2b-256 |
70e1aba22151583c63089a282023976e7f7dcfc3e449f87552194c28e61b3d78
|
File details
Details for the file lightenplot-0.2.0-py3-none-any.whl.
File metadata
- Download URL: lightenplot-0.2.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02b8380fa4d71927144cc4b740d2fffe6c3058e00f91be32bdb454e46d2922e4
|
|
| MD5 |
805979663b1339ffc708a6bc59833b51
|
|
| BLAKE2b-256 |
e1b8e5d47358b27b54e6e5f8a1eb3be9b6826259699294c744de5784b4681cc9
|