Animated plotting extension for Pandas with Matplotlib
Project description
Pandas_Alive
Animated plotting extension for Pandas with Matplotlib
Pandas_Alive is intended to provide a plotting backend for animated matplotlib charts for Pandas DataFrames, similar to the already existing Visualization feature of Pandas.
With Pandas_Alive, creating stunning, animated visualisations is as easy as calling:
df.plot_animated()
Installation
Install with pip install pandas_alive
Usage
As this package builds upon bar_chart_race
, the example data set is sourced from there.
Must begin with a pandas DataFrame containing 'wide' data where:
- Every row represents a single period of time
- Each column holds the value for a particular category
- The index contains the time component (optional)
The data below is an example of properly formatted data. It shows total deaths from COVID-19 for the highest 20 countries by date.
To produce the above visualisation:
- Check Requirements first to ensure you have the tooling installed!
- Call
plot_animated()
on the DataFrame- Either specify a file name to write to with
df.plot_animated(filename='example.mp4')
or usedf.plot_animated().get_html5_video
to return a HTML5 video
- Either specify a file name to write to with
- Done!
import pandas_alive
df = pandas_alive.load_dataset()
df.plot_animated(filename='example-barh-chart.gif')
Currently Supported Chart Types
pandas_alive
current supports:
Horizontal Bar Charts
import pandas_alive
df = pandas_alive.load_dataset()
df.plot_animated(filename='example-barh-chart.gif')
Vertical Bar Charts
import pandas_alive
df = pandas_alive.load_dataset()
df.plot_animated(filename='example-barv-chart.gif',orientation='v')
Line Charts
With as many lines as data columns in DataFrame.
import pandas_alive
df = pandas_alive.load_dataset()
df.diff().fillna(0).plot_animated(filename='example-line-chart.gif',kind='line')
Multiple Charts
pandas_alive
supports multiple animated charts in a single visualisation.
- Create a list of all charts to include in animation
- Use
animate_multiple_plots
with afilename
and the list of charts (this will usematplotlib.subplots
) - Done!
import pandas_alive
df = pandas_alive.load_dataset()
animated_line_chart = df.diff().fillna(0).plot_animated(kind='line',period_length=200)
animated_bar_chart = df.plot_animated(kind='barh',period_length=200,n_visible=10)
pandas_alive.animate_multiple_plots('example-bar-and-line-chart.gif',[animated_bar_chart,animated_line_chart]
import pandas_alive
urban_df = pandas_alive.load_dataset("urban_pop")
animated_line_chart = (
urban_df.sum(axis=1)
.pct_change()
.dropna()
.plot_animated(kind="line", title="Total % Change in Population",show_period_annotation=False)
)
animated_bar_chart = urban_df.plot_animated(kind='barh',n_visible=10,title='Top 10 Populous Countries')
pandas_alive.animate_multiple_plots('examples/example-bar-and-line-urban-chart.gif',[animated_bar_chart,animated_line_chart],title='Urban Population 1977 - 2018')
Inspiration
The inspiration for this project comes from:
Requirements
If you get an error such as TypeError: 'MovieWriterRegistry' object is not an iterator
, this signals there isn't a writer library installed on your machine.
This package utilises the matplotlib.animation function, thus requiring a writer library.
Ensure to have one of the supported tooling software installed prior to use!
- ffmpeg
- ImageMagick
- Pillow
- See more at https://matplotlib.org/3.2.1/api/animation_api.html#writer-classes
Documentation
Documentation is provided at https://jackmckew.github.io/pandas_alive/
Contributing
Pull requests are welcome! Please help to cover more and more chart types!
Project details
Release history Release notifications | RSS feed
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
Hashes for pandas_alive-0.1.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c98c502c1876d8241f68d49df80ebfc316297e7f9c52fc5356c3efc46655a0cd |
|
MD5 | 7a0d061e15c780119cfc82776477c5b5 |
|
BLAKE2b-256 | 2fba2d1ec1ad2506f8abb8a00b2446dadad8aebf6b73ea6fe8913292037d1b6e |