一個有趣手繪風格的Python繪圖庫使用

今天無意間刷到了一個跟Python可視化相關的頭條,就點進去看看,這是一位作者編寫的手繪風格的繪圖工具,對可視化工作一直都是比較感興趣的,所以這裡就想直接上手使用一下。

GitHub地址在這裡。首頁截圖如下:

最下方也給出了安裝方式,應該是以Python3為基礎編寫的,所以Python2應該是安裝不了的,所以這裡我本地使用的話也是基於Python3來進行安裝的,安裝截圖如下:

成功安裝後就可以使用了,這裡我藉助的是jupyter-notebook來進行實踐的,原因是這個庫本身也是會有與web交互的地方的,所以我覺得jupyter可能更合適。下面是具體的實踐:

【柱狀圖】

【折線圖】

【柱狀圖+折線圖】

當前,也是可以一張圖裡面同時繪製柱狀圖和折線圖或者其他類型的圖像的,這裡簡單舉例:

from cutecharts.charts import Bar, Line from cutecharts.faker import Faker from cutecharts.components import Page def bar_base() -> Bar: chart = Bar("手繪風格的柱狀圖") chart.set_options(labels=Faker.choose(), x_label="類別", y_label="數量") chart.add_series("series-A", Faker.values()) return chart def line_base() -> Line: chart = Line("手繪風格的折線統計圖") chart.set_options(labels=Faker.choose(), x_label="種類", y_label="數量") chart.add_series("series-A", Faker.values()) chart.add_series("series-B", Faker.values()) return chart page = Page() page.add(bar_base(),line_base()) page.render('both.html')

由於截圖比較大,這裡採用保存本地文件的形式,結果如下:

這裡也可以對線條或者圖形的顏色進行調整,如下:

【餅圖】

可以修改字體,如下:

【雷達圖】

【散點圖】

也可以調整散點的大小程度。

也可以將散點連成線,這個我覺得平時使用到的場景比較少。

最後貼出來完整的代碼:

# -*- coding: utf-8 -*- # --- # jupyter: # jupytext: # formats: ipynb,py:light # text_representation: # extension: .py # format_name: light # format_version: '1.4' # jupytext_version: 1.1.6 # kernelspec: # display_name: python36 # language: python # name: python36 # --- # + from cutecharts.charts import Bar, Line from cutecharts.faker import Faker from cutecharts.components import Page def bar_base() -> Bar: chart = Bar("手繪風格的柱狀圖") chart.set_options(labels=Faker.choose(), x_label="類別", y_label="數量") chart.add_series("series-A", Faker.values()) return chart page = Page() page.add(bar_base()) page.render_notebook() # + from cutecharts.charts import Bar, Line from cutecharts.faker import Faker from cutecharts.components import Page def line_base() -> Line: chart = Line("手繪風格的折線統計圖") chart.set_options(labels=Faker.choose(), x_label="種類", y_label="數量") chart.add_series("series-A", Faker.values()) chart.add_series("series-B", Faker.values()) return chart page = Page() page.add(line_base()) page.render_notebook() # + from cutecharts.charts import Bar, Line from cutecharts.faker import Faker from cutecharts.components import Page def bar_base() -> Bar: chart = Bar("手繪風格的柱狀圖") chart.set_options(labels=Faker.choose(), x_label="類別", y_label="數量") chart.add_series("series-A", Faker.values()) return chart def line_base() -> Line: chart = Line("手繪風格的折線統計圖") chart.set_options(labels=Faker.choose(), x_label="種類", y_label="數量") chart.add_series("series-A", Faker.values()) chart.add_series("series-B", Faker.values()) return chart page = Page() page.add(bar_base(),line_base()) page.render('both.html') # + 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 line_tickcount_colors().render_notebook() # + from cutecharts.charts import Pie from cutecharts.components import Page from cutecharts.faker import Faker def pie_base() -> Pie: chart = Pie("手繪風格餅圖") chart.set_options(labels=Faker.choose()) chart.add_series(Faker.values()) return chart pie_base().render_notebook() # - 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_legend_font().render_notebook() def pie_radius(): chart = Pie("Pie-Radius") chart.set_options( labels=Faker.choose(), inner_radius=0, ) chart.add_series(Faker.values()) return chart pie_radius().render_notebook() # + from cutecharts.charts import Radar from cutecharts.components import Page from cutecharts.faker import Faker def radar_base() -> Radar: chart = 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_notebook() # + from cutecharts.charts import Scatter from cutecharts.components import Page from cutecharts.faker import Faker def scatter_base() -> Scatter: chart = Scatter("手繪風格散點圖") chart.set_options(x_label="時間", y_label="數量") 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_notebook() # - 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 scatter_dotsize_tickcount().render_notebook() 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 scatter_show_line().render_notebook()