基本示例

MPAndroidChart饼状图 饼图pyecharts_MPAndroidChart饼状图

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
c = (
     #设置主题
    Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add(
        # 系列名称
        "",   
        
        # 系列数据项  格式为 [(key1, value1), (key2, value2)]
        [list(z) for z in zip(Faker.choose(), Faker.values())],  
        
        # 系列 label 颜色  Optional[str]
        color = None,
         
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        # Optional[Sequence]
        radius = None,
        
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        # Optional[Sequence]
        center = None,

        # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
        # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
        # area:所有扇区圆心角相同,仅通过半径展现数据大小
        # Optional[str]
        rosetype = None,
    
        # 饼图的扇区是否是顺时针排布。
        is_clockwise = True,
    
        # 标签配置项,参考 `series_options.LabelOpts`
        label_opts = opts.LabelOpts(),
    
        # 提示框组件配置项,参考 `series_options.TooltipOpts`
        tooltip_opts = None,
    
        # 图元样式配置项,参考 `series_options.ItemStyleOpts`
        itemstyle_opts = None,
    
        # 可以定义 data 的哪个维度被编码成什么。
        # types.Union[types.JSFunc, dict, None]
        encode = None,
        )
    # 全局配置项
    # 设置标题
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
    
    # 系统配置项
    # 设置标签
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_base.html")
)

设置颜色

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_set_color.html")
)

MPAndroidChart饼状图 饼图pyecharts_搜索引擎_02

位置调整

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
    	# 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        center=["35%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-调整位置"),
        legend_opts=opts.LegendOpts(pos_left="15%"), #图例位置调整
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_position.html")
)

MPAndroidChart饼状图 饼图pyecharts_搜索引擎_03

半径调整——环形图

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.globals import ThemeType
from pyecharts.faker import Faker
c = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
    .add(
        "",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        radius=["40%", "75%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-Radius"),
        legend_opts=opts.LegendOpts(
            orient="vertical", #图例垂直放置
            pos_top="15%",# 图例位置调整
            pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_radius.html")
)

MPAndroidChart饼状图 饼图pyecharts_配置项_04

富文本示例

里面的一些参数,比如颜色,字体,都是可以调整的

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType

c = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
    .add(
        "",  # 系列名称
        # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        
        # 饼图的半径,数组的第一项是内半径,第二项是外半径
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        radius=["40%", "55%"],
        
        #标签配置项
        label_opts=opts.LabelOpts(
            # position 标签的位置
            position="outside",
            # 回调函数,回调函数格式:
            # (params: Object|Array) => string
            # 设置标签的显示样式
            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(title_opts=opts.TitleOpts(title="Pie-富文本示例"))
    .render("pie_rich_label.html")
)

MPAndroidChart饼状图 饼图pyecharts_饼图_05


修改一些颜色参数

MPAndroidChart饼状图 饼图pyecharts_MPAndroidChart饼状图_06

嵌套饼图

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

# 内部饼图
inner_x_data = ["直达", "营销广告", "搜索引擎"]
inner_y_data = [335, 679, 1548]
inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]
# [['直达', 335], ['营销广告', 679], ['搜索引擎', 1548]]


# 外部环形(嵌套)
outer_x_data = ["直达", "营销广告", "搜索引擎", "邮件营销", "联盟广告", "视频广告", "百度", "谷歌"]
outer_y_data = [335, 310, 234, 135, 1048, 251, 147, 102]
outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)]
...
# 观察一下怎么嵌套的
# 1.内部——直达335 = 外部 直达335 
# 2.内部——营销广告679 = 外部 营销广告310 + 搜索引擎234 + 邮件营销135
# 3.内部——搜索引擎1548 = 外部 联盟广告1048 + 视频广告251 + 百度147 + 谷歌102
[['直达', 335],
 
 ['营销广告', 310],
 ['搜索引擎', 234],
 ['邮件营销', 135],
 
 ['联盟广告', 1048],
 ['视频广告', 251],
 ['百度', 147],
 ['谷歌', 102]]
...


c = (
     # 初始化
    Pie(init_opts=opts.InitOpts(
        width="900px", 
        height="800px",
        theme=ThemeType.SHINE))
    
    # 内部饼图
    .add(
        series_name="访问来源",  # 系列名称
        center=["50%", "35%"],
        data_pair=inner_data_pair,  # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        radius=[0, "30%"],  #饼图半径 数组的第一项是内半径,第二项是外半径
        label_opts=opts.LabelOpts(position="inner"), #标签设置在内部
    )
    
    # 外部嵌套环形图
    .add(
        series_name="访问来源",  # 系列名称
        center=["50%", "35%"],
        radius=["40%", "55%"],  #饼图半径 数组的第一项是内半径,第二项是外半径
        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(legend_opts=opts.LegendOpts(
        pos_left="left", 
        orient="vertical"))
   
    # 系统配置项
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", 
            formatter="{a} <br/>{b}: {c} ({d}%)"
        )
    )
    .render("nested_pies.html")
)

MPAndroidChart饼状图 饼图pyecharts_搜索引擎_07

定制饼图

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

# 数据准备
x_data = ["直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎"]
y_data = [335, 310, 274, 235, 400]
data_pair = [list(z) for z in zip(x_data, y_data)]
"""
[['直接访问', 335], 
 ['邮件营销', 310],
 ['联盟广告', 274], 
 ['视频广告', 235], 
 ['搜索引擎', 400]]
"""
data_pair.sort(key=lambda x: x[1]) # 排序
"""
[['视频广告', 235],
 ['联盟广告', 274], 
 ['邮件营销', 310], 
 ['直接访问', 335], 
 ['搜索引擎', 400]]
"""


c=(
   # 初始化
    Pie(init_opts=opts.InitOpts(
        width="900px", 
        height="600px",
        theme=ThemeType.MACARONS))
    .add(
        series_name="访问来源",# 系列名称
        data_pair=data_pair, # 系列数据项,格式为 [(key1, value1), (key2, value2)]
        
        # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
        # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
        # area:所有扇区圆心角相同,仅通过半径展现数据大小
        rosetype="radius",
        
        # 饼图的半径
        radius="55%",
        
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        center=["50%", "50%"],
        
        # 标签配置项
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    
    #全局配置项
    .set_global_opts(
        # 设置标题
        title_opts=opts.TitleOpts(
            title="Customized Pie",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
        ),
        # 设置图例
        legend_opts=opts.LegendOpts(is_show=True),
    )
    
    # 系统配置项
    .set_series_opts(
        # 设置提示框
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="#3333FF"),
    )
    .render("customized_pie.html")
)

MPAndroidChart饼状图 饼图pyecharts_饼图_08

多饼图

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

fn = """
    function(params) {
        if(params.name == '其他')
            return '\\n\\n\\n' + params.name + ' : ' + params.value + '%';
        return params.name + ' : ' + params.value + '%';
    }
    """


def new_label_opts():
    return opts.LabelOpts(formatter=JsCode(fn), position="center")


c = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
    .add(
        "",
        [list(z) for z in zip(["剧情", "其他"], [25, 75])],
        center=["20%", "30%"],
        radius=[60, 80],
        label_opts=new_label_opts(),
    )
    .add(
        "",
        [list(z) for z in zip(["奇幻", "其他"], [24, 76])],
        center=["55%", "30%"],
        radius=[60, 80],
        label_opts=new_label_opts(),
    )
    .add(
        "",
        [list(z) for z in zip(["爱情", "其他"], [14, 86])],
        center=["20%", "70%"],
        radius=[60, 80],
        label_opts=new_label_opts(),
    )
    .add(
        "",
        [list(z) for z in zip(["惊悚", "其他"], [11, 89])],
        center=["55%", "70%"],
        radius=[60, 80],
        label_opts=new_label_opts(),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-多饼图基本示例"),
        legend_opts=opts.LegendOpts(
            type_="scroll", pos_top="20%", pos_left="80%", orient="vertical"
        ),
    )
    .render("mutiple_pie.html")
)

MPAndroidChart饼状图 饼图pyecharts_配置项_09

玫瑰图示例

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType

v = Faker.choose()
c = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
    .add(
        "",
        [list(z) for z in zip(v, Faker.values())],
        radius=["30%", "75%"],
        center=["25%", "50%"],
        rosetype="radius",
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add(
        "",
        [list(z) for z in zip(v, Faker.values())],
        radius=["30%", "75%"],
        center=["75%", "50%"],
        rosetype="area",
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
    .render("pie_rosetype.html")
)

MPAndroidChart饼状图 饼图pyecharts_饼图_10