# <img src="assets/images/matplotex_logo.png" height="50" /> Matplotex
<font color="darkblue"> **Matplotex**</font> is a lightweight and efficient library for Elixir projects that facilitates server-side SVG generation for data visualization. Designed to integrate seamlessly with Phoenix LiveView, it serves as a powerful tool for creating dynamic visualizations in web applications. Below are the key benefits and extended use cases of <font color="darkblue"> **Matplotex**</font>:
- **Server-side SVG Generation:** <font color="darkblue"> **Matplotex**</font> enables the creation of larger, complex plots on the server, ensuring smooth performance on client-side devices with limited memory.
- **Efficient Concurrent Processing :** Leveraging Elixir’s concurrency capabilities, <font color="darkblue"> **Matplotex**</font> can handle multiple requests simultaneously, making it ideal for high-performance applications.
- **Cross-Project Compatibility :** While optimized for Elixir, <font color="darkblue"> **Matplotex**</font> can also be used by non-Elixir projects through its API integration with the Phoenix framework, broadening its potential use cases.
The sample plots generated using <font color="darkblue"> **Matplotex**</font> are shown below.
<img src="assets/images/bar_readme.svg"/>
<img src="assets/images/pie_readme.svg"/>
<img src="assets/images/line_plot_readme.svg"/>
<img src="assets/images/scatter_plot_readme.svg"/>
## Installation
The package can be installed by adding <font color="darkblue"> **Matplotex**</font> to your list of dependencies in `mix.exs`.
```elixir
def deps do
[
{:matplotex, "~> 0.2.0" }
]
```
## Sample SVG generation
```elixir
x = [1, 3, 7, 4, 2, 5, 6]
y = [1, 3, 7, 4, 2, 5, 6]
frame_width = 8
frame_height = 6
size = {frame_width, frame_height}
margin = 0.05
font_size = "16pt"
title_font_size = "18pt"
ticks = [1, 2, 3, 4, 5, 6, 7]
x
|> Matplotex.plot(y)
|> Matplotex.figure(%{figsize: size, margin: margin})
|> Matplotex.set_title("The Plot Title")
|> Matplotex.set_xlabel("X Axis")
|> Matplotex.set_ylabel("Y Axis")
|> Matplotex.set_xticks(ticks)
|> Matplotex.set_yticks(ticks)
|> Matplotex.set_rc_params(
x_tick_font_size: font_size,
y_tick_font_size: font_size,
title_font_size: title_font_size,
x_label_font_size: font_size,
y_label_font_size: font_size,
title_font_size: title_font_size
)
|> Matplotex.show()
```
## Roadmap: What's Coming Next
We are actively working on the following improvements and additions for the <font color="darkblue"> **Matplotex**</font> library:
#### Upcoming Features for Matplotex:
- **Compatibility with Elixir Phoenix LiveView :** Seamless integration with Phoenix LiveView for real-time data visualization in web applications.
- **GUI Integration :** Adding graphical user interface (GUI) capabilities to <font color="darkblue"> **Matplotex**</font>, providing an intuitive and user-friendly experience for generating plots.
- **Support for the Nerves Framework :** Enabling real-time data visualization for embedded systems, such as sensor readings, using the Nerves framework.
Additionally, we are focused on expanding the library with a variety of new chart types to enhance its functionality and versatility. The upcoming <font color="darkblue"> **Matplotex**</font> version will also include the official Hex package, featuring all the basic chart types!!!
## Contribution
We welcome all contributions to improve the <font color="darkblue"> **Matplotex**</font> project! Here are some key ways you can contribute:
- **Propose Features :** Suggest new functionalities or improvements, including new plot additions.
- **Report Bugs :** Identify and report issues in the library
- **Review Pull Requests :** Review open contributions and share constructive feedback
- **Fix Bugs :** Help resolve reported issues to improve the library
#### Steps to Contribute
1. Fork the repository.
2. Create a new branch.
```elixir
git checkout -b feature-name
```
3. Make your changes.
4. Add your changes to the branch.
```elixir
git add <changed files>
```
5. Commit your changes.
```elixir
git commit -m 'Add new feature'
```
6. Push to the branch.
```elixir
git push origin feature-name
```
7. Open a Pull Request.
<font color="darkblue"> **Happy Contributing !!!**</font>