Python繪圖還在用Matplotlib?out了 !發現一款手繪可視化神器!
- 2019 年 12 月 5 日
- 筆記
來源: https://github.com/chenjiandongx/cutecharts
今天,給大家介紹一個很酷的 Python 手繪風格可視化神包:cutecharts。
和 Matplotlib 、pyecharts 等常見的圖表不同,使用這個包可以生成下面這種看起來像手繪的各種圖表,在一些場景下使用效果可能會更好。

GitHub 地址:
https://github.com/chenjiandongx/cutecharts
怎麼畫出這些圖表呢,很簡單,一行命令先安裝好該庫:
pip install cutecharts
也可以使用源碼安裝的方式:
$ git clone https://github.com/chenjiandongx/cutecharts.git $ cd cutecharts $ pip install -r requirements.txt $ python setup.py install
下面就介紹下每個圖表如何繪製。
首先是一些圖表共通的參數:
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()

img
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

img
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()

img
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

img
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

img
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()

img
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

img
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

img
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

Scatter(散點圖)
cutecharts.charts.Scatter
API
cutecharts.charts.Scatter.set_options
Params Desc ------ ---- x_label: str = "" X 坐標軸名稱 y_label: str = "" Y 坐標軸名稱 x_tick_count: int = 3 X 軸刻度分割段數 y_tick_count: int = 3 Y 軸刻度分割段數 is_show_line: bool = False 是否將散點連成線 dot_size: int = 1 散點大小 time_format: Optional[str] = None 日期格式 legend_pos: str = "upLeft" 圖例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可選 colors: Optional[Iterable] = None label 顏色數組 font_family: Optional[str] = None CSS font-family
cutecharts.charts.Scatter.add_series
Params Desc ------ ---- name: str series 名稱 data: Iterable series 數據列表,[(x1, y1), (x2, y2)]
Demo
Scatter-基本示例
from cutecharts.charts import Scatter from cutecharts.components import Page from cutecharts.faker import Faker def scatter_base() -> Scatter: chart = Scatter("Scatter-基本示例") chart.set_options(x_label="I'm xlabel", y_label="I'm ylabel") chart.add_series( "series-A", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) chart.add_series( "series-B", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) return chart scatter_base().render()

img
Scatter-散點大小
def scatter_dotsize_tickcount(): chart = Scatter("Scatter-散點大小") chart.set_options(dot_size=2, y_tick_count=8) chart.add_series( "series-A", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) chart.add_series( "series-B", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) return chart

img
Scatter-散點連成線
def scatter_show_line(): chart = Scatter("Scatter-散點連成線") chart.set_options(y_tick_count=8, is_show_line=True) chart.add_series( "series-A", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) chart.add_series( "series-B", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())] ) return chart

img
覺得不錯就趕緊去嘗嘗鮮,點個贊再走!