前兩天發了一篇《用Python制作可視化大屏,特簡單!》,留言區非?;鸨?,發現大家都對可視化部分非常感興趣。
而恰好大屏可視化這一部分又沒太細講,今天就詳細講一下Pyecharts制作可視化大屏。
注意,本文由于篇幅問題不會放置全部代碼,會在文末提供全部代碼的下載。
承接上文《用Python制作可視化大屏,特簡單!》,不再贅述數據爬取和數據預處理。
ECharts是由百度開源的基于JS的商業級數據圖表庫,有很多現成的圖表類型和實例,而Pyecharts則是為了方便我們使用Python實現ECharts的繪圖。使用Pyecharts制作可視化大屏,可以分為兩步:
1、使用分別Pyecharts分別制作各類圖形;
2、使用Pyecharts中的組合圖表功能,將所有圖片拼接在一張html文件中進行展示。
小五認為影響大屏美觀最重要的兩個因素就是:配色和布局!在本文中,會特意強調這兩點。
Pyecharts可視化本文縮減了圖表,只選用2020東京奧運會各國金牌分布圖、2020東京奧運會獎牌榜詳情、2020東京奧運會中國各項目獲獎詳情。
這類圖表都很簡單,參照官方文檔直接復制示例就可以學習。圖表配色都使用的Pyecharts默認顏色,大家實際使用時盡量形成自己的風格。
Map世界地圖Pyecharts繪制世界地圖時,名稱必須是英文。所以我們在前文中引入了國家名稱中英文對照表,左連接形成了df4:
df4
單獨提取英文名稱和獎牌總數兩列數據,用來可視化。
data_list=[[i,j] for i,j in zip(df4[‘英文名稱’],df4[‘獎牌總數’])]
data_list[:5]
數據準備好了,開始利用pyecharts繪制世界地圖。
from pyecharts import options as opts
from pyecharts.charts import Map
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東京奧運會各國金牌分布圖”),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
c.render_notebook()
非常簡單
同理,依次繪制其他兩類圖形。
柱狀圖、餅圖柱狀圖(Bar)
from pyecharts import options as opts
from pyecharts.charts import Bar
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東京奧運會獎牌榜詳情”),
xaxis_opts=opts.AxisOpts(type_=‘category’,
axislabel_opts=opts.LabelOpts(
rotate=45),
)))
c.render_notebook()
2020東京奧運會獎牌榜詳情
餅圖(Pie)
from pyecharts import options as opts
from pyecharts.charts import Pie
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=“: {c}”))
)
c.render_notebook()
2020東京奧運會中國各項目獲獎詳情
這樣需要用到的三張圖表就繪制好了。
Pyecharts組合圖表Pyecharts進行可視化大屏第二步就是組合圖表,大致可分為四類:
Grid:并行多圖
Page:順序多圖
Tab:選項卡多圖
Timeline:時間線輪播多圖
官方文檔:https://pyecharts.org/#/zh-cn/composite_charts
這里用Page(順序多圖)居多,在組合圖表之前,還要先把前面的圖表繪制代碼改為函數。
def map_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東京奧運會各國金牌分布圖”),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
return c
順便還在其中增加了背景顏色bg_color、圖表IDchart_id,后者用于多圖表時定位區分。背景顏色的話,我選擇了淡藍色#ADD8E6。后續圖片的布局是根據圖表ID的對應關系進行布局,所以每張圖都要分別設置其id。
接著使用page = Page(layout= Page.DraggablePageLayout)模式對圖片進行展示,這一步是為了調整布局。
page = Page(layout=Page.DraggablePageLayout, page_title=“2020東京奧運會獎牌榜”)
# 在頁面中添加圖表
page.add(
title(),
map_world(),
bar_medals(),
pie_china(),)
page.render(‘test.html’)
調用繪制函數后生成一個 test.html 文件。
打開后可以其中的圖片進行拖拽,來實現自定義布局。
對圖片布局完畢后,要記得點擊左上角“save config”對布局文件進行保存。
點擊后,本地會生成一個chart_config.json的文件,這其中包含了每個圖表ID對應的布局位置。
最后,調用保存好的布局文件,重新生成html。
運行下面這行代碼。
page.save_resize_html(‘test.html’, cfg_file=‘chart_config.json’, dest=‘奧運.html’)
其中test.html 為生成的所有圖表的文件、chart_config.json 為下載的布局文件、奧運.html 為布局好的的儀表盤文件、打開儀表奧運.html:
這樣就實現了一次數據可視化——大屏展示。
但還有還有很多不足之處,比如若圖表配色沒有特殊去做調整。
整張大屏只是一個靜態的展示,而非具有商業場景的數據儀表盤。
真正的數據大屏往往更喜歡用BI軟件生成,能夠實現圖、表、切片器之間交叉篩選,希望以后有機會能用Python使用制作出來。
責任編輯:haq
-
代碼
+關注
關注
30文章
4803瀏覽量
68750 -
python
+關注
關注
56文章
4799瀏覽量
84820
原文標題:Python 制作可視化大屏全流程!
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論