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

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