100天精通Python(可视化篇)——第93天:Pyecharts绘制多种炫酷饼图参数说明+代码实战(百分比、环形、玫瑰、内嵌、多个子图饼图)

文章目录

  • 专栏导读
  • 1. 基础饼图
    • add函数
    • 简单案例
    • 改变颜色
  • 2. 百分比饼图
  • 3. 环形饼图
  • 4. 玫瑰饼图
  • 5. 内嵌环图
  • 6. 多个饼图
  • 书籍推荐(包邮送书5本)

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

1. 基础饼图

add函数

Pie.add()方法是Pyecharts模块中用于向饼图中添加数据的方法。该方法的所有参数如下:

add(
    series_name: str = "",
    data_pair: Union[List[Tuple], List[dict]] = None,
    *,
    radius: Optional[Sequence] = None,
    center: Optional[Sequence] = None,
    rosetype: Optional[str] = None,
    label_opts: Union[opts.LabelOpts, dict, None] = None,
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
    encode: Optional[dict] = None,
    sort_: Optional[str] = None,
    selected_mode: Optional[str] = None,
    selected_offset: Optional[int] = None,
    clockwise: Optional[bool] = None,
    start_angle: Optional[int] = None,
    min_angle: Optional[int] = None,
    rose_area_color: Optional[str] = None,
    label_line_opts: Union[opts.LabelLineOpts, dict, None] = None,
    zlevel: Optional[int] = None,
    z: Optional[int] = None,
) -> "Pie"

参数说明:

  • series_name:(str)系列名称,用于区分不同的系列数据。默认为””。
  • data_pair:(Union[List[Tuple], List[dict]])数据对,数据对是一个元组或字典,包含两个元素:名称和值。例如:[(“A”, 10), (“B”, 20), (“C”, 30)]或[{“name”: “A”, “value”: 10}, {“name”: “B”, “value”: 20}, {“name”: “C”, “value”: 30}]。
  • radius:(Optional[Sequence])饼图的半径,可以设置为一个列表,包含内半径和外半径。例如:[“40%”, “75%”]。
  • center:(Optional[Sequence])饼图的中心位置,可以设置为一个列表,包含横坐标和纵坐标。例如:[“50%”, “50%”]。
  • rosetype:(Optional[str])玫瑰图类型,可选值为”radius”和”area”。默认为None。
  • label_opts:(Union[opts.LabelOpts, dict, None])标签配置项,用于设置标签的样式、格式等。默认为None。
  • tooltip_opts:(Union[opts.TooltipOpts, dict, None])提示框配置项,用于设置提示框的样式、格式等。默认为None。
  • itemstyle_opts:(Union[opts.ItemStyleOpts, dict, None])图形样式配置项,用于设置饼图的颜色、阴影等。默认为None。
  • encode:(Optional[dict])数据编码,用于指定数据项和维度的对应关系。例如:{“itemName”: 0, “value”: 1}。
  • sort_:(Optional[str])数据排序方式,可选值为”ascending”和”descending”。默认为None。
  • selected_mode:(Optional[str])选中模式,可选值为”single”和”multiple”。默认为None。
  • selected_offset:(Optional[int])选中偏移量,用于设置选中的图形偏移的像素值。默认为None。
  • clockwise:(Optional[bool])饼图是否顺时针排列。默认为None。
  • start_angle:(Optional[int])饼图的起始角度。默认为None。
  • min_angle:(Optional[int])饼图的最小角度。默认为None。
  • rose_area_color:(Optional[str])玫瑰图区域颜色。默认为None。
  • label_line_opts:(Union[opts.LabelLineOpts, dict, None])标签线配置项,用于设置标签线的样式、格式等。默认为None。
  • zlevel:(Optional[int])图形所在图层。默认为None。
  • z:(Optional[int])图形的 z 坐标。默认为None。

以上代码为Pie.add()方法的所有参数示例。在实际使用中,可以根据需要选择设置相应的参数。

简单案例

下面是使用Pyecharts链式写法绘制基础饼图的代码和说明介绍:

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

# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]

# 使用链式写法创建Pie实例,添加数据并设置全局属性、系列属性
pie = (Pie()
       .add("", data)
       .set_global_opts(title_opts=opts.TitleOpts(title="基础饼图"))
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
      )


# 在jupyter notebook输出
pie.render_notebook()

# 在浏览器中显示图表
pie.render("basic_pie.html")

代码说明:

  1. 导入Pyecharts的options和Pie模块。
  2. 构造数据,这里用了一个列表,每个元素是一个元组,第一个元素是标签,第二个元素是数值。
  3. 使用链式写法创建Pie实例,并调用add()方法添加数据,第一个参数是饼图的名称,第二个参数是数据列表。
  4. 继续使用链式写法调用set_global_opts()方法,设置全局属性,这里设置了标题。
  5. 继续使用链式写法调用set_series_opts()方法,设置系列属性,这里设置了标签格式。
  6. 调用render_notebook方法,在jupyter notebook输出

运行结果:

改变颜色

在Pyecharts中,set_colors()函数可以用于设置图表中的颜色,可以传入一个颜色列表,每个元素是一个字符串,表示一个颜色值。下面是一些常用的颜色值及其对应的字符串:

  • 红色:"#c23531"
  • 绿色:"#61a0a8"
  • 蓝色:"#2f4554"
  • 橙色:"#d48265"
  • 紫色:"#91c7ae"
  • 黄色:"#749f83"
  • 粉色:"#ca8622"
  • 深红色:"#bda29a"
  • 浅蓝色:"#6e7074"
  • 深蓝色:"#546570"
  • 浅绿色:"#c4ccd3"
  • 深绿色:"#4b565b"

当然,还有很多其他的颜色值可以使用,可以根据需要自行搜索。在Pyecharts中,可以使用set_colors()函数将这些颜色值传入图表中,或者使用JS代码自定义颜色。

调用set_colors()方法,设置颜色,这里使用了五种颜色:

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

# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]

# 使用链式写法创建Pie实例,添加数据并设置全局属性、系列属性
pie = (Pie()
       .add("", data)
       .set_colors(["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae"]) # 修改颜色
       .set_global_opts(title_opts=opts.TitleOpts(title="基础饼图"))
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
      )

# 在jupyter notebook输出
pie.render_notebook()

运行结果:

2. 百分比饼图

下面是使用Pyecharts链式写法绘制百分比饼图并在jupyter notebook中输出的代码和说明介绍

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

# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]

# 绘制饼图
pie = (Pie()
       .add("", data)
       .set_global_opts(title_opts=opts.TitleOpts(title="百分比饼图"))
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
      )

# 在jupyter notebook输出
pie.render_notebook()

代码说明:

导入Pyecharts的options和Pie模块。

构造数据,这里用了一个列表,每个元素是一个元组,第一个元素是标签,第二个元素是数值。

创建Pie实例,使用链式写法设置图表的各种属性。.add("", data)表示将数据添加到饼图中,set_global_opts()设置全局属性,这里设置了标题,set_series_opts()设置系列属性,这里设置了标签格式。

调用render_notebook()方法,在jupyter notebook中输出饼图。

运行结果:

3. 环形饼图

通过在add函数中设置radius设置饼图内圈和外圈的大小比例,绘制环形饼图:

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

# 构造数据
data = [("A", 55), ("B", 20), ("C", 18), ("D", 5), ("E", 2)]

# 绘制饼图
pie = (Pie()
       .add("", data, radius=["15%", "50%"]) # 设置饼图内圈和外圈的大小比例
       .set_global_opts(title_opts=opts.TitleOpts(title="环形饼图"))
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
      )

# 在jupyter notebook输出
pie.render_notebook()

运行结果:

4. 玫瑰饼图

下面是使用Pyecharts链式写法绘制玫瑰饼图并在jupyter notebook中输出的示例代码:

from pyecharts.charts import Pie
from pyecharts.options import InitOpts, TitleOpts, LegendOpts, ToolboxOpts, LabelOpts

# 初始化Pie对象
pie = Pie(init_opts=InitOpts(width='800px', height='400px'))

# 添加数据
data = [('类别1', 15), ('类别2', 20), ('类别3', 10), ('类别4', 5), ('类别5', 5), ('类别6', 5)]
pie.add(series_name='', data_pair=data, radius=['30%', '70%'], rosetype='radius')

# 设置全局配置项
pie.set_global_opts(title_opts=TitleOpts(title='玫瑰饼图示例'),
                    legend_opts=LegendOpts(is_show=True),
                    toolbox_opts=ToolboxOpts(is_show=True),
                    )

# 设置系列配置项
pie.set_series_opts(label_opts=LabelOpts(formatter="{b}: {c} ({d}%)"))

# 输出到jupyter notebook
pie.render_notebook()

代码说明:

  1. 首先,我们导入需要使用的类和模块:Pie、InitOpts、TitleOpts、LegendOpts、ToolboxOpts和LabelOpts。

  2. 然后,我们初始化一个Pie对象,并设置图表的宽度和高度。

  3. 接着,我们添加数据。这里我们使用一个元组列表来表示数据,元组的第一个元素是类别名称,第二个元素是类别所占比例。

  4. 我们设置全局配置项,包括标题、图例和工具栏等。

  5. 我们设置系列配置项,包括标签格式化和玫瑰图的类型等。

  6. 最后,我们使用render_notebook()方法将图表输出到jupyter notebook中。

运行代码后,你应该可以在jupyter notebook中看到绘制的玫瑰饼图:

5. 内嵌环图

内嵌环图是一种可以在一个圆环内部再嵌套一个圆环的饼图,通常用于展示两层数据之间的关系:

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对象
pie = (
    Pie(init_opts=opts.InitOpts(width="800px", 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}%)"
        ) # 设置提示框格式
    )
)

# 输出到jupyter notebook
pie.render_notebook()

运行结果:

6. 多个饼图

本代码使用了 Pyecharts 库中的 Pie 类,绘制了一个多饼图的基本示例,展示了不同类型电影的占比情况。

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

c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(["剧情", "其他"], [30, 70])],
        center=["20%", "30%"],
        radius=[60, 80],
        label_opts=opts.LabelOpts(formatter="{b}: {d}%")  # 给每个饼图加上百分比
    )
    .add(
        "",
        [list(z) for z in zip(["奇幻", "其他"], [40, 60])],
        center=["55%", "30%"],
        radius=[60, 80],
        label_opts=opts.LabelOpts(formatter="{b}: {d}%")
    )
    .add(
        "",
        [list(z) for z in zip(["爱情", "其他"], [24, 76])],
        center=["20%", "70%"],
        radius=[60, 80],
        label_opts=opts.LabelOpts(formatter="{b}: {d}%")
    )
    .add(
        "",
        [list(z) for z in zip(["惊悚", "其他"], [11, 89])],
        center=["55%", "70%"],
        radius=[60, 80],
        label_opts=opts.LabelOpts(formatter="{b}: {d}%")
    )
    .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()

具体实现过程如下:

导入所需库:pyecharts.options、pyecharts.charts 和 pyecharts.globals。

创建一个 Pie 类实例。

使用 add() 方法添加四个饼图,分别表示剧情、奇幻、爱情和惊悚类型电影的占比情况。

在每个饼图中使用 label_opts 参数的 formatter 属性,给每个饼图加上百分比的标签。

使用 set_global_opts() 方法设置全局参数,包括标题和图例的位置和样式。

最后使用 render_notebook() 方法将图表渲染到 Jupyter Notebook 中。

需要注意的是,饼图的位置和大小可以通过 center 和 radius 参数来设置,每个饼图的数据以列表形式传入,每个元素包含两个值,分别表示该数据的名称和数值。在本示例中,其他类型电影的占比是通过剩余部分的方式计算得出的。

运行结果:

书籍推荐(包邮送书5本)

《用ChatGPT与VBA一键搞定Excel》

Excel Home全新力作,详解ChatGPT与 VBA在Excel中的超全实用技巧,精选海量VBA代码案例,全面揭示ChatGPT与 VBA的技术秘籍,技巧详解+示例实操,既适合普通用户“快速进阶”,又适合资深玩家“解锁大招”。
在以 ChatGPT 为代表的 AIGC(AI Generated Content,利用人工智能技术来生成内容)工具大量涌现的今天,学习编程的门槛大幅降低。对于大部分没有编程基础的职场人士来说,VBA 这样的办公自动化编程语言比以前任何时候都更容易掌握,能够极大提高工作效率。本书通过 3 个部分:VBA 基础知识、ChatGPT基础知识、ChatGPT实战办公自动化,帮助Excel用户从零开始迅速掌握VBA,以“授人以渔”的方式灵活应对任何需要自动化办公的场景。
简而言之,本书的目标是:普通用户只需要掌握一些VBA的基本概念,然后借助 ChatGPT 就可以得到相应的VBA代码,从而解决具体问题。

抽奖送书老规矩(不点赞收藏中奖无效):注意记得关注博主不然中奖了还不知道!!!

  • 1. 点赞收藏文章
  • 2. 评论区留言:人生苦短,我用Python!!!(留言才能进入奖池,每人最多留言三条)
  • 3. 周六八点爬虫抽奖5人
  • Excel VBA其实很简单 当当购买链接 :http://product.dangdang.com/29140305.html
  • 用ChatGPT与VBA一键搞定Excel 当当购买链接:http://product.dangdang.com/29577257.html

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年7月7日
下一篇 2023年7月11日

相关推荐