歡迎來到pyecharts餅圖系列教程的進階篇!在上一篇基礎教程中,我們學習了餅圖的基本概念和簡單實現。在本文中,我們將深入探索pyecharts中餅圖的六種高級用法和自定義選項,包括環形餅圖、富文本標簽餅圖、滾動圖例餅圖、環形圖、嵌套餅圖和多餅圖組合。這些技巧將幫助你創建更加專業、美觀且信息豐富的數據可視化圖表。pyecahts源碼
下面是本文將要介紹的餅圖類型概覽:
- 環形餅圖:基礎環形設計,適合展示分類占比
- 富文本標簽餅圖:自定義標簽樣式,提升信息展示效果
- 滾動圖例餅圖:解決多類別數據圖例過長問題
- 環形圖(Doughnut_chart):中間留白的環形設計,適合對比數據
- 嵌套餅圖(Nested_pies):多層級數據結構展示
- 多餅圖(Multiple_pie):多圖表對比分析
讓我們從環形餅圖開始學習。
目錄
- 環形餅圖(Pie - Customized_pie)
- 代碼解析
- 效果與應用
- 富文本標簽餅圖(Pie - Rich Text Label)
- 代碼解析
- 效果與應用
- 滾動圖例餅圖(Pie - Scroll Legend)
- 代碼解析
- 效果與應用
- 環形圖(Doughnut_chart)
- 代碼解析
- 效果與應用
- 嵌套餅圖(Nested_pies)
- 代碼解析
- 效果與應用
- 多餅圖基本示例(Multiple_pie)
- 代碼解析
- 效果與應用
- 總結與展望
環形餅圖(Pie - Customized_pie)
環形餅圖是餅圖的基礎變體,通過設置內半徑不為零創建環形效果,使圖表更加直觀和美觀。下面是一個展示不同訪問來源數據的環形餅圖實現代碼:
import pyecharts.options as opts
from pyecharts.charts import Pie"""
Gallery 使用 pyecharts 1.1.0
參考地址: `https://echarts.apache.org/examples/editor.html?c=pie-doughnut` 目前無法實現的功能:1、迷之顏色映射的問題
"""# 定義數據
x_data = ["直接訪問", "郵件營銷", "聯盟廣告", "視頻廣告", "搜索引擎"]
y_data = [335, 310, 274, 235, 400]
# 組合數據并按值排序
data_pair = [list(z) for z in zip(x_data, y_data)]
data_pair.sort(key=lambda x: x[1])# 創建餅圖實例
( Pie(init_opts=opts.InitOpts(bg_color="#2c343c")) # 設置背景顏色為深色.add(series_name="訪問來源", # 系列名稱data_pair=data_pair, # 數據對rosetype="radius", # 設置為環形圖radius="55%", # 餅圖半徑center=["50%", "50%"], # 餅圖中心位置label_opts=opts.LabelOpts(is_show=False, position="center"), # 不顯示中心標簽).set_global_opts(title_opts=opts.TitleOpts(title="Customized Pie", # 圖表標題pos_left="center", # 標題位置pos_top="20", # 標題距離頂部的距離title_textstyle_opts=opts.TextStyleOpts(color="#fff"), # 標題顏色),legend_opts=opts.LegendOpts(is_show=False), # 不顯示圖例).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" # 提示框格式),label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), # 標簽顏色)#.render("customized_pie.html") # 渲染為HTML文件.render_notebook() # 在Notebook中顯示
)
代碼解析
環形餅圖的實現主要包含以下步驟:
-
數據準備:定義訪問來源名稱(
x_data
)和對應數據值(y_data
),組合成數據對并按值排序,使餅圖扇區按大小順序排列,提升可讀性。 -
餅圖初始化:通過
Pie(init_opts=opts.InitOpts(bg_color="#2c343c"))
創建實例并設置深色背景,增強圖表視覺效果。 -
添加數據系列:使用
.add()
方法添加數據,關鍵參數rosetype="radius"
啟用環形效果,radius="55%"
控制環形大小,center=["50%", "50%"]
設置餅圖在畫布中心位置。 -
全局配置:通過
set_global_opts()
設置標題樣式和位置,隱藏圖例以簡化界面。 -
系列配置:使用
set_series_opts()
自定義提示框格式和標簽樣式,提示框會顯示系列名稱、數據名稱、數值和百分比。 -
渲染輸出:提供兩種輸出方式,
render()
生成HTML文件,render_notebook()
適合在Jupyter環境中直接展示。
效果與應用
核心優勢:環形設計比普通餅圖更直觀,能夠更好地展示各分類間的比例關系。深色背景增強了數據的可讀性,使圖表在投影演示、報告和網頁中都能清晰顯示。
適用場景:
- 網站流量來源分析
- 銷售渠道占比統計
- 市場份額分布展示
- 資源分配可視化
使用技巧:當數據類別較少(5-8個)且需要突出比例關系時,環形餅圖是理想選擇。如需強調某個類別,可考慮調整其顏色或添加動畫效果。
接下來,我們將學習如何創建帶有富文本標簽的餅圖,通過自定義標簽樣式提升數據展示效果。
富文本標簽餅圖(Pie - Rich Text Label)
富文本標簽是提升餅圖信息展示效果的重要手段,通過自定義標簽樣式、背景和格式,可以使數據標簽更加直觀、美觀且信息豐富。下面是一個使用富文本標簽的餅圖示例:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Fakerc = (Pie().add("",[list(z) for z in zip(Faker.choose(), Faker.values())],radius=["40%", "55%"],label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ",background_color="#eee",border_color="#aaa",border_width=1,border_radius=4,rich={"a": {"color": "#999", "lineHeight": 22, "align": "center"},"abg": {"backgroundColor": "#e3e3e3","width": "100%","align": "right","height": 22,"borderRadius": [4, 4, 0, 0],},"hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},"b": {"fontSize": 16, "lineHeight": 33},"per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},},),).set_global_opts(title_opts=opts.TitleOpts(title="Pie-富文本示例"))#.render("pie_rich_label.html")
)
c.render_notebook()
代碼解析
富文本標簽餅圖的核心在于label_opts
配置:
-
標簽格式定義:通過
formatter
參數設置標簽模板:{a|{a}}{abg|} {hr|} {b|{b}: }{c} {per|{d}%}
,其中{a}
表示系列名稱,{b}
表示數據名稱,{c}
表示數據值,{d}
表示百分比。 -
樣式類定義:
rich
參數是一個字典,定義了模板中各部分的樣式:a
:系列名稱樣式(灰色、居中對齊)abg
:標簽背景樣式(淺灰色、圓角)hr
:分隔線樣式(細灰色線)b
:數據名稱樣式(大字體)per
:百分比樣式(深色背景、白色文字)
-
標簽位置:設置
position="outside"
將標簽顯示在餅圖外部,避免遮擋數據。 -
數據生成:使用
Faker
類快速生成模擬數據,簡化示例代碼。
效果與應用
核心優勢:富文本標簽大大提升了數據標簽的可讀性和美觀度,使標簽不僅是數據展示工具,還能成為圖表的視覺元素之一。
適用場景:
- 需要展示詳細數據信息的報告
- 面向客戶的演示文稿
- 數據看板和儀表盤
- 學術論文中的數據可視化
使用技巧:根據實際需求調整標簽樣式,確保文字與背景對比度足夠,避免標簽過于復雜影響可讀性。對于數據密集型圖表,富文本標簽可以幫助用戶快速獲取關鍵信息。
接下來,我們將學習如何創建帶有滾動圖例的餅圖,解決數據類別較多時的圖例過長問題。
滾動圖例餅圖(Pie - Scroll Legend)
當餅圖數據類別較多(10個以上)時,傳統圖例會占據大量空間,影響整體布局。滾動圖例通過垂直滾動方式展示所有類別,既節省空間又保持了數據的完整性。下面是一個帶有滾動圖例的餅圖示例:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Fakerc = (Pie().add("",[list(z)for z in zip(Faker.choose() + Faker.choose() + Faker.choose(),Faker.values() + Faker.values() + Faker.values(),)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="Pie-Legend 滾動"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))#.render("pie_scroll_legend.html")
)
c.render_notebook()
代碼解析
滾動圖例餅圖的實現重點在于圖例配置:
-
數據準備:通過多次調用
Faker.choose()
和Faker.values()
生成大量模擬數據,模擬類別較多的場景。 -
滾動圖例設置:核心參數
legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical")
:type_="scroll"
:啟用圖例滾動功能pos_left="80%"
:將圖例放置在右側orient="vertical"
:設置圖例為垂直方向
-
餅圖位置調整:通過
center=["40%", "50%"]
將餅圖向左移動,為右側滾動圖例留出足夠空間。 -
標簽簡化:設置標簽格式為
{b}: {c}
,只顯示數據名稱和數值,避免標簽過于復雜。
效果與應用
核心優勢:在不犧牲數據完整性的前提下,有效解決了多類別數據圖例過長的問題,保持了圖表的簡潔性和可用性。
適用場景:
- 產品分類數據展示
- 地區分布統計
- 多品牌市場份額分析
- 細分市場調研數據
使用技巧:當數據類別超過10個時,建議使用滾動圖例。同時,調整餅圖位置和大小,確保與圖例之間有足夠的空間,避免視覺沖突。
接下來,我們將學習另一種風格的環形圖(Doughnut_chart),其特點是中間留有較大空白,可用于展示額外信息。
環形圖(Doughnut_chart)
環形圖是餅圖的經典變體,通過在中間留出較大空白區域,不僅可以減輕視覺負擔,還能在空白處展示標題或關鍵指標。這種設計特別適合對比數據或展示占比關系。下面是一個環形圖的實現示例:
import pyecharts.options as opts
from pyecharts.charts import Pie"""
Gallery 使用 pyecharts 1.1.0
參考地址: `https://echarts.apache.org/examples/editor.html?c=pie-doughnut` 目前無法實現的功能:1、餅狀圖中間的圖例名稱暫時無法顯示
"""# 定義數據
x_data = ["直接訪問", "郵件營銷", "聯盟廣告", "視頻廣告", "搜索引擎"]
y_data = [335, 310, 234, 135, 1548]# 創建餅圖實例
(Pie().add(series_name="訪問來源",data_pair=[list(z) for z in zip(x_data, y_data)],radius=["50%", "70%"],label_opts=opts.LabelOpts(is_show=False, position="center"),).set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"),# label_opts=opts.LabelOpts(formatter="{b}: {c}"))#.render("doughnut_chart.html").render_notebook()
)
代碼解析
環形圖的實現要點如下:
-
環形效果配置:通過
radius=["50%", "70%"]
設置內外半徑,創建環形效果。內圓半徑越大,中間空白區域越大。 -
圖例位置優化:將圖例放置在左側并設置為垂直方向(
pos_left="left", orient="vertical"
),便于用戶查看類別信息。 -
中心標簽處理:當前版本中,環形圖中間的圖例名稱暫時無法顯示(代碼中已注釋說明),這是一個已知限制。
-
數據特點適配:示例中搜索引擎數據值(1548)遠大于其他類別,環形圖能夠清晰展示這種占比懸殊的數據,突出主要類別。
效果與應用
核心優勢:環形設計比普通餅圖更適合展示占比關系,尤其是當存在一個主導類別時。中間的空白區域可以用于放置標題或關鍵指標(未來版本可能支持)。
適用場景:
- 業務報告中的核心指標展示
- 市場分析中的主導產品/服務占比
- 網站流量主要來源展示
- 資源分配中的主要方向突出
使用技巧:當需要突出某個主要類別時,環形圖比普通餅圖效果更好。可以通過調整內外半徑比例,控制中間空白區域的大小。
接下來,我們將學習如何創建嵌套餅圖(Nested_pies),它能夠展示多層級的數據結構關系。
嵌套餅圖(Nested_pies)
嵌套餅圖是一種高級數據可視化工具,由多個同心圓環組成,能夠直觀展示多層級的數據結構關系,如大類與子類的包含關系。下面是一個嵌套餅圖的實現示例:
import pyecharts.options as opts
from pyecharts.charts import Pie"""
Gallery 使用 pyecharts 1.1.0
參考地址: `https://echarts.apache.org/examples/editor.html?c=pie-nest` 目前無法實現的功能:1、暫無
"""inner_x_data = ["直達", "營銷廣告", "搜索引擎"]
inner_y_data = [335, 679, 1548]
inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]outer_x_data = ["直達", "營銷廣告", "搜索引擎", "郵件營銷", "聯盟廣告", "視頻廣告", "百度", "谷歌", "必應", "其他"]
outer_y_data = [335, 310, 234, 135, 1048, 251, 147, 102]
outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)](Pie().add(series_name="訪問來源",data_pair=inner_data_pair,radius=[0, "30%"],label_opts=opts.LabelOpts(position="inner"),).add(series_name="訪問來源",radius=["40%", "55%"],data_pair=outer_data_pair,label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}
{hr|}{b|{b}: }{c} {per|{d}%} ",background_color="#eee",border_color="#aaa",border_width=1,border_radius=4,rich={"a": {"color": "#999", "lineHeight": 22, "align": "center"},"abg": {"backgroundColor": "#e3e3e3","width": "100%","align": "right","height": 22,"borderRadius": [4, 4, 0, 0],},"hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},"b": {"fontSize": 16, "lineHeight": 33},"per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},},),).set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"))#.render("nested_pies.html").render_notebook()
)
代碼解析
嵌套餅圖的實現需要處理多層數據和圓環配置:
-
多層數據準備:定義內層數據(
inner_data_pair
)展示主要分類(直達、營銷廣告、搜索引擎),外層數據(outer_data_pair
)展示更詳細的子分類(如搜索引擎細分為百度、谷歌等)。 -
同心圓環配置:通過設置不同的
radius
值創建多層圓環:- 內層圓環:
radius=[0, "30%"]
(實心內圓) - 外層圓環:
radius=["40%", "55%"]
(環形)
- 內層圓環:
-
標簽策略:內層標簽設置為
position="inner"
顯示在圓環內部;外層標簽設置為position="outside"
并使用富文本格式,確保信息清晰易讀。 -
圖例配置:將圖例放置在左側并設置為垂直方向,便于用戶理解多層數據關系。
效果與應用
核心優勢:嵌套餅圖能夠在一個圖表中同時展示多層級數據關系,幫助用戶理解數據的結構和層次,以及各層級之間的占比關系。
適用場景:
- 網站流量來源的大類與子類分析
- 銷售數據的地區與產品分類展示
- 市場份額的品牌與產品線關系
- 人口統計的層級結構數據
使用技巧:嵌套餅圖最適合展示2-3層數據結構。層數過多會導致圖表過于復雜,影響可讀性。確保內層和外層數據之間有明確的包含關系。
最后,我們將學習如何創建多餅圖(Multiple_pie),它可以在一個畫布中展示多個獨立餅圖,便于對比不同類別的數據。
多餅圖基本示例(Multiple_pie)
多餅圖是一種強大的對比分析工具,通過在同一畫布中展示多個獨立餅圖,可以直觀對比不同類別或組的數據分布。下面是一個多餅圖的實現示例:
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.commons.utils import JsCodefn = """function(params) {if(params.name == '其他')return '\\n\\n\\n' + params.name + ' : ' + params.value + '%';return params.name + ' : ' + params.value + '%';}"""def new_label_opts():return opts.LabelOpts(formatter=JsCode(fn), position="center")c = (Pie().add("",[list(z) for z in zip(["劇情", "其他"], [25, 75])],center=["20%", "30%"],radius=[60, 80],label_opts=new_label_opts(),).add("",[list(z) for z in zip(["奇幻", "其他"], [24, 76])],center=["55%", "30%"],radius=[60, 80],label_opts=new_label_opts(),).add("",[list(z) for z in zip(["愛情", "其他"], [14, 86])],center=["20%", "70%"],radius=[60, 80],label_opts=new_label_opts(),).add("",[list(z) for z in zip(["驚悚", "其他"], [11, 89])],center=["55%", "70%"],radius=[60, 80],label_opts=new_label_opts(),).set_global_opts(title_opts=opts.TitleOpts(title="Pie-多餅圖基本示例"),legend_opts=opts.LegendOpts(type_="scroll", pos_top="20%", pos_left="80%", orient="vertical"),)# .render("mutiple_pie.html")
)
c.render_notebook()
代碼解析
多餅圖的實現需要處理多個餅圖的添加和布局:
-
自定義標簽函數:使用
JsCode
定義JavaScript函數fn
,實現標簽的動態格式化。當數據名稱為’其他’時,添加額外換行符避免標簽擁擠。 -
標簽配置封裝:通過
new_label_opts()
函數封裝標簽配置,提高代碼復用性。 -
多餅圖添加:通過四次調用
.add()
方法添加四個獨立餅圖,分別展示劇情、奇幻、愛情、驚悚四類數據的分布。 -
餅圖布局控制:通過
center
參數精確設置每個餅圖的中心位置(如["20%", "30%"]
),使四個餅圖分布在畫布的四個象限。 -
餅圖大小統一:使用相同的
radius=[60, 80]
設置每個餅圖的內外半徑,確保視覺一致性。 -
滾動圖例支持:設置滾動圖例,解決多類別數據的圖例展示問題。
效果與應用
核心優勢:多餅圖能夠在同一畫布中展示多個數據分布,便于直接對比不同組或類別的數據特征,發現它們之間的差異和相似性。
適用場景:
- 不同電影類型的觀眾占比對比
- 各地區銷售數據的分布比較
- 不同時間段的用戶行為分析
- 多產品/服務的市場份額對比
使用技巧:保持各個餅圖的樣式一致(如顏色、大小),便于觀眾進行對比。餅圖數量不宜過多(建議不超過4-6個),避免圖表過于擁擠。
總結與展望
在本文中,我們學習了pyecharts中六種餅圖的高級用法:
- 環形餅圖:基礎環形設計,適合展示分類占比
- 富文本標簽餅圖:自定義標簽樣式,提升信息展示效果
- 滾動圖例餅圖:解決多類別數據圖例過長問題
- 環形圖(Doughnut_chart):中間留白的環形設計,適合對比數據
- 嵌套餅圖(Nested_pies):多層級數據結構展示
- 多餅圖(Multiple_pie):多圖表對比分析
這些技巧涵蓋了餅圖的主要高級應用場景,能夠幫助你創建更加專業、美觀且信息豐富的數據可視化圖表。
在后續的文章中,我們將繼續探索pyecharts
如果你有任何問題或建議,歡迎在評論區留言討論。