python报错cannot import name ‘Pie’ from ‘pyecharts’

2021年6月19日 发表评论 阅读评论

之前使用过pycharts进行汇图,最近更新本地的pyecharts库,使用之前的代码时,发现之前的方法不好使了,报错:cannot import name 'Pie' from 'pyecharts' 。找了下官方文档看了下,发现其现在有两个版本,v0.5.X和v1两个大版本,v0.5.X和v1间不兼容,v1是一个全新的版本。由于默认安装的是最新版本,之前的方法换了地方。比如之前常用的pie图、bar图等,现在需要使用如下方法引用:

from pyecharts.charts import Bar, Grid, Pie, Map, WordCloud

当然如果觉得不习惯或者不想修改,也可以使用老版本的,把pyecharts卸载后,安装老的版本:

pip install pyecharts==0.5.11
# 豆瓣源
pip install -i https://pypi.doubanio.com/simple/ pyecharts==0.5.11

这里以pie饼图为例,给下老版本和新版本的用法。

一、老版本使用

pie.add()方法使用的语法为:

add(name, attr, value,
    radius=None,
    center=None,
    rosetype=None, **kwargs)

各参数的意义是:

name -> str   图例名称
attr -> list     属性名称
value -> list  属性所对应的值
radius -> list  饼图的半径,数组的第一项是内半径,第二项是外半径,默认为 [0, 75],默认设置成百分比,相对于容器高宽中较小的一项的一半
center -> list
饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标,默认为 [50, 50]
默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
rosetype -> str
是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。默认为'radius'
radius:扇区圆心角展现数据的百分比,半径展现数据的大小
area:所有扇区圆心角相同,仅通过半径展现数据大小

1、基本饼图

from pyecharts import Pie
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 10]
pie = Pie("饼图示例")
pie.add(
    "",
    attr,
    v1,
    is_label_show=True,
    is_more_utils=True
)
pie.render(path="Bing1.html")

2、环形饼图

from pyecharts import Pie
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 10]
pie = Pie("饼图-圆环图示例", title_pos='center')
pie.add(
    "",
    attr,
    v1,
    radius=[40, 75],
    label_text_color=None,
    is_label_show=True,
    is_more_utils=True,
    legend_orient="vertical",
    legend_pos="left",
)
pie.render(path="Bing2.html")

3、多饼图

from pyecharts import Pie
from pyecharts import Style
# 否则会遇到错误NameError: name 'Style' is not defined
pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center')
style = Style()
pie_style = style.add(
    label_pos="center",
    is_label_show=True,
    label_text_color=None
)
pie.add(
    "", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24], **pie_style
)
pie.add(
    "", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24], **pie_style
)
pie.add(
    "", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24], **pie_style
)
pie.add(
    "", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24], **pie_style
)
pie.add(
    "", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24], **pie_style
)
pie.add(
    "", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24], **pie_style
)
pie.add(
    "", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24], **pie_style
)
pie.add(
    "", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24], **pie_style
)
pie.add(
    "", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24], **pie_style
)
pie.add(
    "",
    ["犯罪", ""],
    [28, 72],
    center=[90, 70],
    radius=[18, 24],
    legend_top="center",
    **pie_style
)
pie.render(path="Bing4.html")

以上内容主要来自:python中pyecharts绘制饼图

二、新版本使用

1、基本示例

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

2、环装图

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

3、富文本

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

代码来自:[pyecharts学习笔记]——Pie饼图




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.