{"id":50069177,"url":"https://github.com/dmunish/notecharts","last_synced_at":"2026-05-23T22:01:21.050Z","repository":{"id":355446131,"uuid":"1226355400","full_name":"dmunish/notecharts","owner":"dmunish","description":"Modern, interactive charts for Jupyter notebooks","archived":false,"fork":false,"pushed_at":"2026-05-23T09:07:37.000Z","size":12938,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T11:14:45.275Z","etag":null,"topics":["apache","apache-echarts","data-visualization","echarts","interactive-visualizations","jupyter","jupyter-notebook","wrapper-library"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmunish.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T09:36:41.000Z","updated_at":"2026-05-23T09:07:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dmunish/notecharts","commit_stats":null,"previous_names":["dmunish/notecharts"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/dmunish/notecharts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmunish%2Fnotecharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmunish%2Fnotecharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmunish%2Fnotecharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmunish%2Fnotecharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmunish","download_url":"https://codeload.github.com/dmunish/notecharts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmunish%2Fnotecharts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33413623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache","apache-echarts","data-visualization","echarts","interactive-visualizations","jupyter","jupyter-notebook","wrapper-library"],"created_at":"2026-05-22T02:00:28.685Z","updated_at":"2026-05-23T22:01:21.042Z","avatar_url":"https://github.com/dmunish.png","language":"Python","funding_links":[],"categories":["Examples"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/dmunish/notecharts/blob/main/assets/notecharts-banner.png?raw=true\" height=400 width=\"auto\" /\u003e\n\u003c/p\u003e\n\n[![PyPI](https://img.shields.io/pypi/v/notecharts.svg?style=for-the-badge)](https://pypi.org/project/notecharts)\n[![MIT License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n\n**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 couple enhancements.\n\n## Why notecharts?\n\nIf you've done data visualization in Python before, you've likely encountered these standard tools:\n- **matplotlib:** Excellent for publication-quality static charts, but lacks out-of-the-box interactivity.\n- **plotly.py:** Great for interactive charts, but can require extensive configuration to achieve a polished, modern aesthetic or smooth animations.\n\nApache 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:\n- **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.\n- **ipecharts:** Provides widget integration, but can have inconsistent interactivity and currently lacks support for environments like Google Colab.\n\n**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.\n\n| Force Directed Graph | Multi-Line |\n|:---:|:---:|\n| [![Force Directed Graph](https://github.com/dmunish/notecharts/blob/main/assets/force-directed-graph.png?raw=true)](https://github.com/dmunish/notecharts/blob/main/examples/force-directed-graph.ipynb) | [![Multi-Line](https://github.com/dmunish/notecharts/blob/main/assets/line.png?raw=true)](https://github.com/dmunish/notecharts/blob/main/examples/line-bar.ipynb) |\n| **Geo/Map** | **3D Scatter** |\n| [![Map](https://github.com/dmunish/notecharts/blob/main/assets/geo.png?raw=true)](https://github.com/dmunish/notecharts/blob/main/examples/geo.ipynb) | [![Scatter 3D](https://github.com/dmunish/notecharts/blob/main/assets/scatter-3d.png?raw=true)](https://github.com/dmunish/notecharts/blob/main/examples/scatter-3D.ipynb) |\n\nClick the charts to view how to create them.\n\n## Key Features\n\n- **Declarative API:** Pass a dictionary, get a chart. No complex class hierarchies to learn.\n- **`JSCode` Support:** Inject raw JavaScript functions for formatters, tooltips, and custom processing logic.\n- **Font Injection:** Automatically detect font declarations in your config, fetch the corresponding fonts (if available) from Google Fonts.\n- **Rich Color Palettes:** Access 196 professionally-designed color palettes from [Palettable](https://jiffyclub.github.io/palettable/) and customize them.\n- **Pre-built Charts:** Includes pre-built primitives like `Bar`, `Line`, `Scatter`, and `Radar` with beautiful defaults.\n- **Environment Agnostic:** Works seamlessly in VS Code, JupyterLab, and Google Colab.\n\n## Installation\n\n```bash\npip install notecharts\n```\n\n## Usage\n\n### The Declarative Way\nIf you can find an example on the [ECharts Gallery](https://echarts.apache.org/examples/en/index.html), you can run it in `notecharts`.\n\n```python\nfrom notecharts import Chart, JSCode, Palette\n\noptions = {\n    \"title\": {\"text\": \"Bar Chart\"},\n    \"textStyle\": {\"fontFamily\": \"Josefin Sans\"},  # Automatically loaded from Google Fonts\n    \"xAxis\": {\"data\": [\"Mon\", \"Tue\", \"Wed\", \"Thurs\", \"Fri\"]},\n    \"yAxis\": {},\n    \"tooltip\": {\n        \"trigger\": \"axis\",\n        \"formatter\": JSCode(\"function(params) { return params[0].name + ': $' + params[0].value; }\")\n    },\n    \"legend\": {},\n    \"series\": [\n        {\n            \"name\": \"Sales\",\n            \"type\": \"bar\",\n            \"data\": [120, 150, 200, 180, 220]\n        },\n        {\n            \"name\": \"Expenses\",\n            \"type\": \"bar\",\n            \"data\": [80, 100, 120, 110, 140]\n        },\n        {\n            \"name\": \"Profit\",\n            \"type\": \"bar\",\n            \"data\": [40, 50, 80, 70, 80]\n        }\n    ],\n    \"color\": Palette(\"Plasma\", 3),  # Load the Plasma palette with 3 colors\n}\n\nChart(options, width=\"60%\").display()\n```\n\n### The Quick Way\nUse the pre-configured classes for common visualizations with sensible defaults and automatic palette generation.\n\n```python\nfrom notecharts import Line\n\nLine(\n    x=[\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"],\n    y={\n        \"Product A\": [120, 200, 150, 220, 280],\n        \"Product B\": [180, 160, 200, 240, 290],\n        \"Product C\": [160, 120, 140, 190, 250]\n    },\n    title=\"Weekly Sales\",\n    palette=\"agGrnYl\",\n    width=\"650px\",\n    options= { # Override class defaults\n        \"textStyle\": {\"fontFamily\": \"Josefin Sans\"}, \n    }\n).display()\n```\n\nWith palette options:\n\n```python\nfrom notecharts import Bar\n\nBar(\n    x=[\"Jan\", \"Feb\", \"Mar\", \"Apr\"],\n    y={\n        \"Sales\": [150, 230, 224, 310],\n        \"Expenses\": [120, 150, 180, 210]\n    },\n    title=\"Revenue vs Expenses\",\n    palette={\n        \"palette\": \"BluYl\",\n        \"saturation\": 0.5,  # Adjust saturation\n    },\n    theme=\"dark\",\n    width=\"650px\"\n).display()\n```\n\n## Disclaimer\n\n- **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.\n- **Connectivity:** This library is ultra-lightweight because it does not ship with the ECharts binaries. It fetches them from `cdn.jsdelivr.net` at runtime, so an active internet connection is required to render charts if the libraries are not already cached.\n\n## License \u0026 Attribution\n\n- **notecharts** is licensed under the [MIT License](LICENSE).\n- **Apache ECharts**: This library is a wrapper for [Apache ECharts](https://echarts.apache.org/en/index.html) which is licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \n- Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.\n- Part of the [![Featured on Awesome README](https://awesome.re/badge-flat.svg)](https://github.com/matiassingers/awesome-readme) project.\n\n## References\nSee the [ECharts gallery](https://echarts.apache.org/examples/en/index.html) for bespoke examples, or the [official docs](https://echarts.apache.org/en/option.html) for an in-depth explanation of features and how to use them.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmunish%2Fnotecharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmunish%2Fnotecharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmunish%2Fnotecharts/lists"}