【Python】Pyecharts 組合圖形繪制實(shí)踐
?來源:Python數(shù)據(jù)之道
作者:Peter
整理:Lemon
Pyecharts 組合圖形繪制實(shí)踐
大家好,之前跟大家分享了用 Pyecharts 繪制桑基圖和餅圖:
有同學(xué)提了一個(gè)問題,在 Pyecharts 中如何繪制多個(gè)圖形,今天我們來分享下組合圖的繪制。
在實(shí)際的工作需求中,我們經(jīng)常需要繪制多個(gè)甚至多種不同類型的圖形,有時(shí)候還需要將它們放在一個(gè)頁面中,達(dá)到一個(gè)可視化看板的效果。
在本文中將利用 pyecharts 來實(shí)現(xiàn)這個(gè)需求,同時(shí)滿足動(dòng)態(tài)可視化的效果,再次感受這個(gè)可視化神器的強(qiáng)大之處,讓你真正愛上它。

01 環(huán)境
Python 3.7 Jupyter notebook Pandas 1.1.3 pyecharts 1.7.1 pyecharts-jupyter-installer 0.0.3
這里提醒下:
pyecharts 的版本一定要保持一致,非常重要!
pyecharts 的版本一定要保持一致,非常重要!
pyecharts 的版本一定要保持一致,非常重要!
在安裝的時(shí)候可以直接指定版本號(hào),防止出意外
02 單個(gè)圖形制作
在下面的文章部門我們先逐個(gè)繪制多種不同的圖形,這些圖形的繪制不會(huì)涉及到太多的配置項(xiàng),本文中的重點(diǎn)是如何將不同類型的圖形組合在一起。這些圖形包含:
柱狀圖 餅圖 折線圖 熱力圖 漏斗圖 儀表盤
導(dǎo)入庫
在進(jìn)行繪制數(shù)據(jù)處理和繪圖之前,我們還是需要先導(dǎo)入各種庫:
from?pyecharts.globals?import?CurrentConfig,?OnlineHostType???#?事先導(dǎo)入,防止不出圖
from?pyecharts?import?options?as?opts??#?配置項(xiàng)
from?pyecharts.charts?import?Bar,?Pie,?Line,?HeatMap,?Funnel,?Gauge,?Grid,?Page??#?各個(gè)圖形的類
from?pyecharts.faker?import?Faker??#?自身數(shù)據(jù)
from?pyecharts.commons.utils?import?JsCode???
from?pyecharts.globals?import?ThemeType,SymbolType
import?pandas?as?pd
import?numpy?as?np
import?random
模擬數(shù)據(jù)
首先我們模擬一份簡(jiǎn)單的數(shù)據(jù):通過下面的方式我們可以掌握如何利用pandas快速生成一個(gè)DataFrame數(shù)據(jù)

柱狀圖
柱狀圖的制作使用的是 Bar 方法:
bar?=?(
????Bar()
????.add_xaxis(df['消費(fèi)'].tolist())
????.add_yaxis("5大開支",df['數(shù)據(jù)'].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['消費(fèi)'].tolist(),?df['數(shù)據(jù)'].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['消費(fèi)'].tolist())
????.add_yaxis("月度開支",?df['數(shù)據(jù)'].tolist())
????.set_global_opts(title_opts=opts.TitleOpts(title="Line-月度開支"))
)
line.render_notebook()

熱力圖
熱力圖使用的是HeatMap()方法,在這里我們使用的是pyecharts中自帶的數(shù)據(jù):
print(Faker.week)
print(Faker.clock)

#?0-50?的隨機(jī)數(shù)+列表推導(dǎo)式
#?兩層的列表推導(dǎo)式
value?=?[[i,?j,?random.randint(0,?50)]?for?i?in?range(24)?for?j?in?range(7)]
heatmap?=?(
????HeatMap()
????.add_xaxis(Faker.clock)???#?橫軸標(biāo)簽
????.add_yaxis("熱力圖",?Faker.week,?value)???#?傳入兩個(gè)列表數(shù)據(jù)
????.set_global_opts(
????????title_opts=opts.TitleOpts(title="HeatMap-熱力圖"),
????????visualmap_opts=opts.VisualMapOpts(),
????)
)
heatmap.render_notebook()

熱力圖視頻:
漏斗圖
漏斗圖在用戶畫像中運(yùn)用的非常廣,尤其是在電商領(lǐng)域中,從訪問、瀏覽到最終的支付成功等一系列的操作構(gòu)成一個(gè)漏斗,在這里我們模擬一份數(shù)據(jù)來繪制漏斗圖,先生成一個(gè)模擬數(shù)據(jù):

繪圖代碼如下:
funnel?=?(
????Funnel()
????.add("商城漏斗",?[list(z)?for?z?in?zip(df1['操作'].tolist(),?df1['人數(shù)'].tolist())])
????.set_global_opts(title_opts=opts.TitleOpts(title="商城用戶漏斗分析"))
)
????
funnel.render_notebook()

漏斗圖視頻:
儀表盤
在這里我們采用官方中的一個(gè)實(shí)例來制作簡(jiǎn)單的儀表盤:
gauge?=?(
????Gauge()
????.add("",?[("完成率",?80)])
????.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-儀表盤"))
)
gauge.render_notebook()

03 組合繪圖
在上面我們通過不同的方法繪制出了各種不同的圖形,都是動(dòng)態(tài)可視化的,非常精美的。下面我們通過 Page 類來將上面的多種圖形來放到一個(gè)可視化看板中。
1、首先給出整體的繪圖代碼
#?1、柱狀圖
def?barPage()?->?Bar:?
????bar?=?(
????????Bar()
????????.add_xaxis(df['消費(fèi)'].tolist())
????????.add_yaxis("5大開支",df['數(shù)據(jù)'].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['消費(fèi)'].tolist(),?df['數(shù)據(jù)'].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['消費(fèi)'].tolist())
????????.add_yaxis("月度開支",?df['數(shù)據(jù)'].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個(gè)圖形的代碼,下面利用Page進(jìn)行組合
#?!!!?關(guān)鍵步驟
page?=?(
????Page(layout=Page.DraggablePageLayout)
????.add(
????????barPage(),
????????piePage(),
????????linePage(),
????????funnelPage(),
????????heatmapPage(),
????????gaugePage())
)
page.render("page_demo.html")
2、現(xiàn)在解釋一下上面的代碼:
柱狀圖、餅圖等不同的圖形我們封裝成不同的函數(shù)來實(shí)現(xiàn) 使用 Page類的add方法,添加上面的各個(gè)函數(shù)最后使用 page.render()來生成一個(gè)html文件,就是我們的各個(gè)圖形下一個(gè)html頁面中
現(xiàn)在看看生成的組合圖形1的效果:
組合圖形1:
在目前生成的組合圖形1中,要注意4點(diǎn):
左上角有個(gè) save config的按鈕,接下來這個(gè)按鈕大有用處整體的圖形是單個(gè)上下排列的,且整體靠左,右邊很多的空白 每個(gè)圖形都是虛線框,這表示圖形可變大小,同時(shí)可以移動(dòng)的 整體需要上下滑動(dòng)來瀏覽全部的圖形,視覺效果不佳

下面我們通過save config按鈕來進(jìn)行改動(dòng),生成一個(gè)我們自己想看到的組合圖形2效果:
組合圖形2:
當(dāng)我們把圖形按照我們的需求排列OK之后,此時(shí)圖形仍然沒有被固定下來,如果我們刷新當(dāng)前頁面,又會(huì)變成組合圖形1的效果。
現(xiàn)在點(diǎn)擊save config按鈕,保存我們的配置文件。此時(shí)會(huì)在本地當(dāng)前目錄下生成一個(gè)chart_config.json的配置文件。
接下來我們利用這個(gè)配置來生成上面我們想要達(dá)到的效果圖形,將圖形的格式固定下來,使用下面的代碼:
Page.save_resize_html("page_demo.html",???#?上面的HTML文件名稱
??????????????????????cfg_file="chart_config.json",??#?保存的json配置文件
??????????????????????dest="new_page_demo.html")??#?新HTML文件名稱
在jupyter notebook中再運(yùn)行一次,這樣我們就將圖形的格式固定下來了。通過這種方式我們可以設(shè)置圖形的任意大小和位置,部分截圖如下:

本文結(jié)合各種圖形的簡(jiǎn)單制作,最終使用 Page 將各種圖形組合在一起,形成了一個(gè)可視化看板的效果,希望對(duì)大家掌握 Pyecharts 的使用有所幫助,真正在實(shí)際工作中使用到 Pyecharts 這個(gè)視化神器。
作者簡(jiǎn)介
Peter,碩士畢業(yè)僧一枚,從電子專業(yè)自學(xué)Python入門數(shù)據(jù)行業(yè),擅長(zhǎng)數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅(jiān)持跑步,熱愛閱讀,樂觀生活。個(gè)人格言:不浮于世,不負(fù)于己
個(gè)人站點(diǎn):www.renpeter.cn,歡迎常來小屋逛逛
往期精彩回顧
獲取本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:
https://t.zsxq.com/qFiUFMV
本站qq群704220115。
加入微信群請(qǐng)掃碼:
