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

人生苦短,我用 Pythonhtml

前文傳送門:node

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

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

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

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

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

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

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

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

小白學 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

參考

gallery.pyecharts.org/#/README

您的掃碼關注,是對小編堅持原創的最大鼓勵:)
相關文章
相關標籤/搜索