pyecharts的用法入门(四)各种各样的饼状图Pie

文章目录


上一章的链接

诚如上一篇文章所说,其实echarts各图形的结构框架基本一致,参数不同而已,故学会一个就能够举一反三、触类旁通了。多类比、多查看文档,你也能学会echarts画图

声明:本系列所述均仅限入门,内容如冰山一角,想了解详情可以访问Pyecharts官方使用文档。关于文本的相关设计和图例的位置之类的上一篇讲过,这篇文章不会过多的提到。本节讲述设置各种各样的饼状图:

基础版本

# -*- coding: utf-8 -*-
# @Time: 2020/12/24 15:04
# @Author: 胡志远
# @Software: PyCharm

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

c = (
    Pie()
    .add("成绩等第", (("A", 5), ("B", 7), ("C", 10), ("D", 20)))
    .set_global_opts(title_opts=opts.TitleOpts(title="这是大标题"
                                               , subtitle="这是小标题"
                                               , pos_left='center'
                                               # 大标题配置
                                               , title_textstyle_opts=opts.TextStyleOpts(color='black'
                                                                                         , font_size=12
                                                                                         )
                                               # 小标题配置
                                               , subtitle_textstyle_opts=opts.TextStyleOpts(color='black'
                                                                                            , font_size=20
                                                                                            , font_weight='bold'
                                                                                            )
                                               )
                     # 图例设置
                     , legend_opts=opts.LegendOpts(pos_left='center'
                                                   , pos_bottom='bottom'
                                                   , orient="horizontal"
                                                   )
                     )
    # 标签设置
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{a} {b}:{c}"
                                               )
                     )
    .render("pie_base.html")
)

基础版
pyecharts的用法入门(四)各种各样的饼状图Pie

进阶版本(南丁格尔图)

基础版多少显得有点中规中矩,有个可以更加改进的地方,那就是有的时候饼状图的半径也可以表示一些数据信息。

南丁格尔图是弗罗伦斯·南丁格尔(Florence Nightingale)所发明的。又名为极区图。是一种圆形的直方图。Pyecharts可以画出这种图。

# -*- coding: utf-8 -*-
# @Time: 2020/12/25 0:35
# @Author: 胡志远
# @Software: PyCharm

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

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

c = (
    # 设置长、宽、背景色
    Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))
    .add(
        series_name="访问来源",
        data_pair=data_pair,
        # 是否展示成南丁格尔图,通过半径区分数据大小。可选择两种模式:
        # 'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
        # 'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
        rosetype="radius",
        # 饼图的半径,数组的第一项是内半径,第二项是外半径(如果两项均设置则为环状图)
        # 默认设置成百分比,相对于容器高宽中较小的一项的一半
        radius="55%",
        # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
        # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
        center=["50%", "50%"],
        # 标签配置项,参考 `series_options.LabelOpts`
        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=False),
    )
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )
    .render("customized_pie.html")
)

进阶版
pyecharts的用法入门(四)各种各样的饼状图Pie

花里胡哨版

大多数情况下,饼状图最多画成上面这两种的样子就足够了。但是Pyecharts的强大之处就在于它能够画出非常高级的图,比如下面这种:
pyecharts的用法入门(四)各种各样的饼状图Pie

# -*- coding: utf-8 -*-
# @Time: 2021/1/23 18:15
# @Author: 胡志远
# @Software: PyCharm

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

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

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

(
    Pie(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add(
        series_name="访问来源",
        data_pair=inner_data_pair,
        radius=[0, "30%"],
        label_opts=opts.LabelOpts(position="inner"),
    )
    .add(
        series_name="访问来源",
        radius=["40%", "55%"],
        data_pair=outer_data_pair,
        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")
)

(以上内容参考官方文档)

后续文章即将推出,敬请期待


如果觉得博主写的还不错的,欢迎点赞、评论、加关注,大家的访问就是博主更新文章不竭的源动力!

上一篇:Pyecharts实现微博签到中国/Pyecharts中使用scatterGL详解


下一篇:常见的表单校验规则