Bootstrap

python数据可视化---Pyecharts作图方式、修饰逻辑与数据格式

pyecharts库

下载pyecharts库

直接cmd打开命令提示符输入pip install pyecharts后按回车键下载即可

验证pyecharts库

Step1:
打开jupyter notebook输入import pyecharts然后换行输入print(pyecharts.version)运行。
Step2:
若出现pyecharts的版本号即说明运行成功。
如下图所示:
1.9.1即为所装版

pyecharts作图步骤

可详见pyecharts官网

pyecharts的配置项、基本使用、图表类型、进阶以及Web框架整合pyecharts官网均有详细解释,此处仅对基础部分进行详细解释,理解后即可运用pyecharts官网的内容。

引入pyecharts绘图相关库

Step1:from pyecharts import options as opts
等同于import pyecharts.options as opts
由于pyecharts中对图形的所有操作均在options中来进行设置,所以要首先导入pyecharts中的options。

Step2:from pyecharts.globals import ThemeType
若想对交互式图形的主题进行设置,则引入ThemeType;反之,则可以不引入。

Step3:若要作柱状交互式图形则引入Bar,即:
from pyecharts.charts import Bar
若要作箱形图则引入Boxplot,即:
from pyecharts.charts import Boxplot
同理若想要引入其他交互式图形,则可在pyecharts官网–>图表类型中查找。

pyecharts作图

此处以柱状图为例,其他类型图在pyecharts官网均有详细解释,此处例子只是为了让你可以看懂官网的所有类、参数、配置项等,能够更好的理解官网,以至于可以根据官网学以致用!

pyecharts简单作图—交互式图像的不同写法及显示方式

写法1:链式调用—设置一个纵轴标签

链式调用:将图作为一个对象保存到bar中
优点:未来在进行开发工作时,能够更加容易的去调用该对象。

from pyecharts import options as opts 
from pyecharts.charts import Bar
bar = (
    Bar()
    """
    设置横轴坐标值
    """
    .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    """
    设置纵轴的标签,数值
    注意:.add_yaxis()不能缺少交互式图形的名称
    此处只设置了一个纵轴标签,可根据文件数据设置多个纵轴标签
    """
    .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
    """
    .set_global_opts:设置全局配置项
    """
    .set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
    """
    # 或者直接使用字典参数
    # .set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
    """
)
bar.render()#若在notebook中显示,则为bar.render_notebook()
写法2:单独调用—设置一个纵轴标签

单独调用: 不习惯链式调用的开发者依旧可以单独调用方法

from pyecharts import options as opts 
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
bar.render()#若在notebook中显示,则为bar.render_notebook()

运行结果显示为:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c3a1ca8a8bc4fac9cfb45fd091b886c.png

写法1-2:链式调用—设置多个纵轴标签
from pyecharts import options as opts
from pyecharts.charts import Bar

from pyecharts.faker import Faker
c = (
    Bar()
    #设置横轴坐标值
    #Faker.choose()函数:自动随机生成含七个元素的列表
    .add_xaxis(Faker.choose())
    #设置多个纵轴标签
    #Faker.values()函数:自动随机生成含七个整数的列表
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
c.render_notebook()
写法2-2:单独调用—设置多个纵轴标签
from pyecharts import options as opts
from pyecharts.charts import Bar

from pyecharts.faker import Faker
c = Bar()
#设置横轴坐标值
#Faker.choose()函数:自动随机生成含七个元素的列表
c.add_xaxis(Faker.choose())
#设置多个纵轴标签
#Faker.values()函数:自动随机生成含七个整数的列表
c.add_yaxis("商家A", Faker.values())
c.add_yaxis("商家B", Faker.values())
c.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")))
c.render_notebook()

运行结果显示为:

在这里插入图片描述

显示方式1:

无参数形式:交互式图形直接保存在当前文件夹下新生成的render.html中

bar.render()

有参数形式:保存在你所设置的路径中

bar.render(file)
eg:bar.render(“E:\nihao.html”)–>保存在E盘中新建的nihao.html中。

显示方式2:

在jupyter notebook中直接显示:

bar.render_notebook()

注意:此处用了bar的原因:本人将交互式柱状图Bar类赋给了定义的变量bar,实际应用中以自身设置的变量为准。

Pyecharts的图形修饰逻辑

各图形的配置项

根据官网全局配置项或系列配置项对交互式图形的配置,此处以初始化配置项InitOpts为例。

Step1:不论你要对图形做任何配置,都要先根据你想要作的图的类型,找到该图对应的类并导入,然后写完基础的交互式图形代码。

比如:
柱状图—Bar:from pyecharts.charts import Bar
class Bar(
# 初始化配置项,参考 global_options.InitOpts
init_opts: opts.InitOpts = opts.InitOpts()
)

日历图—Calendar:from pyecharts.charts import Calendar
class Calendar(
# 初始化配置项,参考 global_options.InitOpts
init_opts: opts.InitOpts = opts.InitOpts()
)

Step2:根据你想要的配置在相应的函数体中找到对应的参数或类进行设置。

例如:主题配置
注意:主题配置时,若不想用InitOpts类中的theme: str = “white”,(用字符类型表示),则可以:
Step1:from pyecharts.globals import ThemeType
Step2:theme= ThemeType.想要的主题 eg:theme= ThemeType.DARK
详见:进阶话题—>定制主题—>主题风格

全局配置项

定义:一张图的整体的一些设置
使用.set_global_opts()来配置

(1)使用全局配置项时要知道对应内容的类名,比如设置标题:
Step1:找到官网中标题配置项的类名TitleOpts—将其改为title_opts(大写改小写,拼接英文之间加下划线)
Step2:让更改后的类名等于opts.标题类名。即title_opts= opts.TitleOpts()
/
注意:opts.标题类名------即class pyecharts.options.TitleOpts的缩写opts.TitleOpts()
/
Step3:然后找到TitleOpts类中定义主标题的参数 title: Optional[str] = None
注意:Optional是指参数title可有可无,没有title系统不会报错

Step4:设置一个标题字符串即:title= ‘这是一个标题’

(2)若想在标题之后在加上仍属于该类的参数则,不同参数之间用逗号隔开,如下: .set_global_opts(title_opts=
opts.TitleOpts(title= ‘标题’, title_link=‘https://pyecharts.org’))

注:title_link是一个转跳链接,即点击标题会自动跳转到你指定的地方

图未加全局配置项的原始形态如下:

x =list (range(1,8))#创建一个x列表:[1, 2, 3, 4, 5, 6, 7]
y =[114, 55, 27, 101, 125, 27, 105]
bar2 =Bar(init_opts= opts.InitOpts(width= '620px', height= '300px'))
bar2.add_xaxis(list(x))
bar2.add_yaxis('name', y)
#.set_global_opts()用来进行全局配置
bar2.set_global_opts()
bar2.render_notebook()

运行结果显示为:

在这里插入图片描述

给图加全局配置项—标题以及跳转链接,如下:

x =list (range(1,8))#创建一个x列表:[1, 2, 3, 4, 5, 6, 7]
y =[114, 55, 27, 101, 125, 27, 105]
bar3 =Bar(init_opts= opts.InitOpts(width= '620px', height= '300px'))
bar3.add_xaxis(list(x))
bar3.add_yaxis('name', y)
#.set_global_opts()用来进行全局配置
bar3.set_global_opts(title_opts= opts.TitleOpts(title= '这是一个标题', title_link= 'https://pyecharts.org/'))
bar3.render_notebook()

运行结果显示为:
(点击标题会自动跳转至所设置的跳转链接)

在这里插入图片描述

系列配置项

定义:对图的某一个局部进行设置
使用.set_series_opts()来配置

使用方法与全局配置项类似

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

bar = (
	Bar(init_opts=opts.InitOpts(width="620px", height="300px"))
	.add_xaxis(list(x))
	.add_yaxis("name", y)
	#系列配置项:消除纵轴标签的显示数值
	.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
bar.render_notebook()

运行结果显示为:

在这里插入图片描述

标记点的设定

class MarkPointOpts(
# 标记点数据,参考 series_options.MarkPointItem
data: Sequence[Union[MarkPointItem, dict]] = None )
解释
Sequence
即序列,代表标记点数据data是一个序列,即data是一个列表
Union[MarkPointItem, dict]
代表列表中的每个单元可以是MarkPointItem类(为系列配置项中的一个类)的对象,或者是一个dict(字典)。

例子如下:

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

bar = Bar(init_opts=opts.InitOpts(width="620px", height="300px"))
bar.add_xaxis(list(x))
bar.add_yaxis("name", y)
bar.set_series_opts(
            label_opts=opts.LabelOpts(is_show=False),#不显示标签
            markpoint_opts=opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                    opts.MarkPointItem(type_="average", name="平均值"),
                ]
            ))#去掉bar的数字标识
bar.render_notebook()
"""
在该例子中,使用MarkPointItem类时直接写为了:opts.MarkPointItem(type_="max", name="最大值")
并未写成:markpointitem_opts= opts.MarkPointItem(type= 'max', name= '最大值')
原因为:该类全称是MarkPointItem,并不是MarkPointItemOpts,所以不需要有‘markpointitem_opts= ’
"""

运行结果显示为:
在这里插入图片描述

配置项之间的层次关系

各个配置项中类(class)之间的关系并不都是平行的,有很多上下级的关系,比如工具配置项相关设置、坐标相关设置。
例如:

工具配置项ToolboxOpts中的一个参数 feature:
各工具配置项,参考 `global_options.ToolBoxFeatureOpts
feature: Union[ToolBoxFeatureOpts,dict] = ToolBoxFeatureOpts()

解释
Union[ToolBoxFeatureOpts,dict]代表该类继承了ToolBoxFeatureOpts(工具箱动态类型切换配置项)这个配置项,也就是说ToolBoxFeatureOpts的相关功能被包含在了ToolboxOpts内配置项内。
此时写法为:

例题:创建一个交互式柱状图,要求:横轴刻度为1~7,纵轴值分别为[114, 55, 27, 101, 125, 27, 105],坐标轴刻度最大值为8,不显示x轴坐标轴轴线。

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

x =list (range(1,8))#创建一个x列表:[1, 2, 3, 4, 5, 6, 7]
y =[114, 55, 27, 101, 125, 27, 105]
bar= (
	Bar()
	.add_xaxis(list(x))
	.add_yaxis('name', y)
	.set_global_opts(xaxis_opts= opts.Axis(max= 8, axisline_opts= opts.AxisLineOpts(is_show= False)))
)
bar.render_notsbook()

结果显示为:
在这里插入图片描述

思考与练习1

创建一个交互式柱状图,要求:
(1)横轴刻度为1~7,纵轴值分别为[114, 55, 27, 101, 125, 27, 105]
(2)加入主标题和副标题
(3)请阅读DataZoomOpts:区域缩放配置项部分,在bar图中加入缩放条

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

x= list (range(1,8))
y= [114, 55, 27, 101, 125, 27, 105]
y1= []
for i in y:
	yi.append(opts.BarItem(value= i, name= ''))
bar= (
	.Bar()
	.add_xaxis(x)
	.add_yaxis('name', y1)
	.set_global_opts(title_opts= opts.Title(title= '主标题', subtitle= '副标题'), datazoom_opts= opts.DataZoomOpts(is_show= True))
)
bar.render_notebook()

"""
注意:创建列表时不能用x= np.arange(1,8),交互式图形会显示出错,因为其产生的不是列表,而是一维数据,创建列表用x= list(range(a,b))即可。
"""

结果显示为:
在这里插入图片描述

思考与练习2

创建一个交互式柱状图,要求:
(1)横轴刻度为1~7,纵轴值分别为[114, 55, 27, 101, 125, 27, 105]
(2)引入ESSOS主题,并设置柱标(即标签)为斜体,并且字体大小为20
(3)在bar作图中,请给图中的最大值,最小值,平均值位置做线标
(4)在全局设定中定义y轴的最大值为135(即y坐标轴上的刻度线最大的显示为135)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
x= list(range(1,8))
y = [114, 55, 27, 101, 125, 27, 105]
y1= []
for i in y:
    y1.append(opts.BarItem(value= i, name=''))
bar= (
    Bar(init_opts= opts.InitOpts(theme= ThemeType.ESSOS, width= '600px', height= '400px'))
    .add_xaxis(list(x))
    .add_yaxis('name', y1)
    .set_global_opts(yaxis_opts= opts.AxisOpts(max_= 135))
    .set_series_opts(label_opts= opts.LabelOpts(font_size= 20, font_style= 'italic'),
                    markline_opts= opts.MarkLineOpts(
                        data=[opts.MarkLineItem(type_= 'max', name='最大值'),
                             opts.MarkLineItem(type_= 'min', name= '最小值'),
                         opts.MarkLineItem(type_= 'average', name= '平均值')]
                    ))
)
bar.render_notebook()

注意:改代码中应用了新的数据导入逻辑,即:

y = [114, 55, 27, 101, 125, 27, 105]
y1= []
for i in y:
    y1.append(opts.BarItem(value= i, name=''))
bar.add_yaxis('name', y1)

等同于:
#该种方法会被逐步淘汰,在pyecharts更高版本中将会被禁用!

y = [114, 55, 27, 101, 125, 27, 105]
bar.add_yaxis('name', y)

注意:该点会在后一大类中进行讲解。

Pyecharts的数据类型以及新的数据导入逻辑

Pyecharts数据类型转换

由于pyecharts背后封装的js库,会涉及到数据类型的转化,所以它要求输入数据必须是python的基础数据类型,所以pandas 数据对象必须被转换成list(列表)、dict(字典)、str(字符串)等类型。可在官网进阶话题–>数据格式中进行查看,此处也会做一个详细解释。

import pandas as pd
a= pd.read_csv('E:\shoes.csv')
p= a.groupby('info.鞋面材质').size()
p.sort_values(ascending= False, inplace= True)
p
	>>>
	info.鞋面材质
	头层牛皮(除牛反绒)    3470
	PU             671
	二层牛皮(除牛反绒)     605
	人造革             80
	超纤              35
	多种材质拼接          21
	绒面              15
	磨砂皮             14
	牛反绒             12
	塑胶              10
	太空革              9
	二层猪皮             88
	网布               7
	头层猪皮             6
	鳄鱼皮              4
	牛仔布              2
	羊皮毛一体            1
	超纤皮              1
	棉布               1
	dtype: int64
类型转换方式1

直角坐标系图标的数据类型导入(分x轴、y轴):

(1)for int ------导入数据为int型
[int(x) for x in your_numpy_array_or_something_else]
(2)for float------导入数据为float型
[float(x) for x in your_numpy_array_or_something_else]
(3)for str------导入数据为字符型
[str(x) for x in your_numpy_array_or_something_else]

其他数据类型导入(eg:饼图):

(4)==for list------导入数据为一个一个小列表组成的大列表
[list(x) for x in zip[your_numpy_array_or_something_else,your_numpy_array_or_something_else]]

例子详解1:

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
bar= (
    Bar(init_opts= opts.InitOpts(width= '500px', height= '350px'))
    .add_xaxis([str(x) for x in Faker.choose()])
    #等同于.add_xaxis([x for x in Faker.choose()])即str可以省略
    .add_yaxis('name', [int(y) for y in Faker.values()])
    #等同于.add_yaxis('name', [y for y in Faker.values()])即int可以省略
)
bar.render_notebook()

运行结果显示为:
在这里插入图片描述
例子详解2:

from pyecharts import options as opts
from pyecharts.charts import Funnel
import pandas as pd
a= pd.read_csv('E:\shoes.csv')
#根据鞋面材质进行分组并对不同的鞋面材质进行计数
p0= a.groupby('info.鞋面材质').size()
p0.sort_values(ascending= False, inplace= True)
c = (
    Funnel(init_opts= opts.InitOpts(width= '600px', height= '300px'))
    .add("皮鞋材质", [list(z) for z in zip(p0.index.tolist(),p0.tolist())], sort_= 'ascending')
    #等同于[z for z in zip(p0.index.tolist(),p0.tolist())]即list可以省略
    .set_global_opts()
    .set_series_opts(label_opts= opts.LabelOpts(is_show= False))
)
c.render_notebook()

运行结果显示为:
在这里插入图片描述
注意:该种类型转换方式后可跟条件语句,如下:

import pandas as pd
a= pd.read_csv('E:\shoes.csv')
#根据鞋面材质进行分组并对不同的鞋面材质进行计数
p= a.groupby('info.鞋面材质').size()
p.sort_values(ascending= False, inplace= True)
p0= p.index.tolist()
#输出带有'皮'字的鞋面材质
[str(x) for x in p0 if '皮' in x ]
	>>>
	['头层牛皮(除牛反绒)', '二层牛皮(除牛反绒)', '磨砂皮', '二层猪皮', '头层猪皮', '鳄鱼皮', '羊皮毛一体', '超纤皮']
类型转换方式2

Series.tolist()

不论数据是int型、float型、str型,都直接转换为列表形式。

以例子为例:

将每个鞋面材质所对应的数转为列表形式,如下:

p0.tolist()
	>>>
	[3470, 671, 605, 80, 35, 21, 15, 14, 12, 10, 9, 8, 8, 7, 6, 4, 2, 1, 1, 1]

将鞋面材质的种类转为列表形式

p0.index.tolist()
	>>>
	['头层牛皮(除牛反绒)',
 'PU',
 '二层牛皮(除牛反绒)',
 '人造革',
 '超纤',
 '多种材质拼接',
 '绒面',
 '磨砂皮',
 '牛反绒',
 '塑胶',
 '太空革',
 '二层猪皮',
 '布',
 '网布',
 '头层猪皮',
 '鳄鱼皮',
 '牛仔布',
 '羊皮毛一体',
 '超纤皮',
 '棉布']

例子详解1:

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar
a= pd.read_csv('E:\shoes.csv')
p= a.groupby('info.鞋面材质').size()
#对不同鞋面材质的数量从小到大进行排序
p.sort_values(ascending= False, inplace= True)
bar= (
    Bar(init_opts= opts.InitOpts(width= '500px', height= '350px'))
    .add_xaxis(p.index.tolist())
    .add_yaxis('name', p.tolist())
    .reversal_axis()
)
bar.render_notebook()

运行结果显示为:
在这里插入图片描述

类型转换方式3------新的数据导入逻辑

利用所要做的交互式图形的数据项进行纵轴数据填充。 将在1.9.0版本及其之后强制执行的新逻辑:BarItem,本人版本1.9.1。

将y轴由一个单纯的值的列表变成了一个对象的列表,即以一个对象的方式引入了y的值。

单纯的列表:

#单纯的列表:
y= [114,55,27,101,125,27,105]
y
	>>>
	[114, 55, 27, 101, 125, 27, 105]

以对象的形式引入y值(以柱状图为例):

#以对象的形式引入y值
#BarItem:柱状图数据项
y= [114,55,27,101,125,27,105]
y1= []
for i in y:
    y1.append(opts.BarItem(value= i, name= str(i)+'aaa'))
y1
"""
运行出现以下现象代表此时y1是对象
"""
	>>>
	[<pyecharts.options.charts_options.BarItem at 0x1b993482600>,
	 <pyecharts.options.charts_options.BarItem at 0x1b993482cc0>,
 	<pyecharts.options.charts_options.BarItem at 0x1b993482bc0>,
 	<pyecharts.options.charts_options.BarItem at 0x1b993482c40>,
 	<pyecharts.options.charts_options.BarItem at 0x1b993482800>,
	<pyecharts.options.charts_options.BarItem at 0x1b993482680>,
 	<pyecharts.options.charts_options.BarItem at 0x1b9934825c0>]

例子详解:

from pyecharts.charts import Bar
from pyecharts import options as opts
y= [114,55,27,101,125,27,105]
y1= []
for i in y:
    y1.append(opts.BarItem(value= i, name= str(i)+'aaa'))
bar=(
    Bar(init_opts= opts.InitOpts(width= '500px', height= '400px'))
    .add_xaxis([0,1,2,3,4,5,6])
    .add_yaxis('name', y1)
)
bar.render_notebook()

结果显示为:
在这里插入图片描述

单点修饰

BarItem带来的是深入到坐标点层次上的修饰。

作用:为图形的定义带来更强的灵活性,比如:可以去设置每个柱的颜色(以柱状图为例)
虽然说之前也可以设置每个柱的颜色,但其让修饰更加统一一点。

例子详解:设置一个柱状图,显示不同鞋面材质的数量,使各个柱的颜色的透明度随机且使x轴、y轴翻转。

import random
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar
data= pd.read_csv('E:\shoes.csv')
grouped= data.groupby('info.鞋面材质').size()
grouped.sort_values(ascending= True, inplace= True)
y= []
x= []
for i in grouped.tolist():
    y.append(opts.BarItem(value= i, name= '', itemstyle_opts= opts.ItemStyleOpts(opacity= random.random())))
for j in grouped.index.tolist():
    x.append(opts.BarItem(value= j, name= ''))
bar= (
    Bar()
    .add_xaxis(x)
    .add_yaxis('鞋面材质', y)
    .reversal_axis()
)
bar.render_notebook()

运行结果显示为:
在这里插入图片描述

Pyecharts其他数据类型的导入

根据想要作的图,在官网–>图表类型中找到对应图表,将其模板粘贴进代码编辑工具即可。此处以饼图为例。

额外知识点—zip函数

zip函数的原型为:zip([iterable,…])
解释:
参数iterable为可迭代的对象,并且有多个参数,该函数会返回一个以元组为元素的列表,其中第i个元组包含每个参数序列的第i个元素。返回列表长度被阶段为最短的参数序列的长度,只有一个序列参数时,它返回一个1元组的列表,没有参数时,它返回一个空的列表。

==注意:==在python3中,zip返回的是一个支持遍历的对象而不是一个list本身,所以在显示zip时可以用list(z)转化为list或变为循环形式,如下所示:

zip显示方式1:

a= [1,2,3,4,5]
b= [6,7,8,9,10]
c= list(range(0,5))#c=[0,1,2,3,4]
d= 'nihao'
z= zip(a,b,c,d)
for i in z:
    print(i)
    >>>
    (1, 6, 0, 'n')
	(2, 7, 1, 'i')
	(3, 8, 2, 'h')
	(4, 9, 3, 'a')
	(5, 10, 4, 'o')

zip显示方式2:

a= [1,2,3,4,5]
b= [6,7,8]
z1= zip(a,b)
list(z1)
	>>>
	[(1, 6), (2, 7), (3, 8)]

a= [1,2,3]
z2= zip(a)
list(z2)
	>>>
	[(1,), (2,), (3,)]
饼图

Step1:官网找到饼图的类,还有作图的项,并引入。

from pyecharts import options opts
from pyecharts.charts import Pie

Step2:找到例子并复制引入代码行,对其做自己想要的配置修改即可。

import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
a= pd.read_csv('E:\shoes.csv')
#根据鞋面材质进行分组并对不同的鞋面材质进行计数
p0= a.groupby('info.鞋面材质').size()
p0.sort_values(ascending= False, inplace= True)
pie = (
    Pie(init_opts=opts.InitOpts(width="820px", height="300px"))
    .add('皮鞋材质', [list(zz) for zz in zip(p0.index.tolist(), p0.tolist())])
    .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(is_show=False))
)
pie.render_notebook()

运行结果显示为:
在这里插入图片描述

;