Python數據可視化神器--pyecharts 快速入門

前言

咱們都知道python上的一款可視化工具 matplotlib , 可是它是靜態的。後來發現了 pyecharts 模塊,簡直好用到不行,可視化類型很是多,它是基於 Echarts 開發的。html

Echarts 是百度開源的一個數據可視化 JS 庫,憑藉着良好的交互性,精巧的圖表設計,獲得了衆多開發者的承認。而 Python,很適合用於數據處理。當數據分析趕上數據可視化時,pyecharts 就誕生了。python

下面帶你們快速瞭解 pyecharts 以及基本使用方法:git

✨ 特性

  • 簡潔的 API 設計,使用如絲滑般流暢,支持鏈式調用
  • 囊括了 30+ 種常見圖表,應有盡有
  • 支持主流 Notebook 環境,Jupyter Notebook 和 JupyterLab
  • 可輕鬆集成至 Flask,Django 等主流 Web 框架
  • 高度靈活的配置項,可輕鬆搭配出精美的圖表
  • 詳細的文檔和示例,幫助開發者更快的上手項目
  • 多達 400+ 地圖,爲地理數據可視化提供強有力的支持

✨ 安裝

1pip install pyecharts
複製代碼

注意:pyecharts 共有兩個版本,v0.5.X 和 V1.0.X 間徹底不兼容,且v0.5.X版本做者已經不維護了,請使用V1.0.Xgithub

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「 的文件,咱們在瀏覽器中打開它。效果圖以下:bash

bar.html
bar.html

生成的頁面支持-點擊取消顯示某 Series微信

只顯示A
只顯示A

除了上述的使用方法以外,pyecharts 全部方法均支持鏈式調用!echarts

翻轉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 軸
翻轉 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 便可,代碼就不展現,能夠本身動手試試!

效果圖以下:

image

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詞雲圖
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=[2050], 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()方法來報存圖表

pyecharts 還有許多好玩的 3D圖表 和 地圖圖表,因爲篇幅有限,下篇將繼續介紹 地圖系玩法 歡迎關注公衆號: Python編程與實戰!

推薦閱讀

Python爬蟲之JS逆向入門篇

用python一鍵生成你的微信好友頭像牆

pyecharts可視化和微信的結合

python數據可視化神器--pyecharts 快速入門

相關文章
相關標籤/搜索