<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python基礎】驚嘆,Pyecharts繪制餅圖原來可以如此漂亮!

          共 6628字,需瀏覽 14分鐘

           ·

          2020-12-17 08:14

          ?來源:Python數(shù)據(jù)之道

          作者:Peter

          整理:Lemon

          利用Pyecharts玩轉(zhuǎn)餅圖


          餅圖在實際的可視化要求中是非常常見的,它能夠很好顯示個體的占比或者數(shù)據(jù)情況。本文中講解的是如何利用 pyecharts 來繪制各種滿足不同需求的餅圖,包含:

          • 基礎餅圖+改變餅圖位置顏色
          • 環(huán)狀餅圖
          • 內(nèi)嵌餅圖
          • 多餅圖
          • 玫瑰圖

          開始之前,先來看看部分效果:

          注:文末提供本文的源碼獲取方式,供大家練習

          導入庫

          本文中使用的還是 pandas+pyecharts 組合,在jupyter notebook 中進行繪圖。首先導入所需要的各種庫:

          基礎餅圖

          模擬數(shù)據(jù)

          我們自行模擬了一份消費數(shù)據(jù),包含5個消費項目:住宿+餐飲+交通+服裝+紅包,具體數(shù)據(jù)如下:

          #?生成數(shù)據(jù)
          df?=?pd.DataFrame({"消費":["住宿","餐飲","交通","服裝","紅包"],
          ???????????????????"數(shù)據(jù)":[2580,1300,500,900,1300]
          ??????????????????})
          df

          將消費和數(shù)據(jù)中的具體數(shù)據(jù)轉(zhuǎn)成列表形式:

          繪圖

          代碼的具體解釋見注釋:

          c?=?(
          ????Pie()
          ????.add("",?[list(z)?for?z?in?zip(x_data,?y_data)])???#?zip函數(shù)兩個部分組合在一起list(zip(x,y))----->?[(x,y)]
          ????.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度開支"))??#?標題
          ????.set_series_opts(label_opts=opts.LabelOpts(formatter=":?{c}"))??#?數(shù)據(jù)標簽設置
          )

          c.render_notebook()??

          改變位置和顏色

          上面生成的餅圖是使用 pyecharts 自帶的顏色和位置,有時候我們需要做下改變:

          現(xiàn)在我們生成的餅圖如下顯示:

          • 顏色變成了我們設置的顏色
          • 位置更靠左了
          視頻效果如下:

          改變圖例位置

          數(shù)據(jù)生成

          上面的圖例是水平方向排列的,而且個數(shù)比較少。如果我們的圖例比較多,需要改成豎直方向,同時實現(xiàn)翻頁滾動功能。

          在這里我們使用的是 pyecharts 中自帶的數(shù)據(jù):

          1、Faker.choose() :是用來生成數(shù)據(jù)標簽,有3種不同的取值情況

          2、Faker.values() 是用來生成具體的數(shù)據(jù),隨機生成

          繪圖

          還是通過上面的繪圖方法,加入數(shù)據(jù)同時添加各種配置項:

          視頻效果如下:

          環(huán)狀餅圖

          環(huán)狀餅圖主要是通過 add 方法中的 radius 參數(shù)來實現(xiàn)的。實現(xiàn)過程如下:

          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%"],???#?餅圖內(nèi)圈和外圈的大小比例
          ????????center=["30%",?"40%"],???#?餅圖的位置:左邊距和上邊距
          ????????label_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}?
          :?{c}?(go7utgvlrp%)"

          ????????),
          ????)

          c.render_notebook()

          可以看到圖形的中間是空的

          內(nèi)嵌餅圖

          內(nèi)嵌餅圖是指將兩個甚至多個環(huán)狀餅圖放在一起,實現(xiàn)代碼過程如下:

          import?pyecharts.options?as?opts
          from?pyecharts.charts?import?Pie
          from?pyecharts.globals?import?ThemeType

          #?內(nèi)部餅圖
          inner_x_data?=?["直達",?"營銷廣告",?"搜索引擎","產(chǎn)品"]
          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],?[‘產(chǎn)品’,?283]]

          #?外部環(huán)形(嵌套)
          outer_x_data?=?["搜索引擎",?"郵件營銷",?"直達",?"營銷廣告",?"聯(lián)盟廣告",?"視頻廣告",?"產(chǎn)品",?"百度",?"谷歌","郵件營銷",?"聯(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",??#?設置圖形大小
          ????????height="800px",
          ????????theme=ThemeType.SHINE))??#?選擇主題

          ????#?內(nèi)部餅圖
          ????.add(
          ????????series_name="版本3.2.1",??#?圖形名稱
          ????????center=["50%",?"35%"],??#?餅圖位置
          ????????data_pair=inner_data_pair,??#?系列數(shù)據(jù)項,格式為?[(key1,?value1),?(key2,?value2)]
          ????????radius=["25%",?"40%"],??#?餅圖半徑?數(shù)組的第一項是內(nèi)半徑,第二項是外半徑
          ????????label_opts=opts.LabelOpts(position='inner'),?#?標簽設置在內(nèi)部
          ????)

          ????#?外部嵌套環(huán)形圖
          ????.add(
          ????????series_name="版本3.2.9",??#?系列名稱
          ????????center=["50%",?"35%"],??#?餅圖位置
          ????????radius=["40%",?"60%"],??#?餅圖半徑?數(shù)組的第一項是內(nèi)半徑,第二項是外半徑
          ????????data_pair=outer_data_pair,?#?系列數(shù)據(jù)項,格式為?[(key1,?value1),?(key2,?value2)]

          ????????#?標簽配置項?
          ????????label_opts=opts.LabelOpts(
          ????????????position="outside",
          ????????????formatter="{a|{a}}{abg|}\n{hr|}\n?{b|:?}{c}??{per|go7utgvlrp%}??",
          ????????????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),????#隱藏標題
          ????????????????????)

          ????#?系統(tǒng)配置項
          ????.set_series_opts(
          ????????tooltip_opts=opts.TooltipOpts(
          ????????????trigger="item",
          ????????????formatter="{a}?
          :?{c}?(go7utgvlrp%)"

          ????????),
          ????????label_opts=opts.LabelOpts(is_show=True)??#?隱藏每個觸角標簽
          ????)
          )

          c.render_notebook()
          視頻效果如下:

          多餅圖

          有時候我們需要將多個圖形放在一個大畫布中,需要用到子圖的制作。

          在下面的代碼中每個 add() 都是一個圖形的繪制,我們繪制了4個餅圖;同時center指定每個圖形的位置,radius指定每個餅圖內(nèi)外圈的大小

          c?=?(
          ????Pie()
          ????.add(
          ????????"",
          ????????[list(z)?for?z?in?zip(["劇情",?"其他"],?[30,?70])],
          ????????center=["20%",?"30%"],??#?位置
          ????????radius=[60,?80],???#?每個餅圖內(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()
          視頻效果如下:

          玫瑰圖

          玫瑰圖中每個部分的大小和粗細都是不同的

          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),??#?不在圖形上顯示數(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()
          視頻效果如下:



          作者簡介

          Peter,碩士畢業(yè)僧一枚,從電子專業(yè)自學Python入門數(shù)據(jù)行業(yè),擅長數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅持跑步,熱愛閱讀,樂觀生活。個人格言:不浮于世,不負于己

          個人站點:www.renpeter.cn,歡迎常來小屋逛逛


          源碼文件獲取

          為方便大家練習,已將整理好的源代碼(jupyter notebook文件)分享給各位同學,大家可以在作者的公眾號?「檸檬數(shù)據(jù)」?回復?pie2020?來獲取。

          往期精彩回顧





          獲取本站知識星球優(yōu)惠券,復制鏈接直接打開:

          https://t.zsxq.com/qFiUFMV

          本站qq群704220115。

          加入微信群請掃碼:

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级黄色在线看 | 91成人观看 | 免费中文中文A片 | 日韩欧美黄色电影网站 | 欧美性爱免费在线视频海量版 |