【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!
?來(lái)源:Python數(shù)據(jù)之道
作者:Peter
整理:Lemon
利用Pyecharts玩轉(zhuǎn)餅圖
餅圖在實(shí)際的可視化要求中是非常常見的,它能夠很好顯示個(gè)體的占比或者數(shù)據(jù)情況。本文中講解的是如何利用 pyecharts 來(lái)繪制各種滿足不同需求的餅圖,包含:
基礎(chǔ)餅圖+改變餅圖位置顏色
環(huán)狀餅圖
內(nèi)嵌餅圖
多餅圖
玫瑰圖
開始之前,先來(lái)看看部分效果:
注:文末提供本文的源碼獲取方式,供大家練習(xí)
導(dǎo)入庫(kù)
本文中使用的還是 pandas+pyecharts 組合,在jupyter notebook 中進(jìn)行繪圖。首先導(dǎo)入所需要的各種庫(kù):
基礎(chǔ)餅圖
模擬數(shù)據(jù)
我們自行模擬了一份消費(fèi)數(shù)據(jù),包含5個(gè)消費(fèi)項(xiàng)目:住宿+餐飲+交通+服裝+紅包,具體數(shù)據(jù)如下:
#?生成數(shù)據(jù) df?=?pd.DataFrame({"消費(fèi)":["住宿","餐飲","交通","服裝","紅包"],"數(shù)據(jù)":[2580,1300,500,900,1300]}) df將消費(fèi)和數(shù)據(jù)中的具體數(shù)據(jù)轉(zhuǎn)成列表形式:
繪圖
代碼的具體解釋見注釋:
c?=?(Pie().add("",?[list(z)?for?z?in?zip(x_data,?y_data)])???#?zip函數(shù)兩個(gè)部分組合在一起list(zip(x,y))----->?[(x,y)].set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))??#?標(biāo)題.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}"))??#?數(shù)據(jù)標(biāo)簽設(shè)置 )c.render_notebook()??改變位置和顏色
上面生成的餅圖是使用 pyecharts 自帶的顏色和位置,有時(shí)候我們需要做下改變:
現(xiàn)在我們生成的餅圖如下顯示:
顏色變成了我們?cè)O(shè)置的顏色
位置更靠左了
改變圖例位置
數(shù)據(jù)生成
上面的圖例是水平方向排列的,而且個(gè)數(shù)比較少。如果我們的圖例比較多,需要改成豎直方向,同時(shí)實(shí)現(xiàn)翻頁(yè)滾動(dòng)功能。
在這里我們使用的是 pyecharts 中自帶的數(shù)據(jù):
1、Faker.choose() :是用來(lái)生成數(shù)據(jù)標(biāo)簽,有3種不同的取值情況
2、Faker.values() 是用來(lái)生成具體的數(shù)據(jù),隨機(jī)生成
繪圖
還是通過(guò)上面的繪圖方法,加入數(shù)據(jù)同時(shí)添加各種配置項(xiàng):
視頻效果如下:環(huán)狀餅圖
環(huán)狀餅圖主要是通過(guò) add 方法中的 radius 參數(shù)來(lái)實(shí)現(xiàn)的。實(shí)現(xiàn)過(guò)程如下:
x_data?=?["小明",?"小紅",?"張三",?"李四",?"王五"] y_data?=?[335,?310,?234,?135,?548]c?=?(Pie(init_opts=opts.InitOpts(width="1600px",?height="1000px"))???#?圖形的大小設(shè)置.add(series_name="訪問(wèn)來(lái)源",data_pair=[list(z)?for?z?in?zip(x_data,?y_data)],radius=["15%",?"50%"],???#?餅圖內(nèi)圈和外圈的大小比例center=["30%",?"40%"],???#?餅圖的位置:左邊距和上邊距l(xiāng)abel_opts=opts.LabelOpts(is_show=True),???#?顯示數(shù)據(jù)和百分比??).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}?(ozvdkddzhkzd%)"),)c.render_notebook()可以看到圖形的中間是空的
內(nèi)嵌餅圖
內(nèi)嵌餅圖是指將兩個(gè)甚至多個(gè)環(huán)狀餅圖放在一起,實(shí)現(xiàn)代碼過(guò)程如下:
import?pyecharts.options?as?opts from?pyecharts.charts?import?Pie from?pyecharts.globals?import?ThemeType#?內(nèi)部餅圖 inner_x_data?=?["直達(dá)",?"營(yíng)銷廣告",?"搜索引擎","產(chǎn)品"] inner_y_data?=?[335,?679,?548,?283] inner_data_pair?=?[list(z)?for?z?in?zip(inner_x_data,?inner_y_data)] #?[['直達(dá)',?335],?['營(yíng)銷廣告',?679],?['搜索引擎',?1548],?[‘產(chǎn)品’,?283]]#?外部環(huán)形(嵌套) outer_x_data?=?["搜索引擎",?"郵件營(yíng)銷",?"直達(dá)",?"營(yíng)銷廣告",?"聯(lián)盟廣告",?"視頻廣告",?"產(chǎn)品",?"百度",?"谷歌","郵件營(yíng)銷",?"聯(lián)盟廣告"] outer_y_data?=?[335,?135,?147,?102,?220,?310,?234,?135,?648,?251] outer_data_pair?=?[list(z)?for?z?in?zip(outer_x_data,?outer_y_data)]c?=?(#?初始化Pie(init_opts=opts.InitOpts(width="900px",??#?設(shè)置圖形大小height="800px",theme=ThemeType.SHINE))??#?選擇主題#?內(nèi)部餅圖.add(series_name="版本3.2.1",??#?圖形名稱center=["50%",?"35%"],??#?餅圖位置data_pair=inner_data_pair,??#?系列數(shù)據(jù)項(xiàng),格式為?[(key1,?value1),?(key2,?value2)]radius=["25%",?"40%"],??#?餅圖半徑?數(shù)組的第一項(xiàng)是內(nèi)半徑,第二項(xiàng)是外半徑label_opts=opts.LabelOpts(position='inner'),?#?標(biāo)簽設(shè)置在內(nèi)部)#?外部嵌套環(huán)形圖.add(series_name="版本3.2.9",??#?系列名稱center=["50%",?"35%"],??#?餅圖位置radius=["40%",?"60%"],??#?餅圖半徑?數(shù)組的第一項(xiàng)是內(nèi)半徑,第二項(xiàng)是外半徑data_pair=outer_data_pair,?#?系列數(shù)據(jù)項(xiàng),格式為?[(key1,?value1),?(key2,?value2)]#?標(biāo)簽配置項(xiàng)?label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}\n{hr|}\n?{b|{b}:?}{c}??{per|ozvdkddzhkzd%}??",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,},},),)#?全局配置項(xiàng).set_global_opts(xaxis_opts?=?opts.AxisOpts(is_show?=?False),???#隱藏X軸刻度yaxis_opts?=?opts.AxisOpts(is_show?=?False),????#隱藏Y軸刻度legend_opts?=?opts.LegendOpts(is_show?=?True),??#隱藏圖例title_opts?=?opts.TitleOpts(title?=?None),????#隱藏標(biāo)題)#?系統(tǒng)配置項(xiàng).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item",formatter="{a}?<br/>{b}:?{c}?(ozvdkddzhkzd%)"),label_opts=opts.LabelOpts(is_show=True)??#?隱藏每個(gè)觸角標(biāo)簽) )c.render_notebook() 視頻效果如下:多餅圖
有時(shí)候我們需要將多個(gè)圖形放在一個(gè)大畫布中,需要用到子圖的制作。
在下面的代碼中每個(gè) add() 都是一個(gè)圖形的繪制,我們繪制了4個(gè)餅圖;同時(shí)center指定每個(gè)圖形的位置,radius指定每個(gè)餅圖內(nèi)外圈的大小
c?=?(Pie().add("",[list(z)?for?z?in?zip(["劇情",?"其他"],?[30,?70])],center=["20%",?"30%"],??#?位置radius=[60,?80],???#?每個(gè)餅圖內(nèi)外圈的大小).add("",[list(z)?for?z?in?zip(["奇幻",?"其他"],?[40,?60])],center=["55%",?"30%"],radius=[60,?80],).add("",[list(z)?for?z?in?zip(["愛情",?"其他"],?[24,?76])],center=["20%",?"70%"],radius=[60,?80],).add("",[list(z)?for?z?in?zip(["驚悚",?"其他"],?[11,?89])],center=["55%",?"70%"],radius=[60,?80],).set_global_opts(title_opts=opts.TitleOpts(title="Pie-多餅圖基本示例"),legend_opts=opts.LegendOpts(type_="scroll",?pos_top="20%",?pos_left="80%",?orient="vertical"),) )c.render_notebook() 視頻效果如下:玫瑰圖
玫瑰圖中每個(gè)部分的大小和粗細(xì)都是不同的
v?=?Faker.choose() c?=?(Pie().add("",[list(z)?for?z?in?zip(v,?Faker.values())],???#?兩個(gè)值radius=["30%",?"60%"],??#?大小center=["25%",?"50%"],??#?位置rosetype="radius",???label_opts=opts.LabelOpts(is_show=False),??#?不在圖形上顯示數(shù)據(jù)).add("",[list(z)?for?z?in?zip(v,?Faker.values())],radius=["30%",?"60%"],center=["75%",?"50%"],rosetype="area",).set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰圖示例")) )c.render_notebook() 視頻效果如下:作者簡(jiǎn)介
Peter,碩士畢業(yè)僧一枚,從電子專業(yè)自學(xué)Python入門數(shù)據(jù)行業(yè),擅長(zhǎng)數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅(jiān)持跑步,熱愛閱讀,樂(lè)觀生活。個(gè)人格言:不浮于世,不負(fù)于己
個(gè)人站點(diǎn):www.renpeter.cn,歡迎常來(lái)小屋逛逛
源碼文件獲取
為方便大家練習(xí),已將整理好的源代碼(jupyter notebook文件)分享給各位同學(xué),大家可以在作者的公眾號(hào)?「檸檬數(shù)據(jù)」?回復(fù)?pie2020?來(lái)獲取。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯 獲取本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開: https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請(qǐng)掃碼:總結(jié)
以上是生活随笔為你收集整理的【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 技术圈鄙视链形成的真实原因?
- 下一篇: 【学术相关】以前写过水论文怎么办?