Releases: stephane-caron/foxplot
Release list
v2.1.0
This release fixes lag estimation and two time-series operator bugs.
Added
- CICD: Improve unit test coverage
- Support both
.jsonand.jsonlextensions for JSON Lines files
Fixed
- Fix lag estimation function
- Fix series multiplication and division operators
Removed
- End support for Python 3.8
v2.0.1
This patch release fixes an issue in data.my.series.low_pass_filter(T).
Changed
- CICD: Replace black by ruff format for linting
Fixed
- Fix MyPy checks
- Fix low-pass filter
v2.0.0
This release simplifies applying functions to time series:
- Before:
some_function(data.times, data.my.series, *args) - After:
data.my.series.some_function(*args)
This makes it easier to e.g. plot a series and its derivative:
fox.plot(
data.observation.servo.left_wheel.torque,
right=data.observation.servo.left_wheel.torque.low_pass_filter(T=0.05),
)Added
- Add a
Fox.empty()method to start from an empty state - CLI: List available functions in the initial prompt
- Internal: Add reference to time values in each series instance
- Series: divisions between series and scalar values
- Series: products between series and scalar values
- Series: unitary minus operator
- Top-level
decodefunction to unpack dictionaries from files
Changed
- Breaking: Function: absolute value moved to
Series - Breaking: Function: low-pass filter moved to
Series - Breaking: Function: standard deviation moved to
Series - Breaking: Function: time-derivative by finite differences moved to
Series - Breaking: Rename
FoxplotExceptiontoFoxplotError - Breaking: Rename
SeriestoLabeledSeries - Breaking: Rename the front class
FrozenSeriestoSeries - CICD: Update checkout action to v4
- Default constructor of
Foxnow requires a file name or path - Update to latest uplot-python API
Fixed
- Correct some type annotations
- Make sure time values are scalar timestamps
- Use correct
timestampeduPlot argument
Removed
- Breaking: Remove
Fox.freezefunction - Breaking: Remove
Fox.labelsproperty - Breaking: Remove
Fox.read_from_filefunction (moved to constructor) - Breaking: Remove
left_axis_unitargument ofplotfunction - Breaking: Remove
right_axis_unitargument ofplotfunction - Clean up unused internal color picker
v1.0.0
This release adds low-pass filtering and first-order lag estimation to foxplot.functions.
In a temporary lapse of semantic versioning 😉 the release takes on the symbolic "1.0.0" version number, not because of an API-breaking change, but to rather display that the project has matured after two years.
Added
- Function: lag estimator
- Function: low-pass filter
- docs: Functions page
- docs: Interactive-mode page
- docs: Tips-and-tricks page
Removed
- Remove
print_command_lineargument fromFox.plot - Remove µPlot source from distribution, as we now depend on uplot-python
v0.7.0
This minor release enables parsing string-valued time series.
Added
- Function: Absolute value
Fixed
- Allow input files with string values
v0.6.0
Here comes foxplot 0.6.0, adding basic support for calculation with leaf series. Now we can do things like:
power = data.observation.servo.left_wheel.torque * data.observation.servo.left_wheel.velocity
omega_x = data.observation.imu.angular_velocity[0]
fox.plot(power, right=[std(omega_x, window_size=5)])Which results for instance in the following plot:
Future functions and basic operations between various data types (vectors, rotations, ...) are welcome.
May your plots be insightful!
Added
- Feature: calculation of sums and products between series
- Function: Windowed standard deviations
- Separate classes for "hot" (reading the input) and "frozen" series
- Start a functions submodule for commonly used functions
Changed
- Bump required Python version to 3.8
- Rename and specialize
get_seriestoget_frozen_series - Value type for frozen series switched to NumPy arrays
Fixed
- Make sure frozen series at leaves are floating-point valued
- Type annotations for NumPy arrays
Removed
- Replace
_get(n)method by_valuesin frozen series
v0.5.0
This release reverts to fox.plot in interactive mode, repeats previous values upon input gaps, and otherwise improves on a few friction points.
Added
- Allow single-series right plots
- Argument
print_command_lineto plotting function
Changed
- CLI: Revert to
fox.plotfor better docs and discoverability - Rename internal
IndexedSeriesto justSeries - Repeat previous value when there is a gap in the input
v0.4.0
With this release, plotting a internal node plots all indexed series within (non-recursively). This is handy to plot e.g. vector data directly:
In [1]: foxplot([data.observation.imu.linear_acceleration])Added
- Automatic plot title from log file name
- Plotting a internal node plots all indexed series within (non-recursively)
- Warn when trying to plot structured data
Changed
- Node labels are internal (not exposed to TAB completion)
v0.3.0
This is v0.3.0 of ''foxplot'', a command-line tool to plot time-series data from newline-delimited JSON. This release updates the CLI workflow where we can now use the foxplot and set_time functions directly. It also smooths out some friction points to improve user experience.
Breaking changes
- CLI: Expose
foxplotfunction rather than a fox instance - CLI: Expose
set_timefunction
Added
- Allow single-series plots
- Detect time key from root keys in the input
- Length attribute to indexed series
Changed
- Put filename at the end of suggested command line
- Removed
timeargument from the plot function - Rephrase command-line hint
v0.2.0
With this release, Foxplot keeps axis labels ordered consistently thanks to a contribution from @boragokbakan 👍
Added
- CI workflow checking that PyPI package installation upon new releases
Changed
- Increase time precision from 3 to 4 significant digits
- Keep ordered axis labels for plot color consistency, thanks to @boragokbakan 👍
Fixed
- Consistent key order between plots of the same log, thanks to @boragokbakan 👍


