小白學 Python 數據分析(21):pyecharts 好玩的圖表(系列終篇)


人生苦短,我用 Python

前文傳送門:

小白學 Python 數據分析(1):數據分析基礎

小白學 Python 數據分析(2):Pandas (一)概述

小白學 Python 數據分析(3):Pandas (二)數據結構 Series

小白學 Python 數據分析(4):Pandas (三)數據結構 DataFrame

小白學 Python 數據分析(5):Pandas (四)基礎操作(1)查看數據

小白學 Python 數據分析(6):Pandas (五)基礎操作(2)數據選擇

小白學 Python 數據分析(7):Pandas (六)數據導入

小白學 Python 數據分析(8):Pandas (七)數據預處理

小白學 Python 數據分析(9):Pandas (八)數據預處理(2)

小白學 Python 數據分析(10):Pandas (九)數據運算

小白學 Python 數據分析(11):Pandas (十)數據分組

小白學 Python 數據分析(12):Pandas (十一)數據透視表(pivot_table)

小白學 Python 數據分析(13):Pandas (十二)數據表拼接

小白學 Python 數據分析(14):Pandas (十三)數據導出

小白學 Python 數據分析(15):數據可視化概述

小白學 Python 數據分析(16):Matplotlib(一)坐標系

小白學 Python 數據分析(17):Matplotlib(二)基礎操作

小白學 Python 數據分析(18):Matplotlib(三)常用圖表(上)

小白學 Python 數據分析(19):Matplotlib(四)常用圖表(下)

小白學 Python 數據分析(20):pyecharts 概述

引言

各位同學好,今天是個陽光明媚的大周末。

本來今天是想將 pyecharts 的一些常用圖片也介紹一下的,但是當我真正開始寫的時候,想到了一個事情,這些基礎的枯燥的內容還是不要再去折磨我的讀者了。

取而代之的是不如寫一點 pyecharts 好玩的東西,提升一些各位讀者的興趣,有興趣了以后再去學習就顯得不是那么困難了。

所以就有了這篇文章, pyecharts 好玩的圖表。

二維圖表可能大家都能經常見到,所以本文盡量不列舉二維圖表,盡量多的從 3D 圖表玩起。

PS:順便說一下, pyecharts 的文檔質量非常好,所有的圖表都有示例,對於剛接觸的新手來講十分友好,啥也不會的前提下,把 Demo CV 出來就能直接運行,學習代碼,從 CV 開始。

以下示例均來自官方文檔的示例,各位別噴我抄襲就成。

3D 柱狀圖

首先是 3D 柱狀圖, 2D 的柱狀圖各位同學應該經常能見到, 3D 的應該比較少見,我們先來看下效果:

示例的部分代碼 Bar3d_punch_card.py

import pyecharts.options as opts
from pyecharts.charts import Bar3D

# 省略部分數據代碼

data = [[d[1], d[0], d[2]] for d in data]

(
    Bar3D(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add(
        series_name="",
        data=data,
        xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),
        yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),
        zaxis3d_opts=opts.Axis3DOpts(type_="value"),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_=20,
            range_color=[
                "#313695",
                "#4575b4",
                "#74add1",
                "#abd9e9",
                "#e0f3f8",
                "#ffffbf",
                "#fee090",
                "#fdae61",
                "#f46d43",
                "#d73027",
                "#a50026",
            ],
        )
    )
    .render("bar3d_punch_card.html")
)

因為是 3D 圖形,我們的數據是一個三維數據,上面的示例沒有數據的代碼,由於太長了,所以就沒放。不過所有的代碼都會上傳至代碼倉庫,有需要的銅須可以去代碼倉庫獲取。

日歷圖

如果經常上 GitHub ,那么對這張圖表一定很熟悉:

這個就是日歷圖,上圖是我本人的 GitHub 的提交記錄,同樣, pyecharts 也為我們提供了日歷圖的方法,示例如下:

import datetime
import random

from pyecharts import options as opts
from pyecharts.charts import Calendar


begin = datetime.date(2019, 1, 1)
end = datetime.date(2019, 12, 31)
data = [
    [str(begin + datetime.timedelta(days=i)), random.randint(1, 20)]
    for i in range((end - begin).days + 1)
]

c = (
    Calendar()
    .add("", data, calendar_opts=opts.CalendarOpts(range_="2019"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Calendar-2019 Github 提交情況"),
        visualmap_opts=opts.VisualMapOpts(
            max_=20,
            min_=1,
            orient="horizontal",
            is_piecewise=True,
            pos_top="230px",
            pos_left="100px",
        ),
    )
    .render("calendar_base.html")
)

結果如下:

儀表盤

儀表盤經常用來表示一件事情的完成情況,看着很高大上的樣子,在 pyecharts 想做一個儀表盤實際上非常簡單。

示例如下:

from pyecharts import options as opts
from pyecharts.charts import Gauge

c = (
    Gauge()
    .add("", [("完成率", 80)])
    .set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例"))
    .render("gauge_base.html")
)

結果如下:

關系圖

關系圖,顧名思義就是描述關系的圖,有時候我們看電視劇,出現的人物比較多記不住的時候,可以用 pyecharts 畫個關系圖捋順關系(我真是個小機靈鬼)。

示例如下:

from pyecharts import options as opts
from pyecharts.charts import Graph

nodes = [
    {"name": "肖恩", "symbolSize": 10},
    {"name": "海棠朵朵", "symbolSize": 20},
    {"name": "長公主", "symbolSize": 30},
    {"name": "陳萍萍", "symbolSize": 40},
    {"name": "范閑", "symbolSize": 50},
    {"name": "林婉兒", "symbolSize": 40},
    {"name": "慶帝", "symbolSize": 30},
    {"name": "范若若", "symbolSize": 20},
    {"name": "司理理", "symbolSize": 10}
]
links = []
for i in nodes:
    for j in nodes:
        links.append({"source": i.get("name"), "target": j.get("name")})
c = (
    Graph()
    .add("", nodes, links, repulsion=8000)
    .set_global_opts(title_opts=opts.TitleOpts(title="慶余年人物關系圖"))
    .render("graph_base.html")
)

結果如下:

我這里就簡單的使用「慶余年」的人物關系隨便畫了一下,不要當真哦。

3D 折線圖

這個示例就是經典中的經典了,旋轉中的彈簧,完全摘自官方文檔:

import math

from pyecharts import options as opts
from pyecharts.charts import Line3D
from pyecharts.faker import Faker

data = []
for t in range(0, 25000):
    _t = t / 1000
    x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
    y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
    z = _t + 2.0 * math.sin(75 * _t)
    data.append([x, y, z])
c = (
    Line3D()
    .add(
        "",
        data,
        xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="value"),
        yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="value"),
        grid3d_opts=opts.Grid3DOpts(
            width=100, depth=100, rotate_speed=150, is_rotate=True
        ),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_=30, min_=0, range_color=Faker.visual_color
        ),
        title_opts=opts.TitleOpts(title="Line3D-旋轉的彈簧"),
    )
    .render("line3d_autorotate.html")
)

結果如下:

這個示例中的難點在於使用三角函數,算出彈簧上的每一個點的空間位置,(x, y, z) 然后再將這組數據繪制在圖表中,這個算法數學功底不好的人還真的看不懂(比如說小編我)。

水球圖

水球圖的命名就相當的形象了,我們先看下水球圖長啥樣:

我們使用 pyecharts 畫水球圖其實很簡單的,如下:

from pyecharts import options as opts
from pyecharts.charts import Liquid

c = (
    Liquid()
    .add("lq", [0.6, 0.7])
    .set_global_opts(title_opts=opts.TitleOpts(title="Liquid-基本示例"))
    .render("liquid_base.html")
)

示例中的兩個參數 0.6 和 0.7 ,分別是后面的圖層百分比和前面的圖層百分比。

百度地圖

pyecharts 還支持百度地圖上的一些操作,這對於需要使用地圖做圖的同學來講不得不說是一個福音,比如下面的全國主要城市空氣質量圖:

或者還有北京的公交線路圖:

這兩個示例代碼都有點長,我就不貼出來了,有興趣的同學可以訪問我的代碼倉庫或者官方文檔獲取示例代碼。

多 BB 兩句

能看到這里的應該都是真愛了,就容我多 BB 兩句,這篇文章不僅僅是這個系列的最后一篇,同樣也是整個「小白學 Python」的最后一篇了,從去年的 11 月份開始寫,直到今天,耗時差不多 5 個月,輸出了「基礎系列」、「爬蟲系列」、「數據分析系列」共計 84 篇內容,這個過程中,確實收獲滿滿,不知道有沒有從一開始跟着看能看到現在的朋友,如果有可以在評論區舉手。

還記得去年剛開始寫的時候,有很多同學加我微信,應該和很多人都聊過我后面的規划,今天,我終於完成了這個規划,感覺很開心也很有成就感,感謝各位同學的一路陪伴和支持,后續還會繼續分享 python 相關的內容,還希望各位能繼續捧場。

后續的內容已經在規划中了,各位不會等太久(想搞點機器學習相關的入門內容,不知道搞不搞得定,不管搞不搞得定,先搞了再說)。

這次其實挺想給自己放個假的,但是不敢停下來,做一件事情,能堅持這么久,確實很不容易,如果一旦停下來,再想撿起來,這難度將會成倍數的上漲,我不敢保證自己還能撿的起來,所以,繼續加油!奧利給!

代碼倉庫

老規矩,所有的示例代碼都會上傳至代碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例代碼-Github

示例代碼-Gitee

參考

http://gallery.pyecharts.org/#/README


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM