Cutecharts.py
๐ Hand drawing style charts library for Python
Install / Use
/learn @cutecharts/Cutecharts.pyREADME
๐ฃ Idea
chart.xkcd is an interesting visualization library written in Javascript, the chart style of chart.xkcd is so cute that I love it at first sight.
There is no doubt that Javascript has more advantages in interaction as well as visual effect. Besides that, as we all know, Python is an expressive language and is loved by data science community. Hence I want to combine the strength of both technologies, as the result of this idea, cutecharts.py is born.
Unfortunately, chart.xkcd only supports a few chart types as a visualization libraray, thus if you have more needs in various kind of chart, pyecharts is better.
What's worth pointing out is that cutecharts is more about a library used to learn how to combine Javascript world with Python/notebook. The project structure of cutecharts is the same as pyecharts and it supports all core features with pyecharts while being more lightweight also more concise overall.
The aim of this project is showing others that it's not difficult to write a pyecharts-like project. In fact, pyecharts does have no magic in its source code. As a member of Python cummunity, I sincerely hope more and more developers can use their creativity to make lots of related projects for our favorite Python world.
๐ฐ Installation
pip install
$ pip(3) install cutecharts
install from source
$ git clone https://github.com/cutecharts/cutecharts.py.git
$ cd cutecharts.py
$ pip install -r requirements.txt
$ python setup.py install
๐ Usage
- charts: docs/charts.md
- components: docs/components.md
- changelog: docs/changelog.md
Render HTML
from cutecharts.charts import Line
chart = Line("ๆๅๅบ้ๅฎๆ
ๅต")
chart.set_options(
labels=["่กฌ่กซ", "ๆฏ่กฃ", "้ขๅธฆ", "่ฃคๅญ", "้ฃ่กฃ", "้ซ่ท้", "่ขๅญ"],
x_label="I'm xlabel",
y_label="I'm ylabel",
)
chart.add_series("series-A", [57, 134, 137, 129, 145, 60, 49])
chart.add_series("series-B", [114, 55, 27, 101, 125, 27, 105])
chart.render()
And the render.html is rendered as below. Isn't that cool๏ผ
Notebook
Jupyter Notebook

JupyterLab
There are some jupyterlab details that you should pay attention to.
# 1. imoport this on the top.
from cutecharts.globals import use_jupyter_lab; use_jupyter_lab()
# 2. call the `load_javascript` function when you renders chart first time.
chart.load_javascript()

๐ Demo
<div align="center"> <img src="https://user-images.githubusercontent.com/19553554/66558121-9f760380-eb85-11e9-8b37-6d4dbd39f2e8.png" width="33%"/> <img src="https://user-images.githubusercontent.com/19553554/66558192-bddbff00-eb85-11e9-8cf1-bef4b93434af.png" width="33%"/> <img src="https://user-images.githubusercontent.com/19553554/66558265-db10cd80-eb85-11e9-8450-1535b6e68bc7.png" width="33%"/> <img src="https://user-images.githubusercontent.com/19553554/66558482-317e0c00-eb86-11e9-96f9-4de0f1611c3d.png" width="33%"/> <img src="https://user-images.githubusercontent.com/19553554/66558545-4ce91700-eb86-11e9-9cda-402e1e6f19b1.png" width="33%"/> <img src="https://user-images.githubusercontent.com/19553554/66558614-6c803f80-eb86-11e9-8386-46315c5f0843.png" width="33%"/> </div>All demo codes are under examples directory.
โ Software development
Unit tests
$ pip install -r tests/requirements.txt
$ test
CI/CD
Travis CI and AppVeyor is place for continuous integration.
Coding styles
flake8, Codecov and pylint are used.
๐ License
MIT ยฉchenjiandongx
Related Skills
node-connect
348.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
108.8kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
108.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
348.0kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
