<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>

          驚嘆,Pyecharts繪制餅圖原來可以如此漂亮!

          共 14440字,需瀏覽 29分鐘

           ·

          2021-05-21 00:42

          利用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 = [335310234135548]

          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} <br/>: {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 = [335679548283]
          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 = [335135147102220310234135648251]
          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": [4400],
                          },


                          "hr": {
                              "borderColor""#aaa",
                              "width""100%",
                              "borderWidth"0.5,
                              "height"0,
                          },

                          "b": {"fontSize"16"lineHeight"33},

                          "per": {
                              "color""#eee",
                              "backgroundColor""#334455",
                              "padding": [24],
                              "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} <br/>: {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(["劇情""其他"], [3070])],
                  center=["20%""30%"],  # 位置
                  radius=[6080],   # 每個餅圖內(nèi)外圈的大小
              )
              .add(
                  "",
                  [list(z) for z in zip(["奇幻""其他"], [4060])],
                  center=["55%""30%"],
                  radius=[6080],
              )
              .add(
                  "",
                  [list(z) for z in zip(["愛情""其他"], [2476])],
                  center=["20%""70%"],
                  radius=[6080],
              )
              .add(
                  "",
                  [list(z) for z in zip(["驚悚""其他"], [1189])],
                  center=["55%""70%"],
                  radius=[6080],
              )
              .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()
          視頻效果如下:




          PS公號內(nèi)回復「Python」即可進入Python 新手學習交流群,一起 100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識別文末二維碼,回復:1024

          瀏覽 171
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  吖v在线视频免费观看免费观看 | 手机在线毛片 | 成人九九| 久久亚洲AV成人无码国产电影 | 勉费黄片 |