Pyecharts 組合圖形繪製實踐
大家好,之前跟大家分享了用 Pyecharts 繪製桑基圖和餅圖:
有同學提了一個問題,在 Pyecharts 中如何繪製多個圖形,今天我們來分享下組合圖的繪製。
在實際的工作需求中,我們經常需要繪製多個甚至多種不同類型的圖形,有時候還需要將它們放在一個頁面中,達到一個可視化看板的效果。
在本文中將利用 pyecharts 來實現這個需求,同時滿足動態可視化的效果,再次感受這個可視化神器的強大之處,讓你真正愛上它。
01 環境pyecharts-jupyter-installer 0.0.3這裡提醒下:
pyecharts 的版本一定要保持一致,非常重要!
pyecharts 的版本一定要保持一致,非常重要!
pyecharts 的版本一定要保持一致,非常重要!
在安裝的時候可以直接指定版本號,防止出意外
02 單個圖形製作在下面的文章部門我們先逐個繪製多種不同的圖形,這些圖形的繪製不會涉及到太多的配置項,本文中的重點是如何將不同類型的圖形組合在一起。這些圖形包含:
導入庫在進行繪製數據處理和繪圖之前,我們還是需要先導入各種庫:
from pyecharts.globals import CurrentConfig, OnlineHostType # 事先導入,防止不出圖
from pyecharts import options as opts # 配置項
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, Gauge, Grid, Page # 各個圖形的類
from pyecharts.faker import Faker # 自身數據
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolType
import pandas as pd
import numpy as np
import random
模擬數據首先我們模擬一份簡單的數據:通過下面的方式我們可以掌握如何利用pandas快速生成一個DataFrame數據
柱狀圖柱狀圖的製作使用的是 Bar 方法:
bar = (
Bar()
.add_xaxis(df['消費'].tolist())
.add_yaxis("5大開支",df['數據'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-月度開支"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
bar.render_notebook()
餅圖餅圖的製作使用的是Pie:
pie = (
Pie()
.add("", [list(z) for z in zip(df['消費'].tolist(), df['數據'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
pie.render_notebook()餅圖視頻:
折線圖折線圖的製作使用的是 Line:
line = (
Line()
.add_xaxis(df['消費'].tolist())
.add_yaxis("月度開支", df['數據'].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
)
line.render_notebook()
熱力圖熱力圖使用的是HeatMap()方法,在這裡我們使用的是pyecharts中自帶的數據:
print(Faker.week)
print(Faker.clock)# 0-50 的隨機數+列表推導式
# 兩層的列表推導式
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
heatmap = (
HeatMap()
.add_xaxis(Faker.clock) # 橫軸標籤
.add_yaxis("熱力圖", Faker.week, value) # 傳入兩個列表數據
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-熱力圖"),
visualmap_opts=opts.VisualMapOpts(),
)
)
heatmap.render_notebook()熱力圖視頻:
漏鬥圖漏鬥圖在用戶畫像中運用的非常廣,尤其是在電商領域中,從訪問、瀏覽到最終的支付成功等一系列的操作構成一個漏鬥,在這裡我們模擬一份數據來繪製漏鬥圖,先生成一個模擬數據:
繪圖代碼如下:
funnel = (
Funnel()
.add("商城漏鬥", [list(z) for z in zip(df1['操作'].tolist(), df1['人數'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="商城用戶漏鬥分析"))
)
funnel.render_notebook()漏鬥圖視頻:
儀錶盤在這裡我們採用官方中的一個實例來製作簡單的儀錶盤:
gauge = (
Gauge()
.add("", [("完成率", 80)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-儀錶盤"))
)
gauge.render_notebook()
03 組合繪圖在上面我們通過不同的方法繪製出了各種不同的圖形,都是動態可視化的,非常精美的。下面我們通過 Page 類來將上面的多種圖形來放到一個可視化看板中。
1、首先給出整體的繪圖代碼
# 1、柱狀圖
def barPage() -> Bar:
bar = (
Bar()
.add_xaxis(df['消費'].tolist())
.add_yaxis("5大開支",df['數據'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-月度開支"),
legend_opts=opts.LegendOpts(is_show=False),)
)
return bar
# 2、餅圖
def piePage() -> Pie:
pie = (
Pie()
.add("", [list(z) for z in zip(df['消費'].tolist(), df['數據'].tolist())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return pie
# 3、折線圖
def linePage() -> Line:
line = (
Line()
.add_xaxis(df['消費'].tolist())
.add_yaxis("月度開支", df['數據'].tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
)
return line
# 4、熱力圖
def heatmapPage() -> HeatMap:
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
heatmap = (
HeatMap()
.add_xaxis(Faker.clock)
.add_yaxis("熱力圖", Faker.week, value)
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-熱力圖"),
visualmap_opts=opts.VisualMapOpts(),
)
)
return heatmap
# 5、漏鬥圖
def funnelPage() -> Funnel:
funnel = (
Funnel()
.add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="Funnel-漏鬥圖"))
)
return funnel
# 6、儀錶盤
def gaugePage() -> Gauge:
gauge = (
Gauge()
.add("", [("完成率", 80)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-儀錶盤"))
)
return gauge
# 上面是6個圖形的代碼,下面利用Page進行組合
# !!! 關鍵步驟
page = (
Page(layout=Page.DraggablePageLayout)
.add(
barPage(),
piePage(),
linePage(),
funnelPage(),
heatmapPage(),
gaugePage())
)
page.render("page_demo.html")2、現在解釋一下上面的代碼:
柱狀圖、餅圖等不同的圖形我們封裝成不同的函數來實現最後使用page.render()來生成一個html文件,就是我們的各個圖形下一個html頁面中現在看看生成的組合圖形1的效果:
組合圖形1:
在目前生成的組合圖形1中,要注意4點:
左上角有個save config的按鈕,接下來這個按鈕大有用處整體的圖形是單個上下排列的,且整體靠左,右邊很多的空白每個圖形都是虛線框,這表示圖形可變大小,同時可以移動的下面我們通過save config按鈕來進行改動,生成一個我們自己想看到的組合圖形2效果:
組合圖形2:
當我們把圖形按照我們的需求排列OK之後,此時圖形仍然沒有被固定下來,如果我們刷新當前頁面,又會變成組合圖形1的效果。
現在點擊save config按鈕,保存我們的配置文件。此時會在本地當前目錄下生成一個chart_config.json的配置文件。
接下來我們利用這個配置來生成上面我們想要達到的效果圖形,將圖形的格式固定下來,使用下面的代碼:
Page.save_resize_html("page_demo.html", # 上面的HTML文件名稱
cfg_file="chart_config.json", # 保存的json配置文件
dest="new_page_demo.html") # 新HTML文件名稱在jupyter notebook中再運行一次,這樣我們就將圖形的格式固定下來了。通過這種方式我們可以設置圖形的任意大小和位置,部分截圖如下:
本文結合各種圖形的簡單製作,最終使用 Page 將各種圖形組合在一起,形成了一個可視化看板的效果,希望對大家掌握 Pyecharts 的使用有所幫助,真正在實際工作中使用到 Pyecharts 這個視化神器。