ECharts是由百度開源的基于JS的商業(yè)級數(shù)據(jù)圖表庫,有很多現(xiàn)成的圖表類型和實(shí)例,而Pyecharts則是為了方便我們使用Python實(shí)現(xiàn)ECharts的繪圖。使用Pyecharts制作可視化大屏,可以分為兩步:
1、使用分別Pyecharts分別制作各類圖形;
2、使用Pyecharts中的組合圖表功能,將所有圖片拼接在一張html文件中進(jìn)行展示。
小五認(rèn)為影響大屏美觀最重要的兩個(gè)因素就是:配色和布局!在本文中,會特意強(qiáng)調(diào)這兩點(diǎn)。
Pyecharts可視化
本文縮減了圖表,只選用2020東京奧運(yùn)會各國金牌分布圖、2020東京奧運(yùn)會獎牌榜詳情、2020東京奧運(yùn)會中國各項(xiàng)目獲獎詳情。
這類圖表都很簡單,參照官方文檔直接復(fù)制示例就可以學(xué)習(xí)。圖表配色都使用的Pyecharts默認(rèn)顏色,大家實(shí)際使用時(shí)盡量形成自己的風(fēng)格。
Map世界地圖
Pyecharts繪制世界地圖時(shí),名稱必須是英文。所以我們在前文中引入了國家名稱中英文對照表
,左連接形成了df4
單獨(dú)提取英文名稱和獎牌總數(shù)兩列數(shù)據(jù),用來可視化。
data_list=[[i,j]fori,jinzip(df4['英文名稱'],df4['獎牌總數(shù)'])]
data_list[:5]
數(shù)據(jù)準(zhǔn)備好了,開始利用pyecharts繪制世界地圖。
frompyechartsimportoptionsasopts
frompyecharts.chartsimportMap
c=(
Map()
.add("",data_list,"world",
is_map_symbol_show=False,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="2020東京奧運(yùn)會各國金牌分布圖"),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
c.render_notebook()
非常簡單
同理,依次繪制其他兩類圖形。
柱狀圖、餅圖
柱狀圖(Bar)
frompyechartsimportoptionsasopts
frompyecharts.chartsimportBar
c=(
Bar()
.add_xaxis(df4['名稱'].head(25).tolist())
.add_yaxis("金牌",df4['金牌'].head(25).tolist(),stack="stack1")
.add_yaxis("銀牌",df4['銀牌'].head(25).tolist(),stack="stack1")
.add_yaxis("銅牌",df4['銅牌'].head(25).tolist(),stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position="inside",font_size=12,color='#FFFFFF'))
.set_global_opts(title_opts=opts.TitleOpts(title="2020東京奧運(yùn)會獎牌榜詳情"),
xaxis_opts=opts.AxisOpts(type_='category',
axislabel_opts=opts.LabelOpts(
rotate=45),
)))
c.render_notebook()
餅圖(Pie)
frompyechartsimportoptionsasopts
frompyecharts.chartsimportPie
c=(
Pie()
.add("",[['跳水',12],['射擊',11],['舉重',8],['競技體操',8],['乒乓球',7],['游泳',6],['羽毛球',6],['田徑',5],['靜水皮劃艇',3],['蹦床體操',3],['自由式摔跤',3],['賽艇',3],['空手道',2],['拳擊',2],['帆船',2],['花樣游泳',2],['跆拳道',1],['場地自行車賽',1],['古典式摔跤',1],['擊劍',1],['三人籃球',1]],
center=["50%","60%"],)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
)
c.render_notebook()
這樣需要用到的三張圖表就繪制好了。
Pyecharts組合圖表
Pyecharts進(jìn)行可視化大屏第二步就是組合圖表,大致可分為四類:
- Grid:并行多圖
- Page:順序多圖
- Tab:選項(xiàng)卡多圖
- Timeline:時(shí)間線輪播多圖
官方文檔:https://pyecharts.org/#/zh-cn/composite_charts
這里用Page(順序多圖)居多,在組合圖表之前,還要先把前面的圖表繪制代碼改為函數(shù)。
defmap_world()->Map:
c=(
Map(init_opts=opts.InitOpts(chart_id=2,bg_color='#ADD8E6'))
.add("",data_list,"world",
is_map_symbol_show=False,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="2020東京奧運(yùn)會各國金牌分布圖"),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
returnc
順便還在其中增加了背景顏色bg_color
、圖表IDchart_id
,后者用于多圖表時(shí)定位區(qū)分。背景顏色的話,我選擇了淡藍(lán)色#ADD8E6。后續(xù)圖片的布局是根據(jù)圖表ID的對應(yīng)關(guān)系進(jìn)行布局,所以每張圖都要分別設(shè)置其id。
接著使用page = Page(layout= Page.DraggablePageLayout)
模式對圖片進(jìn)行展示,這一步是為了調(diào)整布局。
page=Page(layout=Page.DraggablePageLayout,page_title="2020東京奧運(yùn)會獎牌榜")
#在頁面中添加圖表
page.add(
title(),
map_world(),
bar_medals(),
pie_china(),)
page.render('test.html')
調(diào)用繪制函數(shù)后生成一個(gè) test.html
文件。
打開后可以其中的圖片進(jìn)行拖拽,來實(shí)現(xiàn)自定義布局。
對圖片布局完畢后,要記得點(diǎn)擊左上角“save config”對布局文件進(jìn)行保存。
點(diǎn)擊后,本地會生成一個(gè)chart_config.json的文件,這其中包含了每個(gè)圖表ID對應(yīng)的布局位置。
最后,調(diào)用保存好的布局文件,重新生成html。
運(yùn)行下面這行代碼。
page.save_resize_html('test.html',cfg_file='chart_config.json',dest='奧運(yùn).html')
其中test.html
為生成的所有圖表的文件、chart_config.json 為下載的布局文件、奧運(yùn).html
為布局好的的儀表盤文件、打開儀表奧運(yùn).html:
這樣就實(shí)現(xiàn)了一次數(shù)據(jù)可視化——大屏展示。
但還有還有很多不足之處,比如若圖表配色沒有特殊去做調(diào)整。
整張大屏只是一個(gè)靜態(tài)的展示,而非具有商業(yè)場景的數(shù)據(jù)儀表盤。
真正的數(shù)據(jù)大屏往往更喜歡用BI軟件生成,能夠?qū)崿F(xiàn)圖、表、切片器之間交叉篩選,希望以后有機(jī)會能用Python使用制作出來。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7104瀏覽量
89298 -
代碼
+關(guān)注
關(guān)注
30文章
4809瀏覽量
68826 -
python
+關(guān)注
關(guān)注
56文章
4801瀏覽量
84883
原文標(biāo)題:Python 制作可視化大屏全流程!
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論