
作者:俊欣
來源:關于數(shù)據(jù)分析與可視化
前兩篇Pyecharts的文章來幫我們簡單的梳理了一下可以用Pyecharts來繪制哪些圖表之后,本篇文章我們用pyecharts里面的一些組件,將繪制的圖表都組合起來
首先介紹Pyecharts模塊當中的Grid組件,使用Grid組件可以很好地將多張圖無論是上下組合還是左右組合,都能夠很好地拼接起來,我們先來看第一個例子
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="直方圖"))
)
line = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="折線圖", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(line, grid_opts=opts.GridOpts(pos_top="50%"))
.render("水平組合圖_test.html")
)
我們可以看到兩張圖表被以上下組合的方式拼接起來,當然除了上下的拼接以外,我們還可以左右來拼接,代碼如下
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="直方圖"),legend_opts=opts.LegendOpts(pos_left="20%"),)
)
line = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="折線圖", pos_right="5%"),
legend_opts=opts.LegendOpts(pos_right="20%"),
)
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_left="60%"))
.add(line, grid_opts=opts.GridOpts(pos_right="50%"))
.render("垂直組合圖_test.html")
)
可以看到我們無論是想上下拼接還是左右拼接,都可以通過調(diào)整參數(shù)“pos_left”、“pos_right”、“pos_top”以及“pos_bottom”這幾個參數(shù)來實現(xiàn),我們再來看一下下面這個例子,我們也可以將地圖和直方圖兩者拼接起來
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家1", Faker.values())
.add_yaxis("商家2", Faker.values())
.set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%"))
) map = (
Map()
.add("商家1", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(title_opts=opts.TitleOpts(title="地圖-基本示例"))
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_top="50%", pos_right="75%"))
.add(map, grid_opts=opts.GridOpts(pos_left="60%"))
.render("地圖+直方圖.html")
)
英文單詞“overlap”的意思是重疊,那么放在這里,也就指的是可以將多張圖合并成一張,那么該怎么結合才好呢?我們來看一下下面這個例子,我們將直方圖和折線圖通過overlap組件組合到一起
v1 = Faker.values()
v2 = Faker.values()
v3 = Faker.values()
bar = (
Bar()
.add_xaxis(Faker.provinces)
.add_yaxis("商家A", v1)
.add_yaxis("商家B", v2)
.extend_axis(
yaxis=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(formatter="{value} 個"), interval=20
)
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Overlap-bar+line"),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} 個")),
)
)
line = Line().add_xaxis(Faker.provinces).add_yaxis("商家C", v3, yaxis_index=1)
bar.overlap(line)
bar.render("直方圖+折線圖Overlap.html")
除此之外,我們也可以將散點圖和折線圖合并在一張圖上面,在代碼上就只要將直方圖的代碼替換成散點圖的就行,這邊也就具體不做演示
我們也可以將上面提高的兩個組件結合起來使用,以此來繪制多條Y軸的直方圖圖表,代碼如下
Bar()
.add_xaxis(x_data)
.add_yaxis( "A",
[具體相關的數(shù)據(jù)],
yaxis_index=0,
color="#d14a61",
)
.add_yaxis( "B",
[具體相關的數(shù)據(jù)],
yaxis_index=1,
color="#5793f3",
)
.直方圖的全局配置代碼....
line = (
Line()
.add_xaxis(x_data)
.add_yaxis( "C",
[具體相關的數(shù)據(jù)],
yaxis_index=2,
color="#675bba",
label_opts=opts.LabelOpts(is_show=False),
)
)
bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
grid.render("test.html")
我們在用Pyecharts繪制了多張圖表之后,可以直接Tab組件將多張圖表連起來,一頁放一張圖表,具體看下面的例子和代碼,
def bar_datazoom_slider() -> Bar: c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=[opts.DataZoomOpts()],
)
) return c def line_markpoint() -> Line: c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis( "商家A",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="折線圖"))
) return c def pie_rosetype() -> Pie: v = Faker.choose()
c = (
Pie()
.add( "",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["25%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(title_opts=opts.TitleOpts(title="餅圖-玫瑰圖示例"))
) return c
tab = Tab()
tab.add(bar_datazoom_slider(), "直方圖")
tab.add(line_markpoint(), "折線圖")
tab.add(pie_rosetype(), "餅圖")
tab.render("tab_base.html")
分別將所繪制的三張圖表放置在三個頁面當中,通過pyecharts庫當中的tab串聯(lián)起來
和上面Tab組件不一樣的是,Tab組件是一頁放一張圖表,有幾張圖表就分成幾頁,而Page組件則是將繪制完成的多張圖表統(tǒng)統(tǒng)放在一張頁面里面,代碼的改動上面也十分的簡單,只要將上面代碼的Tab部分改成Page()即可,如下
def bar_datazoom_slider() -> Bar: c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=[opts.DataZoomOpts()],
)
) return c def line_markpoint() -> Line: c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis( "商家A",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="折線圖"))
) return c def pie_rosetype() -> Pie: v = Faker.choose()
c = (
Pie()
.add( "",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["25%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(title_opts=opts.TitleOpts(title="餅圖-玫瑰圖示例"))
) return c
page = Page(layout=Page.SimplePageLayout)
page.add(
bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
)
page.render("page_simple_layout.html")
上圖所示的圖表在頁面當中是不能被挪動的,在Page()組件當中我們還能夠使得圖表按照我們所想的那樣隨意的挪動
## 上面的代碼都一樣, page = Page(layout=Page.DraggablePageLayout)
page.add(
bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
)
page.render("page_draggable_layout.html")
本篇文章所用到的繪制的圖表都比較的簡單,為了可以讓讀者更加容易輕松的上手來實踐,本質(zhì)上就是通過上面提到的幾大組件將繪制好的圖表給串聯(lián)起來。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10