Metadata-Version: 2.1
Name: tabplot
Version: 0.2
Summary: Tabplot: A wrapper over matplotlib for reading tabular (csv) text files.
Author: Jayghosh Rao
Author-email: jayghoshter@gmail.com
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: matplotlib (==3.6.2)
Requires-Dist: numexpr (==2.8.4)
Requires-Dist: numpy (==1.24.1)
Requires-Dist: rich (==13.0.0)
Requires-Dist: scikit-learn (==1.2.0)
Requires-Dist: scipy (==1.9.3)

# tabplot

**WORK IN PROGRESS**

When working from the terminal, I'd need to quickly (and beautifully) plot the data in csv-style text files. This meant good colors, axis labels, plot labels, adjustable axis limits, etc. I started with making a simple wrapper script around matplotlib to do this. Over time, I kept adding pre- and post-processing functionality such as scaling, normalizing, and linear regression, not to mention exposing more of matplotlib's properties and functions. Since the script kept growing, I decided to move it into its own separate package.

# Installation

You can install tabplot via testpypi

```
pip install git+https://github.com/jayghoshter/tabplot
```

Check out [SciencePlots](https://github.com/garrettj403/SciencePlots) for added plot beautification.

# Examples

## Simple line plots

Assuming text data stored in csv-style files with the following assumptions:

- No header labels
- x,y data in columns 0,1 respectively
- Either space or comma separated

The following code will generate basic plots. For customization options please refer to the examples section or test cases.

```
from tabplot import Plot
plot = Plot()
plot.files = ['./file_1.csv', './file_2.csv'],
plot.linewidths = 2,
plot.labels = ['A', 'B']
plot.read()
plot.draw()
plot.show()
plot.close()
```

or

```
from tabplot import Plot
Plot(
    files = ['./file_1.csv', './file_2.csv'],
    linewidths = 2,
    labels = ['A', 'B']
).read().draw().show().close()
```

- Most used plot properties are exposed directly on the `Plot` object.
- `files`, `twinx`, and `labels` can be specified on `Plot` or in the `read()` method
- `read()` loads the data from the given files into `.xs` and `.ys`, which can be accessed and manipulated as wished.
- `setup()` creates a `.fig` and `.ax` if not already done
- `draw()` plots the lines etc. to the figure
- `save('file.pdf')` will write to `file.pdf`
- `show()` will display the plotted image

## Bar plots

```
from tabplot import BarPlot
files = ['dummy.csv']
BarPlot(bar_width = 0.5).read(files).draw().save('dummy.pdf').close()
```

- `BarPlot` is derived from `Plot`

# Notes/Issues
- Operator chaining is possible as seen above. 
- Currently only uses one subplot
- Make sure to close the current plot with `.close()`. Unless garbage collected, plots may linger and calling `.show()` for some other object may also display a previous unclosed figure.
- hlines/vlines must be called after all plots/fit_lines etc are done so that no further changes to xlims, ylims are effected later.
- legends don't include hlines
- preload-style can affect legend style even if not explicitly specified because we use setrc() in _update_params. So the default value overrides anything given in the style. While this is to be expected, the question is if this is user-friendly or not. Maybe a n otice is sufficient, that --preload-style can have this behavior.
    - [TASK] perhaps I can separate out the setrc_defaults() and call it at another time? Or only call it if the user has specified changes to the default values
