An AI-powered data visualization assistant using Plotly
Project description
Plot Agent
An AI-powered data visualization assistant that helps users create Plotly visualizations in Python.
Built on LangGraph with tool-calling to reliably execute generated Plotly code in a sandbox and keep the current fig in sync.
Installation
You can install the package using pip:
pip install plot-agent
Usage
See more examples in /examples/ (via nbviewer so that can see the charts easily).
Here's a simple minimal example of how to use Plot Agent:
import pandas as pd
from plot_agent.agent import PlotAgent
# ensure OPENAI_API_KEY is set (env or .env); optional debug via PLOT_AGENT_DEBUG=1
# Create a sample dataframe
df = pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [10, 20, 30, 40, 50]
})
# Initialize the agent
agent = PlotAgent()
# Set the dataframe
agent.set_df(df)
# Process a visualization request
response = agent.process_message("Create a line plot of x vs y")
# Print generated code
print(agent.generated_code)
# Get fig
fig = agent.get_figure()
fig.show()
agent.generated_code:
import pandas as pd
import plotly.graph_objects as go
# Creating a line plot of x vs y
# Create a figure object
fig = go.Figure()
# Add a line trace to the figure
fig.add_trace(
go.Scatter(
x=df['x'], # The x values
y=df['y'], # The y values
mode='lines+markers', # Display both lines and markers
name='Line Plot', # Name of the trace
line=dict(color='blue', width=2) # Specify line color and width
)
)
# Adding titles and labels
fig.update_layout(
title='Line Plot of x vs y', # Plot title
xaxis_title='x', # x-axis label
yaxis_title='y', # y-axis label
template='plotly_white' # A clean layout
)
How it works
flowchart TD
A[User message] --> B{LangGraph ReAct Agent}
subgraph Tools
T1[execute_plotly_code<br/>- runs code in sandbox<br/>- returns success/fig/error]
T2[does_fig_exist]
T3[view_generated_code]
end
B -- tool call --> T1
T1 -- result --> B
B -- optional --> T2
B -- optional --> T3
B --> C[AI response]
C --> D{Agent wrapper}
D -- persist messages --> B
D -- extract code blocks --> E[Sandbox execution]
E --> F[fig]
F --> G[get_figure]
- The LangGraph agent plans and decides when to call tools.
- The wrapper persists full graph messages between turns and executes any returned code blocks to keep
figupdated. - A safe execution environment runs code with an allowlist and a main-thread-only timeout.
Features
- AI-powered visualization generation
- Support for various Plotly chart types
- Automatic data preprocessing
- Interactive visualization capabilities
- LangGraph-based tool calling and control flow
- Debug logging via
PlotAgent(debug=True)orPLOT_AGENT_DEBUG=1
Requirements
- Python 3.8 or higher
- Dependencies are automatically installed with the package
Development
- Run unit tests:
make test
- Execute all example notebooks:
make run-examples
- Execute with debug logs enabled:
make run-examples-debug
- Quick CLI repro that prints evolving code each step:
make run-example-script
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 plot_agent-0.5.1.tar.gz.
File metadata
- Download URL: plot_agent-0.5.1.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
796a39f1284cf26bba38ef1a75e07c520edf2a29e51991c4aadd16ffb51a93f1
|
|
| MD5 |
e23ff43407236faed864e540b2bf6961
|
|
| BLAKE2b-256 |
45a06f955fa1ebdf5794b14ef5be2f1350d8671e094354c928971d756f327bdd
|
Provenance
The following attestation bundles were made for plot_agent-0.5.1.tar.gz:
Publisher:
publish.yml on andrewm4894/plot-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plot_agent-0.5.1.tar.gz -
Subject digest:
796a39f1284cf26bba38ef1a75e07c520edf2a29e51991c4aadd16ffb51a93f1 - Sigstore transparency entry: 914102397
- Sigstore integration time:
-
Permalink:
andrewm4894/plot-agent@982c61b2eb6f9ebcf2b5f4cf35f3159adf356add -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/andrewm4894
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@982c61b2eb6f9ebcf2b5f4cf35f3159adf356add -
Trigger Event:
release
-
Statement type:
File details
Details for the file plot_agent-0.5.1-py3-none-any.whl.
File metadata
- Download URL: plot_agent-0.5.1-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14561673362a05d3bf2ef5f71c64d913925749639cdb587388d9e3c2fb64f317
|
|
| MD5 |
df9fcbb81721b31be86787e22ec43ab8
|
|
| BLAKE2b-256 |
e410620b9033564f4c70f9f404e6a95b533e584c5de15b2d1d60a7d9a0a237f1
|
Provenance
The following attestation bundles were made for plot_agent-0.5.1-py3-none-any.whl:
Publisher:
publish.yml on andrewm4894/plot-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plot_agent-0.5.1-py3-none-any.whl -
Subject digest:
14561673362a05d3bf2ef5f71c64d913925749639cdb587388d9e3c2fb64f317 - Sigstore transparency entry: 914102488
- Sigstore integration time:
-
Permalink:
andrewm4894/plot-agent@982c61b2eb6f9ebcf2b5f4cf35f3159adf356add -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/andrewm4894
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@982c61b2eb6f9ebcf2b5f4cf35f3159adf356add -
Trigger Event:
release
-
Statement type: