前言
Pyecharts 是一個用于生成 Echarts 圖表的類庫,由 Python 實作接口,其追根溯源可到百度曾開源的一個資料可視化 JS 庫 Echarts。與我們平常用的 Matplotlib 不同,Echarts 圖表不僅美觀靓麗,而且是動态可互動的,API 調用也很友善,幾行代碼就能實作圖形渲染 ... 如此美麗的繪圖工具自是令人喜愛。然而,Pyecharts 也有缺點,比如官方文檔目錄置于左側欄,未全漢化且标題無法折疊,查找不便;許多 API 無參數說明,僅給出執行個體,甚至無注釋 ...... 當然,事物的發展是前進性和曲折性的統一,有壓力才有動力,畢竟是開源的。
即便如此,Pyecharts 的效果依舊令人感到驚豔,值得去了解和嘗試,本文将簡要展示其中的一種 —— 餅圖 (Pie)。
一、安裝
pip 安裝,在指令行輸入:
pip install pyecharts
若太慢,就清華源安裝:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
二、示例
2.1 資料準備
首先自定義一些資料用于展示:
## 導包 —— 餅狀圖 Pie
import pyecharts.options as opts
from pyecharts.charts import Pie
## 自定義示例資料
# 月份
month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
# 平均溫度
temp = [1.8, 2.5, 3.8, 7.5, 9.6, 15.4, 25.0, 29.4, 28.3, 11.3, 5.4, 1.9]
# 平均降水量
rain = [0.1, 4.6, 5.8, 14.2, 16.3, 25.3, 34.5, 45.2, 41.0, 16.3, 9.9, 4.1]
# 資料打包
data_pair_temp = [list(data) for data in zip(month, temp)] # month 相當于自變量, temp 相當于因變量
data_pari_rain = [list(data) for data in zip(month, rain)] # month 相當于自變量, rain 相當于因變量
# 資料整理(沒必要)
#data_pair.sort(key=lambda x: x[1])
注意資料需要打包成嵌套清單的形式,例如:
>>> data_pair_temp
[['Jan', 1.8],
['Feb', 2.5],
['Mar', 3.8],
['Apr', 7.5],
['May', 9.6],
['Jun', 15.4],
['Jul', 25.0],
['Aug', 29.4],
['Sep', 28.3],
['Oct', 11.3],
['Nov', 5.4],
['Dec', 1.9]]
2.2 基本圖形
通過執行個體化 Pie 對象、調用 add() 添加基本參數、調用 set_global_opts () 設定全局參數、調用 set_series_opts () 設定系列參數、調用 render() 渲染圖像檔案這些基本步驟,就可以繪制出一個簡單的圖形。以下繪制了一個 basic 餅圖:
# basic
# 可以賦予對象,也可不必,因為渲染是通過 .render() 語句完成的
p = (
Pie() # 執行個體化
.add(
series_name="平均溫度", # 系列名稱
data_pair=data_pair_temp,# 饋入資料
radius="35%", # 餅圖半徑比例
center=["50%", "50%"], # 餅圖中心坐标
label_opts=opts.LabelOpts(is_show=False, position="center"), # 标簽位置
)
.set_global_opts(legend_opts=opts.LegendOpts(is_show=False)) # 不顯示圖示
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 标簽顔色
.render("Pie_basic.html") # 渲染檔案及其名稱
#.render_notebook()
)
注意,儲存的是 html 檔案,将其放在浏覽器即可打開:

2.3 擴充設定
事實上,可設定的選項很豐富,雖然不能一一示範,但可以簡要展示更多參數設定。以下繪制了一個 rosetype 的餅圖:
## rosetype
# 可以賦予對象,也可不必,因為渲染是通過 .render() 語句完成的
(
# 執行個體化 Pie 對象
Pie(init_opts=opts.InitOpts(width="800px", height="600px", bg_color="#2c343c")) # 畫布尺寸 + 背景顔色
.add( ## 圖形設定
series_name="平均降水", # 系列名稱
data_pair=data_pari_rain, # 饋入資料
rosetype="radius", # 餅圖類型
radius="35%", # 餅圖半徑比例
center=["50%", "50%"], # 餅圖中心坐标
label_opts=opts.LabelOpts(is_show=False, position="center"), # 标簽顯示與位置設定
)
.set_global_opts( ## 全局設定
title_opts=opts.TitleOpts(
title="全年氣候模拟資料", # 标題
pos_left="center", # 标題水準位置
pos_top="50", # 标題與畫布頂端距離
title_textstyle_opts=opts.TextStyleOpts(color="#fff"), # 标題顔色
),
legend_opts=opts.LegendOpts(is_show=False), # 不顯示圖示
)
.set_series_opts( ## 系列設定
label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.1)"), # 标簽顔色 (RGB+透明度)
)
.render("Pie_rosetype.html")
)
參考文獻:
官方文檔之餅圖 Pie:http://gallery.pyecharts.org/#/Pie/README
Github:https://github.com/pyecharts/pyecharts