前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pyecharts-11-绘制饼图

pyecharts-11-绘制饼图

作者头像
皮大大
发布2021-03-01 16:33:14
3.7K0
发布2021-03-01 16:33:14
举报
文章被收录于专栏:机器学习/数据可视化

Pyecharts-11-绘制饼图

饼图在实际的工作还是会经常使用,能够很清晰的显示各类数据和占比情况,曾经在工作中绘制了环饼图和多饼图的结合。本文中介绍的是如何利用Pyecharts绘制饼图和进阶的环状饼图和玫瑰图

  • 基本案例
  • 位置和颜色
  • 图例滚动
  • 环形饼图
  • 多饼图
  • 玫瑰图

感谢官网的资料学习:https://gallery.pyecharts.org/#/Pie/README

导入库

代码语言:javascript
复制
from pyecharts.globals import CurrentConfig, OnlineHostType   # 事先导入,防止不出图
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

import pandas as pd
import numpy as np

基本案例

下面是一份模拟的月度开支的数据

代码语言:javascript
复制
c = (
    Pie()
    .add("", [list(z) for z in zip(x_data, y_data)])
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)

c.render_notebook()

改变位置和颜色

代码语言:javascript
复制
c = (
    Pie()
    .add("",
         [list(z) for z in zip(x_data, y_data)],
         center=["30%", "50%"],) # 1、距离左边和上边的距离百分比
    .set_colors(["blue", "green", "purple", "red", "pink"])  # 2、改变颜色
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)

c.render_notebook()

图例滚动

当饼图中图例比较多的时候,可以利用滚动的方式,下面是pyecharts自带的数据集:

代码语言:javascript
复制
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                Faker.choose() + Faker.choose() + Faker.choose() + Faker.choose(),
                Faker.values() + Faker.values() + Faker.values() + Faker.values(),
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-图例滚动"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)

c.render_notebook()

环形饼图

代码语言:javascript
复制
x_data = ["直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎"]
y_data = [335, 310, 234, 135, 1548]

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%", "50%"],   # 左边距和上边距
        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} ({d}%)"
        ),
    )
)

c.render_notebook()

多饼图

代码语言:javascript
复制
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()

玫瑰图

代码语言:javascript
复制
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()

环状饼图

本案例讲解的是如何绘制环状饼图(内嵌饼图)

代码语言:javascript
复制

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|{d}%}  ",
            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} ({d}%)"
        ),
        label_opts=opts.LabelOpts(is_show=True)  # 隐藏每个触角标签
    )
)

c.render_notebook()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pyecharts-11-绘制饼图
  • 导入库
  • 基本案例
  • 改变位置和颜色
  • 图例滚动
  • 环形饼图
  • 多饼图
  • 玫瑰图
  • 环状饼图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档