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

我們都知道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()方法來報存圖表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章