Skip to main content

Modern, interactive charts for Jupyter notebooks

Project description

PyPI MIT License

notecharts (note-charts or not-echarts) is designed for web-quality, interactive charts in Jupyter notebooks through Apache ECharts. It faithfully brings the full power of ECharts' declarative JSON-like API directly into Python notebooks, with a few notable enhancements.

Why notecharts?

If you've done data visualization in Python before, you've likely encountered these standard tools:

  • matplotlib: Excellent for publication-quality static charts, but lacks out-of-the-box interactivity.
  • plotly.py: Great for interactive charts, but can require extensive configuration to achieve a polished, modern aesthetic or smooth animations.

Apache ECharts is an incredibly powerful web plotting library. While there have been previous attempts to bring it to Jupyter, they often come with trade-offs:

  • pyecharts: Powerful, but introduces a deep "Pythonic" abstraction. This deviates from the official ECharts API, making it difficult to translate JavaScript examples from the docs into Python.
  • ipecharts: Provides widget integration, but can have inconsistent interactivity and currently lacks support for environments like Google Colab.

notecharts bridges this gap. It provides a thin layer that allows you to write ECharts options exactly as they appear in the official docs, while handling the heavy lifting of library loading, font injection, dynamic palettes, and serialization.

Force Directed Graph Multi-Line
Force Directed Graph Multi-Line
Geo/Map 3D Scatter
Map Scatter 3D

Click on the images above to view code for making them.

Key Features

  • Declarative API: Pass a dictionary, get a chart. No complex class hierarchies to learn.
  • JSCode Support: Inject raw JavaScript functions for formatters, tooltips, and custom processing logic.
  • Font Injection: Automatically detect font declarations in your config, fetch the corresponding fonts (if available) from Google Fonts.
  • Rich Color Palettes: Access 196 professionally-designed customizable color palettes from Palettable, or make your own through interpolation.
  • Pre-built Charts: Includes pre-built primitives like Bar, Line, Scatter, and Radar with beautiful defaults.
  • Environment Agnostic: Works seamlessly in VS Code, JupyterLab, and Google Colab.
  • Compression: Compresses the data and config objects so the notebook doesn't balloon in size.

Installation

pip install notecharts

Usage

Full Control

Complete control over every aspect of the chart, through a beautiful, declarative API. If you can find an example on the ECharts Gallery, you can run it in notecharts.

from notecharts import Chart, JSCode, Palette

options = {
    "title": {"text": "Bar Chart"},
    "textStyle": {"fontFamily": "Josefin Sans"},    # Automatically loaded from Google Fonts
    "xAxis": {"data": ["Mon", "Tue", "Wed", "Thurs", "Fri"]},
    "yAxis": {},
    "tooltip": {
        "trigger": "axis",
        "formatter": JSCode("function(params) { return params[0].name + ': $' + params[0].value; }")
    },
    "legend": {},
    "series": [
        {
            "name": "Sales",
            "type": "bar",
            "data": [120, 150, 200, 180, 220]
        },
        {
            "name": "Expenses",
            "type": "bar",
            "data": [80, 100, 120, 110, 140]
        },
        {
            "name": "Profit",
            "type": "bar",
            "data": [40, 50, 80, 70, 80]
        }
    ],
    "color": Palette("Plasma", 3)   # Load n colors from any palette,
                                    # or create your own palette through interpolation,
                                    # like Palette(["#003566", "#ffc300"], 5)
}

Chart(options, width="60%").display()

Primitives

Use the pre-configured classes for common visualizations, and optionally override any default styling of the class.

from notecharts import Line

Line(
    x=["Mon", "Tue", "Wed", "Thu", "Fri"],
    y={
        "Product A": [120, 200, 150, 220, 280],
        "Product B": [180, 160, 200, 240, 290],
        "Product C": [160, 120, 140, 190, 250]
    },
    title="Weekly Sales",
    palette="agGrnYl",
    width="650px",
    font="Elms Sans",
    options= {
        "legend": {"itemGap": 25} # Override class defaults
    }
).display()

With DataFrames

All pre-built charts support direct DataFrame integration without manual column extraction:

import pandas as pd
from notecharts import Bar

df = pd.DataFrame({
    'day': ['Mon','Tue', 'Wed', 'Thu', 'Fri'],
    'product_a': [120, 200, 150, 220, 280],
    'product_b': [180, 160, 200, 240, 290],
    'product_c': [160, 120, 140, 190, 250]
})

Bar(
    dataframe = df,
    x = 'day',
    y = {'Product A': 'product_a', 'Product B': 'product_b', 'Product C': 'product_c'},
    width = "650px",
    font = "Josefin Sans",
    palette = {
        "palette": "Plasma",
        "saturation": 0.75          # Customize the palette
    }
).display()

Disclaimer

  • Security: Use of JSCode allows for arbitrary JavaScript execution in the browser/notebook context. Always ensure you are passing trusted code and data to your charts.
  • Connectivity: This library is lightweight because it fetches the ECharts, ECharts-GL and fflate (for data decompression) minified code from cdn.jsdelivr.net at runtime, so an active internet connection is required to render charts for the first time. It is then cached in the browser/IDE context and subsequent renders can work offline.

License & Attribution

  • notecharts is licensed under the MIT License.
  • Apache ECharts: This library is a wrapper for Apache ECharts which is licensed under the Apache License 2.0.
  • Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.
  • Part of the Featured on Awesome README project.

References

See the ECharts gallery for bespoke examples, or the official docs for an in-depth explanation of features and how to use them.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notecharts-0.4.0.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notecharts-0.4.0-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file notecharts-0.4.0.tar.gz.

File metadata

  • Download URL: notecharts-0.4.0.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for notecharts-0.4.0.tar.gz
Algorithm Hash digest
SHA256 c24a13e5e147ffc8f3b230e5c518d78efd76bde53ec482faba453c6609a46b73
MD5 9b268ed5669380578675d98a0b3df006
BLAKE2b-256 b12ef451a8d4f4eea32b0958a7a33b0a0e8438efd3a2cfbe7c02d6f725b52af3

See more details on using hashes here.

File details

Details for the file notecharts-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: notecharts-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for notecharts-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4295448b680dfdf5f4f9df779f1e0b4db0349800515dd775f0454c369e866436
MD5 57947cbfba3d2ed6050eaf4be37b3a83
BLAKE2b-256 f94c1b9bdc79fb582d6efb8bbcfaf8918da23ebc6f10b236f859e864ffe07b38

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page