我們都知道python上的一款可視化工具 matplotlib , 但是它是靜態的。後來發現了 pyecharts 模塊,簡直好用到不行,可視化類型非常多,它是基於 Echarts 開發的。
Echarts 是百度開源的一個數據可視化 JS 庫,憑藉着良好的交互性,精巧的圖表設計,得到了衆多開發者的認可。而 Python,很適合用於數據處理。當數據分析遇上數據可視化時,pyecharts 就誕生了。
下面帶大家快速瞭解 pyecharts 以及基本使用方法:
:sparkles: 特性
- 簡潔的 API 設計,使用如絲滑般流暢,支持鏈式調用
- 囊括了 30+ 種常見圖表,應有盡有
- 支持主流 Notebook 環境,Jupyter Notebook 和 JupyterLab
- 可輕鬆集成至 Flask,Django 等主流 Web 框架
- 高度靈活的配置項,可輕鬆搭配出精美的圖表
- 詳細的文檔和示例,幫助開發者更快的上手項目
- 多達 400+ 地圖,爲地理數據可視化提供強有力的支持
:sparkles: 安裝
1pip install pyecharts 複製代碼
注意:pyecharts 共有兩個版本,v0.5.X 和 V1.0.X 間完全不兼容,且v0.5.X版本作者已經不維護了,請使用V1.0.X
Bar:柱狀圖/條形圖
柱狀圖對應的模塊是 Bar 除此之外可以設置全局配置和系列配置項。配置項都是基於 options
示例代碼:
1# coding: utf-8 2from example.commons import Faker 3from pyecharts import options as opts 4from pyecharts.charts import Bar 5 6def bar_base(): 7 8 bar = Bar(init_opts=opts.InitOpts(page_title="bar頁面")) # 設置html頁面標題 9 # bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]) # 設置x軸的參數 10 11 bar.add_xaxis(Faker.choose()) 12 bar.add_yaxis("A", Faker.values()) 13 bar.add_yaxis("B", Faker.values()) 14 15 # 設置全局配置項,可選 16 bar.set_global_opts(opts.TitleOpts(title="主標題", subtitle="副標題")) 17 # render 會生成本地 HTML 文件,默認會在當前目錄生成 render.html 文件 18 bar.render("bar.html") # 也可以自己指定文件名 19 20if __name__ == "__main__": 21 bar_base() 複製代碼
運行代碼後會在當前目錄生成一個 ”bar.html“ 的文件,我們在瀏覽器中打開它。效果圖如下:
bar.html
、
生成的頁面支持-點擊取消顯示某 Series
只顯示A
除了上述的使用方法之外,pyecharts 所有方法均支持鏈式調用!
翻轉XY軸
代碼如下:
1 def bar_reversal_axis() -> Bar: 2 3 # pyecharts 所有方法均支持鏈式調用。 4 c = ( 5 Bar(init_opts=opts.InitOpts(page_title="bar頁面")) 6 .add_xaxis(Faker.choose()) 7 .add_yaxis("商家A", Faker.values()) 8 .add_yaxis("商家B", Faker.values()) 9 .reversal_axis() 10 .set_global_opts(toolbox_opts=opts.ToolboxOpts()) # 設置工具箱配置項 11 .set_series_opts(label_opts=opts.LabelOpts(position="right")) # 系列配置項 12 .set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻轉 XY 軸")) # 全局配置項 13 ) 14 return c 15 16 17if __name__ == "__main__": 18 bar_reversal_axis().render("bar.html") 複製代碼
效果圖如下:
翻轉 XY 軸
部分堆疊數據
同個類目軸上系列配置相同的 stack 值可以堆疊放置
例如堆疊放置A,B的代碼如下:
1 def bar_stack1() -> Bar: 2 c = ( 3 Bar() 4 .add_xaxis(Faker.choose()) 5 6 # 數據堆疊,同個類目軸上系列配置相同的 stack 值可以堆疊放置。 7 # stack: Optional[str] = None, 8 .add_yaxis("A", Faker.values(), stack="stack1") 9 .add_yaxis("B", Faker.values(), stack="stack1") 10 .add_yaxis("C", Faker.values()) 11 .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 12 .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆疊數據(部分)")) 13 ) 14 return c 複製代碼
部分堆疊數據
區域縮放配置項
1 def bar_datazoom_slider() -> Bar: 2 c = ( 3 Bar(init_opts=opts.InitOpts(page_title="bar頁面")) 4 .add_xaxis(Faker.days_attrs) 5 .add_yaxis("商家A", Faker.days_values) 6 .set_global_opts( 7 title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"), 8 datazoom_opts=[opts.DataZoomOpts(type_="slider",)] 9 ) 10 ) 11 return c 複製代碼
效果圖如下:
區域縮放配置
區域縮放配置項的設置方法在 DataZoomOpts 類中,我們可以點進去查看源碼:
源碼
其中,主要用到的參數含義如下:
1 type_: str = "slider", # 組件類型,可選 "slider", "inside" 2 # 拖動時,是否實時更新系列的視圖。如果設置爲 false,則只在拖拽結束的時候更新。 3 is_realtime: bool = True, 4 5 # 佈局方式是橫還是豎。可選值爲:'horizontal', 'vertical' 6 orient: str = "horizontal", 複製代碼
知道參數的含義後我們可以來試試效果
比如我們要將區域縮放佈局改爲豎,將 orient 定義爲 vertical 即可,代碼就不展示,可以自己動手試試!
效果圖如下:
HeatMap:熱力圖
熱力圖主要通過顏色去表現數值的大小,必須要配合 visualMap 組件使用。 直角座標系上必須要使用兩個類目軸。
熱力圖使用的方法函數是 add_yaxis ,下面是函數的用法說明:
i 1def add_yaxis( 2 # 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。 3 series_name: str, 4 5 # Y 座標軸數據 6 yaxis_data: Sequence, 7 8 # 系列數據項 9 value: Sequence, 10 11 # 是否選中圖例 12 is_selected: bool = True, 13 14 # 使用的 x 軸的 index,在單個圖表實例中存在多個 x 軸的時候有用。 15 xaxis_index: Optional[Numeric] = None, 16 17 # 使用的 y 軸的 index,在單個圖表實例中存在多個 y 軸的時候有用。 18 yaxis_index: Optional[Numeric] = None, 19 20 # 標籤配置項,參考 `series_options.LabelOpts` 21 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(), 22 23 # 標記點配置項,參考 `series_options.MarkPointOpts` 24 markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None, 25 26 # 標記線配置項,參考 `series_options.MarkLineOpts` 27 markline_opts: Union[opts.MarkLineOpts, dict, None] = None, 28 29 # 提示框組件配置項,參考 `series_options.TooltipOpts` 30 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, 31 32 # 圖元樣式配置項,參考 `series_options.ItemStyleOpts` 33 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None, 34 35 複製代碼
其中 series_name, yaxis_data, value 是三個必傳參數 示例代碼如下:
import random from example.commons import Faker from pyecharts import options as opts from pyecharts.charts import HeatMap def heatmap_base() -> HeatMap: value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] c = ( HeatMap() .add_xaxis(Faker.clock) .add_yaxis("series", Faker.week, value) .set_global_opts(title_opts=opts.TitleOpts(title="HeatMap-基本示例"), visualmap_opts=opts.VisualMapOpts(), ) ) return c if __name__ == "__main__": heatmap_base().render("heatMap.html") 複製代碼
效果圖如下:
熱力圖
WordCloud:詞雲圖
詞雲圖用的的方法函數是 add ,使用方法如下:
1 def add( 2 # 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。 3 series_name: str, 4 5 # 系列數據項,[(word1, count1), (word2, count2)] 6 data_pair: Sequence, 7 8 # 詞雲圖輪廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可選 9 shape: str = "circle", 10 11 # 單詞間隔 12 word_gap: Numeric = 20, 13 14 # 單詞字體大小範圍 15 word_size_range=None, 16 17 # 旋轉單詞角度 18 rotate_step: Numeric = 45, 19 20 # 提示框組件配置項,參考 `series_options.TooltipOpts` 21 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, 22 23 複製代碼
其中 series_name, data_pair, shape 是三個必傳參數 示例代碼如下:
# coding: utf-8 import random from pyecharts.charts import WordCloud from pyecharts import options as opts words = [ ("火箭", 10000), ("勇士庫裏", 8888), ("在你寫這個教程之前,我已經會用了", 6181), ("哈登", 6386), ("金州拉文", 5055), ("杜蘭特", 6467), ("戳眼", 2244), ("NBA", 1868), ("季後賽", 1484), ("約老師", 1112), ("利拉德", 865), ("雙卡雙待", 847), ("字母歌MVP", 5582), ("卡哇伊", 555), ("猛龍", 550), ("大帝", 462), ("西蒙斯不投三分", 366), ("JB", 360), ("科爾垃圾", 282), ("格林公式", 273), ("歐文", 2650), ] def wordcloud_base() -> WordCloud: c = ( WordCloud() .add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10) .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond")) ) return c if __name__ == "__main__": wordcloud_base().render("wordCloud.html") 複製代碼
效果圖如下:
NBA詞雲圖
保存爲圖片
前面我們講的幾種圖形生成方法,最後都保存成 html文件,pyecharts 還提供了保存爲圖片的方式
需要安裝 snapshot_selenium ,同時需要將瀏覽器驅動保存路徑 cheromdriver.exe 加入到環境變量中
1pip install snapshot_selenium 複製代碼
示例代碼如下:
1 # coding: utf-8 2 import random 3 4 from pyecharts.charts import WordCloud 5 from pyecharts import options as opts 6 from snapshot_selenium import snapshot as driver 7 from pyecharts.render import make_snapshot 8 9 words = [ 10 ("火箭", 10000), 11 ("勇士庫裏", 8888), 12 ("在你寫這個教程之前,我已經會用了", 6181), 13 ("哈登", 6386), 14 ("金州拉文", 5055), 15 ("杜蘭特", 6467), 16 ("戳眼", 2244), 17 ("NBA", 1868), 18 ("季後賽", 1484), 19 ("約老師", 1112), 20 ("利拉德", 865), 21 ("雙卡雙待", 847), 22 ("字母歌MVP", 5582), 23 ("卡哇伊", 555), 24 ("猛龍", 550), 25 ("大帝", 462), 26 ("西蒙斯不投三分", 366), 27 ("JB", 360), 28 ("科爾垃圾", 282), 29 ("格林公式", 273), 30 ("歐文", 2650), 31] 32 33 34 def wordcloud_base() -> WordCloud: 35 c = ( 36 WordCloud() 37 .add("", words, word_size_range=[20, 50], shape="diamond", word_gap=10) 38 .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond")) 39 ) 40 return c 41 42 43 if __name__ == "__main__": 44 make_snapshot(driver, wordcloud_base().render(), "wordcloud.png") 45 # wordcloud_base().render("wordCloud.html") 複製代碼
最後會在當前目錄生成一張 wordcloud.png 的圖片
總結
1.根據自己想製作的圖形,導入相關的包
2.進行圖表的基礎設置,創建圖表對象
3.需要了解該圖表對象下面的函數中參數的含義,及其使用方法
4.配置項主要是在 options中進行配置,有全局配置項和系列配置項,需要了解配置項下面對象含義使用方法
5.利用render()方法來報存圖表