Deephaven Plugin for matplotlib
Project description
Deephaven Plugin for matplotlib
The Deephaven Plugin for matplotlib. Allows for opening matplotlib plots in a Deephaven environment. Any matplotlib plot should be viewable by default. For example:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.subplots() # Create a figure containing a single axes.
ax.plot([1, 2, 3, 4], [4, 2, 6, 7]) # Plot some data on the axes.
You can also use TableAnimation
, which allows updating a plot whenever a Deephaven Table is updated.
TableAnimation
Usage
TableAnimation
is a matplotlib Animation
that is driven by updates in a Deephaven Table. Every time the table that
is being listened to updates, the provided function will run again.
Line Plot
import matplotlib.pyplot as plt
from deephaven import time_table
from deephaven.plugin.matplotlib import TableAnimation
# Create a ticking table with the sin function
tt = time_table("PT00:00:01").update(["x=i", "y=Math.sin(x)"])
fig = plt.figure() # Create a new figure
ax = fig.subplots() # Add an axes to the figure
(line,) = ax.plot(
[], []
) # Plot a line. Start with empty data, will get updated with table updates.
# Define our update function. We only look at `data` here as the data is already stored in the format we want
def update_fig(data, update):
line.set_data([data["x"], data["y"]])
# Resize and scale the axes. Our data may have expanded and we don't want it to appear off screen.
ax.relim()
ax.autoscale_view(True, True, True)
# Create our animation. It will listen for updates on `tt` and call `update_fig` whenever there is an update
ani = TableAnimation(fig, tt, update_fig)
Scatter Plot
Scatter plots require data in a different format that Line plots, so need to pass in the data differently.
import matplotlib.pyplot as plt
from deephaven import time_table
from deephaven.plugin.matplotlib import TableAnimation
tt = time_table("PT00:00:01").update(
["x=Math.random()", "y=Math.random()", "z=Math.random()*50"]
)
fig = plt.figure()
ax = fig.subplots()
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
scat = ax.scatter([], []) # Provide empty data initially
scatter_offsets = [] # Store separate arrays for offsets and sizes
scatter_sizes = []
def update_fig(data, update):
# This assumes that table is always increasing. Otherwise need to look at other
# properties in update for creates and removed items
added = update.added()
for i in range(0, len(added["x"])):
# Append new data to the sources
scatter_offsets.append([added["x"][i], added["y"][i]])
scatter_sizes.append(added["z"][i])
# Update the figure
scat.set_offsets(scatter_offsets)
scat.set_sizes(scatter_sizes)
ani = TableAnimation(fig, tt, update_fig)
Multiple Series
It's possible to have multiple kinds of series in the same figure. Here is an example driving a line and a scatter plot:
import matplotlib.pyplot as plt
from deephaven import time_table
from deephaven.plugin.matplotlib import TableAnimation
tt = time_table("PT00:00:01").update(
["x=i", "y=Math.sin(x)", "z=Math.cos(x)", "r=Math.random()", "s=Math.random()*100"]
)
fig = plt.figure()
ax = fig.subplots()
(line1,) = ax.plot([], [])
(line2,) = ax.plot([], [])
scat = ax.scatter([], [])
scatter_offsets = []
scatter_sizes = []
def update_fig(data, update):
line1.set_data([data["x"], data["y"]])
line2.set_data([data["x"], data["z"]])
added = update.added()
for i in range(0, len(added["x"])):
scatter_offsets.append([added["x"][i], added["r"][i]])
scatter_sizes.append(added["s"][i])
scat.set_offsets(scatter_offsets)
scat.set_sizes(scatter_sizes)
ax.relim()
ax.autoscale_view(True, True, True)
ani = TableAnimation(fig, tt, update_fig)
Build
To create your build / development environment (skip the first two lines if you already have a venv):
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip setuptools
pip install build deephaven-plugin matplotlib
To build:
python -m build --wheel
The wheel is stored in dist/
.
To test within deephaven-core, note where this wheel is stored (using pwd
, for example).
Then, follow the directions in the top-level README.md to install the wheel into your Deephaven environment.
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 deephaven_plugin_matplotlib-0.4.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | bab2d4765f4f6211b9a077eae067cfe80b292a1cd9420b7cc9c4695bcceaa0c2 |
|
MD5 | 8db19df6c85514bf2fb452274cfd0a12 |
|
BLAKE2b-256 | 2edb7c08b6c47cf7068cf374112a26534ae3aa69853a46089505b1774aaa01cc |
Hashes for deephaven_plugin_matplotlib-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7e3b213d299e368662d1a642107596b9e83ff5c2dbb2ec897ef1ce44d2f0c8f |
|
MD5 | 1a07fac47e20106451d4dd5d712d700b |
|
BLAKE2b-256 | 8aa0ae8d2c4c7abc649a2f9747859d3eadbeb5fcfb6b9160f7318772d2219436 |