基本示例
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")
)
位置调整
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")
)
半径调整——环形图
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")
)
富文本示例
里面的一些参数,比如颜色,字体,都是可以调整的
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")
)
修改一些颜色参数
嵌套饼图
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")
)
定制饼图
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")
)
多饼图
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")
)
玫瑰图示例
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")
)