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