人生苦短,我用 Python
前文傳送門:
小白學 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 數據分析(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 上,方便大家取用。