1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【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}?(13ixwwoc3%)"

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

        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|13ixwwoc3%}??",
        ????????????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}?(13ixwwoc3%)"

        ????????),
        ????????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
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            ThePorn人妻白浆 | 国产精品成人三级 | 蜜桃91精品秘 入口17c | 国产精品久久久久久久久久懂色 | 国产做爰又粗又大又 | 天堂8中文在线 | 欧美操逼女 | 国产操逼视频播放 | 淫色一非一区二区朝鲜 | 淫五月|