Production-Grade Visualization Intelligence: WebGPU rendering (1000x faster), data streaming, plugin architecture, real-time collaboration, enhanced interactivity - 100% offline, zero API costs!
Project description
VizForge
Visualization Intelligence Platform — 50+ chart types, natural language queries, predictive analytics, auto-storytelling, 13+ data connectors, visual bias detection, and GPU-accelerated rendering. 100% offline, zero API costs.
Installation
pip install vizforge
Quick Start
import vizforge as vz
import pandas as pd
df = pd.DataFrame({
"month": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
"revenue": [120, 145, 132, 178, 195, 210],
"cost": [80, 92, 88, 101, 110, 118],
})
# Natural language → chart (no API key)
chart = vz.ask("Show revenue and cost trend as a line chart", df)
chart.show()
# Forecast next 3 months
fc = vz.forecast(df, target="revenue", periods=3)
fc.show()
# Auto-discover insights
insights = vz.discover_insights(df)
for ins in insights:
print(ins.summary)
Features at a Glance
| Feature | Description |
|---|---|
| 50+ Chart Types | 2D, 3D, geo, network, real-time, statistical |
| NLQ Engine | Talk to your data in plain English — no API needed |
| Predictive Analytics | Forecast, trend detection, anomaly detection, seasonality |
| Auto-Storytelling | Generate narrative reports with evidence-based insights |
| Visual Bias Detector | Catch misleading scales, cherry-picking, and chartjunk |
| Chart Reasoning | Explainable chart selection with confidence scores |
| Dashboard Builder | Multi-chart dashboards with filters, KPI cards, callbacks |
| 13+ Connectors | PostgreSQL, MySQL, MongoDB, S3, GCS, REST, GraphQL, Excel, Parquet |
| Video Export | Animate charts to MP4/WebM/GIF |
| Plugin System | Extend with custom chart types, connectors, and renderers |
| Data Streaming | Progressive rendering for infinite-size datasets |
| GPU Rendering | WebGPU-accelerated charts (1000x faster than Plotly) |
Natural Language Queries (NLQ)
import vizforge as vz
import pandas as pd
df = pd.read_csv("sales.csv")
# Ask questions in plain English
vz.ask("Show top 10 products by revenue as a bar chart", df).show()
vz.ask("Plot monthly sales trend with forecast", df).show()
vz.ask("Compare Q1 vs Q2 performance", df).show()
vz.ask("Which region had the highest growth?", df).show()
# NLQ Engine directly
nlq = vz.NLQEngine()
result = nlq.query("Show correlation between price and sales", df)
print(result.chart_type) # scatter
print(result.explanation) # "Scatter plot chosen: 2 continuous variables, correlation question"
result.chart.show()
Predictive Analytics
import vizforge as vz
import pandas as pd
df = pd.DataFrame({
"date": pd.date_range("2024-01-01", periods=365),
"value": [100 + i * 0.3 + (i % 30) * 5 for i in range(365)],
})
# Forecast next 90 days
fc = vz.forecast(df, target="value", periods=90)
fc.show() # chart with confidence intervals
# Use forecaster directly
forecaster = vz.TimeSeriesForecaster(method="auto")
forecaster.fit(df, "date", "value")
future = forecaster.predict(90)
print(future[["date", "predicted", "lower", "upper"]].tail())
# Trend detection
trend = vz.detect_trend(df, "value")
print(trend.direction) # "upward"
print(trend.slope) # 0.32
print(trend.p_value) # 0.0001
# Anomaly detection
anomalies = vz.detect_anomalies(df, "value", method="zscore", threshold=3.0)
anomalies.show()
# Seasonality analysis
season = vz.analyze_seasonality(df, "value")
print(season.dominant_period) # 30 (monthly cycle)
print(season.strength) # 0.78
Auto-Storytelling & Insights
import vizforge as vz
df = pd.read_csv("quarterly_report.csv")
# Discover insights automatically
insights = vz.discover_insights(df)
for ins in insights:
print(f"[{ins.type:15s}] {ins.summary}")
print(f" Evidence: {ins.evidence}")
print(f" Confidence: {ins.confidence:.0%}")
# [trend ] Revenue grew 23% over the past 4 quarters
# Evidence: Linear regression slope = 42.3k/quarter, p=0.003
# Confidence: 94%
# Generate narrative story
story = vz.generate_story(df, title="Q2 2026 Performance Report")
print(story) # human-readable narrative with statistics
# Full HTML report (charts + narrative + recommendations)
report = vz.generate_report(df, format="html", output="report.html")
Visual Bias Detection
import vizforge as vz
# Detect misleading visualization patterns
detector = vz.VisualBiasDetector()
report: vz.BiasReport = detector.analyze(df, chart_type="bar", y_col="revenue")
for issue in report.issues:
print(f" [{issue.severity}] {issue.description}")
print(f" Recommendation: {issue.fix}")
# [HIGH ] Y-axis truncated at 95 (not zero) — inflates visual change by 8x
# Recommendation: Start Y-axis at 0 or label the break clearly
# [MEDIUM] Cherry-picked date range omits Q4 decline
# Recommendation: Show full historical range
Chart Reasoning Engine
import vizforge as vz
engine = vz.ChartReasoningEngine()
decision: vz.ChartDecision = engine.recommend(
df,
x="date", y="revenue",
question="How has revenue changed over time?"
)
print(decision.chart_type) # "line"
print(decision.confidence) # 0.94
print(decision.reasoning) # "Time series with continuous y → line chart optimal"
print(decision.alternatives) # ["area", "bar"] with explanations
Dashboard Builder
import vizforge as vz
dashboard = vz.create_dashboard(title="Sales Dashboard", theme="dark")
dashboard.add(vz.KPICard(label="Total Revenue", value=1_240_000, delta=0.18))
dashboard.add(vz.KPICard(label="Customers", value=8_420, delta=0.07))
dashboard.add(vz.ChartComponent(chart=revenue_line_chart, title="Revenue Trend"))
dashboard.add(vz.ChartComponent(chart=region_bar_chart, title="By Region"))
dashboard.add(vz.FilterComponent(column="region", label="Filter by Region"))
dashboard.add(vz.TextComponent("Analysis: Revenue growth accelerated in Q2."))
dashboard.show() # interactive HTML
dashboard.export("dashboard.html")
Data Connectors (13+ Sources)
import vizforge as vz
# PostgreSQL
conn = vz.connect("postgresql", host="localhost", db="sales", user="admin", password="...")
df = conn.query("SELECT month, revenue FROM sales WHERE year=2026")
# S3 / Parquet
s3 = vz.connect("s3", bucket="my-data", key="reports/q2.parquet")
df = s3.read()
# REST API
api = vz.connect("rest", url="https://api.example.com/data", headers={"Authorization": "Bearer ..."})
df = api.fetch(endpoint="/metrics?period=30d")
# Excel
xl = vz.connect("excel", path="data.xlsx", sheet="Q2")
df = xl.read()
# List available connectors
print(vz.list_connectors())
# ['postgresql', 'mysql', 'sqlite', 'mongodb', 's3', 'gcs', 'azure_blob',
# 'rest', 'graphql', 'excel', 'parquet', 'hdf5', 'html_table', 'web_scraper']
Video Export (Animated Charts)
import vizforge as vz
chart = vz.ask("Show monthly revenue as animated bar race", df)
# Export to video
vz.export_video(
chart,
output="revenue_race.mp4",
format="mp4",
fps=30,
duration=15,
animation=vz.AnimationType.BAR_RACE,
)
# GIF for social media
vz.export_video(chart, output="preview.gif", format="gif", fps=15, duration=5)
Plugin System
import vizforge as vz
from vizforge import ChartPlugin, PluginMetadata
class WaterfallChart(ChartPlugin):
metadata = PluginMetadata(name="waterfall", version="1.0.0", author="me")
def render(self, df, x, y, **kwargs):
# ... build waterfall chart ...
return figure
vz.register_plugin(WaterfallChart)
chart = vz.get_plugin("waterfall").render(df, x="category", y="change")
print(vz.list_plugins())
Data Streaming
import vizforge as vz
# Stream from large file without loading into memory
stream = vz.stream_from_file("giant_log.csv", chunk_size=10_000)
chart = vz.StreamingChart(stream, chart_type="line", x="timestamp", y="value")
chart.show() # renders progressively as data loads
# Stream from database
db_stream = vz.stream_from_database(
"postgresql://...",
query="SELECT ts, price FROM ticks ORDER BY ts",
chunk_size=50_000,
)
Themes
import vizforge as vz
# Built-in themes
vz.set_theme("dark") # dark background
vz.set_theme("minimal") # clean, white
vz.set_theme("corporate") # blue/grey business style
vz.set_theme("colorblind") # WCAG 2.1 AA accessible palette
# Register custom theme
vz.register_theme("mybrand", {
"background": "#0D0D0D",
"primary": "#FF6B35",
"font_family": "Inter, sans-serif",
})
vz.set_theme("mybrand")
print(vz.list_themes())
Synthetic Data for Testing
import vizforge as vz
engine = vz.SyntheticVisualizationEngine()
config = vz.SyntheticVizConfig(
rows=1000,
columns=["date", "revenue", "cost", "region"],
trend="upward",
seasonality="monthly",
noise=0.1,
)
df = engine.generate(config)
License
MIT — Teyfik Öz
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 vizforge-3.4.0.tar.gz.
File metadata
- Download URL: vizforge-3.4.0.tar.gz
- Upload date:
- Size: 269.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
677e22c962441f7dbb8691a747c56ce34bd7db8a69e6e0ee08d88f63955d76c8
|
|
| MD5 |
0e38a32d9ceeaeb1c315905f02d99fe8
|
|
| BLAKE2b-256 |
c88d49b19430c4fa188f983a30d4fe3b7c44e92efac949272ba332253eddcaa0
|
File details
Details for the file vizforge-3.4.0-py3-none-any.whl.
File metadata
- Download URL: vizforge-3.4.0-py3-none-any.whl
- Upload date:
- Size: 349.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cde8afccdd3ffed6eacee396d4e4f780dd9d2c64f73489f83c3848c7baa5a057
|
|
| MD5 |
a85b2f6565b02bde4d5d2e8e50c4de34
|
|
| BLAKE2b-256 |
c0187bfabd7f9e56571817674631289822cf626db0b76295f582f1c9f539f19f
|