酷!一个仿漫画手绘风格的 Python 图表库

天涯浪子 提交于 2021-02-02 11:53:00

【导读】:关于数据可视化工具,如果你有点厌烦了常见风格(比如:Matplotlibpyecharts),那可以试试换一种风格。

本文前哨君给大家介绍一个风格完全不一样的开源库:cutecharts,其 UI 效仿 XKCD 漫画风格,在部分场景(比如:个人作品展示)的效果或许会更好。

补充:XKCD 是一个 IT 漫画网站,在国外非常有名气。

这是一张 XKCD 漫画作品的汉化版

为什么会有 cutecharts?

据 cutecharts 的开发者介绍,他个人非常喜欢一个 JS 图表库 chart.xkcd,但它支持的图表类型不多,比 pyecharts 少很多。

Javascript 在数据交互和视觉效果上更有优势,而 Python 是一种深受数据科学界的喜爱的语言。因此,他想结合这两种技术的力量,于是就开发了 cutecharts.py。

此外,cutecharts 更多的是一个库,用来学习如何将 Javascript 世界与 Python/notebook 相结合。cutecharts 的项目结构与 pyecharts 相同,它支持 pyechart s的所有核心功能,同时更轻量级,总体上也更简洁。

GitHub 地址:

https://github.com/chenjiandongx/cutecharts

简单使用

一行命令先安装好该库:

pip install cutecharts

下面就是 cutecharts 项目主页提供的一些示例。

首先是一些图表共通的参数:

Commons

不同图表有着部分相同的方法。

__init__

Params                                          Desc
------                                          ----
title: Optional[str] = None                     图表标题
width: str = "800px"                            图表宽度
height: str = "600px"                           图表高度
assets_host: Optional[str] = None               引用资源 Host

render

Params                                          Desc
------                                          ----
dest: str = "render.html"                       渲染的文件路径
template_name: str = "basic_local.html"         渲染使用的模板,一般不需要修改   

render_notebook

Params                                          Desc
------                                          ----
template_type: str = "basic"                    渲染使用的模板类型,一般不需要修改 

load_javascript

加载 JS 依赖,在 JupyterLab 渲染时使用。

Bar(柱状图)

cutecharts.charts.Bar

API

cutecharts.charts.Bar.set_options

Params                                          Desc
------                                          ----
labels: Iterable                                X 坐标轴标签数据
x_label: str = ""                               X 坐标轴名称
y_label: str = ""                               Y 坐标轴名称
y_tick_count: int = 3                           Y 轴刻度分割段数
colors: Optional[Iterable] = None               label 颜色数组
font_family: Optional[str] = None               CSS font-family

cutecharts.charts.Bar.add_series

Params                                          Desc
------                                          ----
name: str                                       series 名称
data: Iterable                                  series 数据列表

Demo

Bar-基本示例

from cutecharts.charts import Bar
from cutecharts.components import Page
from cutecharts.faker import Faker


def bar_base() -> Bar:
    chart = Bar("Bar-基本示例")
    chart.set_options(labels=Faker.choose(), x_label="I'm xlabel", y_label="I'm ylabel")
    chart.add_series("series-A", Faker.values())
    return chart

bar_base().render()

Bar-调整颜色

def bar_tickcount_colors():
    chart = Bar("Bar-调整颜色")
    chart.set_options(labels=Faker.choose(), y_tick_count=10, colors=Faker.colors)
    chart.add_series("series-A", Faker.values())
    return chart

Line(折线图)

cutecharts.charts.Line

API

cutecharts.charts.Line.set_options

Params                                          Desc
------                                          ----
labels: Iterable                                X 坐标轴标签数据
x_label: str = ""                               X 坐标轴名称
y_label: str = ""                               Y 坐标轴名称
y_tick_count: int = 3                           Y 轴刻度分割段数
legend_pos: str = "upLeft"                      图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
colors: Optional[Iterable] = None               label 颜色数组
font_family: Optional[str] = None               CSS font-family

cutecharts.charts.Line.add_series

Params                                          Desc
------                                          ----
name: str                                       series 名称
data: Iterable                                  series 数据列表

Demo

Line-基本示例

from cutecharts.charts import Line
from cutecharts.components import Page
from cutecharts.faker import Faker


def line_base() -> Line:
    chart = Line("Line-基本示例")
    chart.set_options(labels=Faker.choose(), x_label="I'm xlabel", y_label="I'm ylabel")
    chart.add_series("series-A", Faker.values())
    chart.add_series("series-B", Faker.values())
    return chart
line_base().render()

Line-Legend 位置

def line_legend():
    chart = Line("Line-Legend 位置")
    chart.set_options(labels=Faker.choose(), legend_pos="upRight")
    chart.add_series("series-A", Faker.values())
    chart.add_series("series-B", Faker.values())
    return chart

Line-调整颜色

def line_tickcount_colors():
    chart = Line("Line-调整颜色")
    chart.set_options(labels=Faker.choose(), colors=Faker.colors, y_tick_count=8)
    chart.add_series("series-A", Faker.values())
    chart.add_series("series-B", Faker.values())
    return chart

Pie(饼图)

cutecharts.charts.Pie

API

cutecharts.charts.Pie.set_options

Params                                          Desc
------                                          ----
labels: Iterable                                数据标签列表
inner_radius: float = 0.5                       Pie 图半径
legend_pos: str = "upLeft"                      图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
colors: Optional[Iterable] = None               label 颜色数组
font_family: Optional[str] = None               CSS font-family

cutecharts.charts.Pie.add_series

Params                                          Desc
------                                       ----
data: Iterable                                  series 数据列表

Demo

Pie-基本示例

from cutecharts.charts import Pie
from cutecharts.components import Page
from cutecharts.faker import Faker


def pie_base() -> Pie:
    chart = Pie("Pie-基本示例")
    chart.set_options(labels=Faker.choose())
    chart.add_series(Faker.values())
    return chart


pie_base().render()

Pie-Legend

def pie_legend_font():
    chart = Pie("Pie-Legend")
    chart.set_options(
        labels=Faker.choose(),
        legend_pos="downLeft",
        font_family='"Times New Roman",Georgia,Serif;',
    )
    chart.add_series(Faker.values())
    return chart

Pie-Radius

def pie_radius():
    chart = Pie("Pie-Radius")
    chart.set_options(
        labels=Faker.choose(),
        inner_radius=0,
    )
    chart.add_series(Faker.values())
    return chart

Radar(雷达图)

cutecharts.charts.Radar

API

cutecharts.charts.Radar.set_options

Params                                          Desc
------                                          ----
labels: Iterable                                数据标签列表
is_show_label: bool = True                      是否显示标签
is_show_legend: bool = True                     是否显示图例
tick_count: int = 3                             坐标系分割刻度
legend_pos: str = "upLeft"                      图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
colors: Optional[Iterable] = None               label 颜色数组
font_family: Optional[str] = None               CSS font-family

cutecharts.charts.Radar.add_series

Params                                          Desc
------                                          ----
name: str                                       series 名称
data: Iterable                                  series 数据列表

Demo

Radar-基本示例

from cutecharts.charts import Radar
from cutecharts.components import Page
from cutecharts.faker import Faker


def radar_base() -> Radar:
    chart = Radar("Radar-基本示例")
    chart.set_options(labels=Faker.choose())
    chart.add_series("series-A", Faker.values())
    chart.add_series("series-B", Faker.values())
    return chart


radar_base().render()

Radar-颜色调整

def radar_legend_colors():
    chart = Radar("Radar-颜色调整")
    chart.set_options(labels=Faker.choose(), colors=Faker.colors, legend_pos="upRight")
    chart.add_series("series-A", Faker.values())
    chart.add_series("series-B", Faker.values())
    return chart

这个图表库感谢有兴趣的童鞋,可以试试。

开源前哨 日常分享热门、有趣和实用的开源项目。参与维护 10万+ Star 的开源技术资源库,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!