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_videoto return a HTML5 video
- Either specify a file name to write to with
- Done!
import pandas_alive
covid_df = pandas_alive.load_dataset()
covid_df.plot_animated(filename='examples/example-barh-chart.gif')
Currently Supported Chart Types
pandas_alive current supports:
Horizontal Bar Charts
import pandas_alive
covid_df = pandas_alive.load_dataset()
covid_df.plot_animated(filename='example-barh-chart.gif')
import pandas as pd
import pandas_alive
elec_df = pd.read_csv("data/Aus_Elec_Gen_1980_2018.csv",index_col=0,parse_dates=[0],thousands=',')
elec_df.fillna(0).plot_animated('examples/example-electricity-generated-australia.gif',period_fmt="%Y",title='Australian Electricity Generation Sources 1980-2018')
Vertical Bar Charts
import pandas_alive
covid_df = pandas_alive.load_dataset()
covid_df.plot_animated(filename='examples/example-barv-chart.gif',orientation='v')
Line Charts
With as many lines as data columns in the DataFrame.
import pandas_alive
covid_df = pandas_alive.load_dataset()
covid_df.diff().fillna(0).plot_animated(filename='examples/example-line-chart.gif',kind='line',period_label={'x':0.1,'y':0.9})
Scatter Charts
import pandas as pd
import pandas_alive
max_temp_df = pd.read_csv(
"data/Newcastle_Australia_Max_Temps.csv",
parse_dates={"Timestamp": ["Year", "Month", "Day"]},
)
min_temp_df = pd.read_csv(
"data/Newcastle_Australia_Min_Temps.csv",
parse_dates={"Timestamp": ["Year", "Month", "Day"]},
)
merged_temp_df = pd.merge_asof(max_temp_df, min_temp_df, on="Timestamp")
merged_temp_df.index = pd.to_datetime(merged_temp_df["Timestamp"].dt.strftime('%Y/%m/%d'))
keep_columns = ["Minimum temperature (Degree C)", "Maximum temperature (Degree C)"]
merged_temp_df[keep_columns].resample("Y").mean().plot_animated(filename='examples/example-scatter-chart.gif',kind="scatter",title='Max & Min Temperature Newcastle, Australia')
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_plotswith afilenameand the list of charts (this will usematplotlib.subplots) - Done!
import pandas_alive
covid_df = pandas_alive.load_dataset()
animated_line_chart = covid_df.diff().fillna(0).plot_animated(kind='line',period_label=False)
animated_bar_chart = covid_df.plot_animated(kind='barh',n_visible=10)
pandas_alive.animate_multiple_plots('examples/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()
.mul(100)
.plot_animated(kind="line", title="Total % Change in Population",period_label=False)
)
animated_bar_chart = urban_df.plot_animated(kind='barh',n_visible=10,title='Top 10 Populous Countries',period_fmt="%Y")
pandas_alive.animate_multiple_plots('examples/example-bar-and-line-urban-chart.gif',[animated_bar_chart,animated_line_chart],title='Urban Population 1977 - 2018',adjust_subplot_top=0.85)
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pandas_alive-0.1.11.tar.gz.
File metadata
- Download URL: pandas_alive-0.1.11.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.6.8 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fef9f937f4464251e64f248966e7a6ea7ae37ea5ee1c167db7a17ead70d7f850
|
|
| MD5 |
3b58641ca600fd8bb7a421098a909c4f
|
|
| BLAKE2b-256 |
624a8e2c0b8705a50eb8a5f7f7b22c612c3bd9095b1d07bdd9f14cc2c7f89afc
|
File details
Details for the file pandas_alive-0.1.11-py3-none-any.whl.
File metadata
- Download URL: pandas_alive-0.1.11-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.5 CPython/3.6.8 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2b562667467426f78f41cb1a42e5292d8c6df14f2c684f8e1d621870b923876
|
|
| MD5 |
af6cfced2e2fe2bed20d7035cdcd9b4d
|
|
| BLAKE2b-256 |
1b0c3444522de057763a149e22fb07a88af8930f1914def4c49bda96ac8b8c14
|