Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/franshej/CustomMatPlot
Plot library for the JUCE Framework
https://github.com/franshej/CustomMatPlot
component juce juce-framework plot
Last synced: 2 months ago
JSON representation
Plot library for the JUCE Framework
- Host: GitHub
- URL: https://github.com/franshej/CustomMatPlot
- Owner: franshej
- License: mit
- Created: 2022-04-27T12:29:14.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T11:12:23.000Z (3 months ago)
- Last Synced: 2024-10-28T14:35:33.910Z (3 months ago)
- Topics: component, juce, juce-framework, plot
- Language: C++
- Homepage:
- Size: 5.38 MB
- Stars: 67
- Watchers: 2
- Forks: 9
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-juce - CustomMatPlot
README
# CustomMatPlot
## Plot library for the JUCE FrameworkCustomMatPlot (CMP) is a plotting library for C++. It provides an API for embedding plot components into applications using the JUCE framework. The plot component is easy to integrate and is customizable using the included lookandfeel class.
| ![Image](img/spread.png) | ![Image](img/sines.png)|
| ------------- | ------------- |> Note: I'm not a senior developer so there may be several design flaws.
## Table of Content
- [Features](#features)
- [Requirements](#requirements)
- [Controls](#controls)
- [LookAndFeel](#lookandfeel)
- [Graph line attributes](#graph-line-attributes)
- [Examples](#examples)
- [Realtime frequency response example](#realtime-frequency-response-example)
- [Tests](#tests)
- [License](#license)CMP implements many of the same features that exist in Matplotlib.
Below is the feature list of CMP:- Axis scaling: Linear and logarithmic.
- Customizable view using the lookandfeel class.
- Legend.
- Zoom.
- Trace.
- Fill area between two graphs.
- Axis labels.
- Ticks and Tick-labels.
- Grids and tiny grids.
- Markers: Star, triangles, square etc.
- Custom stroke path.
- Callback for every visible data point.
- Callback for tace points.
- Two different downsampler levels.
- Move points in the garph with mouse.
- Customizable userinput mapping using lookandfeel class.![Image](img/heart.png)
- Compiler that supports C++17
- CMake 3.12The CMP compontent implements MouseEvents to interact with the plot using the mouse. Below is a list with the default added mouse commands which can be overrided using a custom lookandfeel class (see "move_pixel_points" example):
1. Left click drag anywhere in the graph area to zoom into the plot. The zoom area is displayed as traced lined rectangle.
2. Right click to zoom out to home.
3. Double-click to add a trace-point to the graph lines closest to the mouse pointer.
4. Double-click on a trace-point to remove it.
5. Drag the trace point to move it along the graph-line.
6. Move the trace point label by dragging it.
7. Move the legend to by dragging it.
8. Move pixel points.
8. Panning.Customize the plot to your liking by overriding the lookandfeel functions. See the lookandfeel example.
![Image](img/lookandfeel.png)
Use the graph line attributes to change the appearance of the graph lines. See custom_graph_attributes example.
![Image](img/graph_line_attributes.png)
## Examples
The examples can be built using the following commands:```sh
# Clone repository
git clone https://github.com/franshej/CustomMatPlot.gitcd CustomMatPlot
# Update submodules
git submodule update --initmkdir build
cd build# Config & build
cmake ../ -DCMP_BUILD_EXAMPLES=ON
make -j4
```## Realtime frequency response example app
An example app plotting the frequency response of the incoming left and right audio signals can be seen here: Realtime plot example
![Image](img/freq-plot-ui.png)
## Tests
### Unit testing
The `juce::UnitTest` class is wrapped into macros to make it easier to write new structured tests.```cpp
SECTION(PlotTest, "Plot class") {
cmp::Plot plot;TEST("Part 1: empty graph line.") {
const auto graph_lines = getChildComponentHelper(plot);
expect(graph_lines.empty());
}TEST("Part 2: single graph line") {
plot.plot({y_data1});
...
}
}
```### Manual tests
To make it more convenient to write new manual tests the CMP library implements tests macros similar to the macros in google tests.The following example below will plot a ramp of 10 values from 0-9:
```cpp
TEST(ramp, non_real_time) {
ADD_PLOT;std::vector y_test_data(10u);
std::iota(y_test_data.begin(), y_test_data.end(), 0.0f);PLOT_Y({y_test_data});
}
```![Image](img/ramp.png)
The MIT License (MIT)
Copyright (c) 2017-2022 Frans Rosencrantz
**Free Software, Hell Yeah!**