文章目录
- 1.X,Y轴有格子 & 显示visualmap
- 2.图表上有label显示
- 3.heatmap组件:热力图显示需要有3个维度的值,分别是X轴、Y轴、值
- 4.table:table组件画出表格
- 5.openpyxl读取数据,传递给Pyecharts
- 6.label formatter设定(LabelOpts:标签配置项)
- 7.MarkPointItem:标记点数据项-设最小值线、平均值线、最大值线(MarkPointItem:标记点数据项)
- 8.条形图Bar:基本
- 9.条形图Bar:标题可以是个链接(TitleOpts:标题配置项)
- 10.Pie - Pie_base
- 11.定制主题
- 12.1 Sankey:桑基图(sankey_base)
- 12.2 Sankey:season版(变更颜色、选择方式),无法标记标签值
- ? 13.Line - Temperature_change_line_chart:data列表
- 14.Gauge - Gauge_base(仪表盘)
- 15.Calendar:日历图 【Calendar_label_setting(VisualMapOpts筛选标签设定)】、【日历日期中文设定)】
- 16.VisualMapOpts筛选标签个性化设定
- 17.漏斗图 Funnel
- 18.TooltipOpts:提示框配置项(设定弹出框的提示)
- 19.Liquid:水球图
- 20.Parallel:平行坐标系
- 21.Parallel:平行坐标系---设定多个系列,固定最大最小值,离散的类目数据
- 22.Pie:饼图
- 23.图表 API:指定颜色set_colors
- 24.设定画布的背景颜色
- 25.设定图例
- ? 26.设定label的内容显示
- 27.Pie - Pie_position:标题Legend和图表的位置有变化
- 28.Pie_radius:甜甜圈,或环形饼状图
- 29.Pie:多个玫瑰图
- 30.Season实践:读取数据实现玫瑰图,调整图表和图例的位置
- 31.formatter:字符串模板和回调函数
- 32.Nested_pies:圈中有圈(season版),含label的border设定,legend取并集。
- 33.Radar雷达图 - Basic_radar_chart
- 34.SplitAreaOpts:分隔区域配置项;AreaStyleOpts:区域填充样式配置项
- 35.TextStyleOpts:文字样式配置项
- 36.LabelOpts:标签配置项 for 雷达图
- 37.Radar雷达图 - Radar_angle_radius_axis(用极坐标,内部刻度)
- 38.Polar - Polar_angleaxis
- 39.Polar极坐标实践:有环形区隔、固定最大值最小值、设定堆叠标签
- 40.Sunburst:旭日图
- 41.label在三个地方都可以生效:set_series_opts(),add(),opts.***Item()
- 42.旭日图:season版(以课程架构为例)
- 43.旭日图:自定义颜色、中间有主题
- 44.旭日图:label的positon='outside'
- 45.ThemeRiver:主题河流图
- 48.主题河流图(openpyxl读数据、时间轴、隐藏label、legend竖排)
- 47.触发提示框
- 48.WordCloud:词云图
- 49.词云图:结合JIEBA和collections.Counter(),读取真实文章
1.X,Y轴有格子 & 显示visualmap
https://gallery.pyecharts.org/#/Heatmap/heatmap_on_cartesian
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
xaxis_opts=opts.AxisOpts(
type_="category",
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
yaxis_opts=opts.AxisOpts(
type_="category",
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
visualmap_opts=opts.VisualMapOpts(
min_=0, max_=10, is_calculable=True, orient="horizontal", pos_left="center"
),
)
2.图表上有label显示
https://gallery.pyecharts.org/#/Heatmap/heatmap_on_cartesian
HeatMap(init_opts=opts.InitOpts(width="1440px", height="720px"))
.add_xaxis(xaxis_data=hours)
.add_yaxis(
series_name="Punch Card",
yaxis_data=days,
value=data,
label_opts=opts.LabelOpts(
is_show=True, color="#fff", position="bottom", horizontal_align="50%"
),
)
3.heatmap组件:热力图显示需要有3个维度的值,分别是X轴、Y轴、值
https://gallery.pyecharts.org/#/Heatmap/heatmap_on_cartesian
hours = [
"12a",
......
"11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
data = [
[0, 0, 5],
......
[6, 23, 6],
]
data = [[d[1], d[0], d[2] or "-"] for d in data]
HeatMap(init_opts=opts.InitOpts(width="1440px", height="720px"))
.add_xaxis(xaxis_data=hours)
.add_yaxis(
series_name="Punch Card",
yaxis_data=days,
value=data,
label_opts=opts.LabelOpts(
is_show=True, color="#fff", position="bottom", horizontal_align="50%"
),
)
4.table:table组件画出表格
https://gallery.pyecharts.org/#/Table/table_base
from pyecharts.components import Table
from pyecharts.options import ComponentTitleOpts
table = Table()
headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
["Brisbane", 5905, 1857594, 1146.4],
["Adelaide", 1295, 1158259, 600.5],
["Darwin", 112, 120900, 1714.7],
["Hobart", 1357, 205556, 619.5],
["Sydney", 2058, 4336374, 1214.8],
["Melbourne", 1566, 3806092, 646.9],
["Perth", 5386, 1554769, 869.4],
]
table.add(headers, rows)
table.set_global_opts(
title_opts=ComponentTitleOpts(title="Table-基本示例", subtitle="我是副标题支持换行哦")
)
table.render("table_base.html")
5.openpyxl读取数据,传递给Pyecharts
def pie_rosetype():
# 获取标题
sheet_3 = wb['sheet3']
subject_item = []
for i in range(1,sheet_3.max_row+1):
v1 = sheet_3.cell(i,1).value
subject_item.append(v1)
# 获取值
sheet_3 = wb['sheet3']
subject_value = []
for i in range(1,sheet_3.max_row+1):
v2 = sheet_3.cell(i,2).value
subject_value.append(v2)
c = (
Pie()
.add("", [list(z) for z in zip(subject_item, subject_value)])
.set_global_opts(title_opts=opts.TitleOpts(title="Function分布"))
.set_series_opts(
label_opts=opts.LabelOpts(font_size=10,formatter="{b}: {c}")
)
)
return c
6.label formatter设定(LabelOpts:标签配置项)
class LabelOpts(
# 是否显示标签。
is_show: bool = True,
# 标签的位置。可选
# 'top','left','right','bottom','inside','insideLeft','insideRight'
# 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
# 'insideTopRight','insideBottomRight'
position: Union[str, Sequence] = "top",
# 文字的颜色。
# 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
color: Optional[str] = None,
# 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
distance: Union[Numeric, Sequence, None] = None,
# 文字的字体大小
font_size: Numeric = 12,
# 文字字体的风格,可选:
# 'normal','italic','oblique'
font_style: Optional[str] = None,
# 文字字体的粗细,可选:
# 'normal','bold','bolder','lighter'
font_weight: Optional[str] = None,
# 文字的字体系列
# 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
font_family: Optional[str] = None,
# 标签旋转。从 -90 度到 90 度。正值是逆时针。
rotate: Optional[Numeric] = None,
# 刻度标签与轴线之间的距离。
margin: Optional[Numeric] = 8,
# 坐标轴刻度标签的显示间隔,在类目轴中有效。
# 默认会采用标签不重叠的策略间隔显示标签。
# 可以设置成 0 强制显示所有标签。
# 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
# 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
# (index:number, value: string) => boolean
# 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。
interval: Union[Numeric, str, None]= None,
# 文字水平对齐方式,默认自动。可选:
# 'left','center','right'
horizontal_align: Optional[str] = None,
# 文字垂直对齐方式,默认自动。可选:
# 'top','middle','bottom'
vertical_align: Optional[str] = None,
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
# 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
# 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:
# 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
# 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
# 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
# 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
# 示例:formatter: '{b}: {@score}'
#
# 回调函数,回调函数格式:
# (params: Object|Array) => string
# 参数 params 是 formatter 需要的单个数据集。格式如下:
# {
# componentType: 'series',
# // 系列类型
# seriesType: string,
# // 系列在传入的 option.series 中的 index
# seriesIndex: number,
# // 系列名称
# seriesName: string,
# // 数据名,类目名
# name: string,
# // 数据在传入的 data 数组中的 index
# dataIndex: number,
# // 传入的原始数据项
# data: Object,
# // 传入的数据值
# value: number|Array,
# // 数据图形的颜色
# color: string,
# }
formatter: Optional[str] = None,
# 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
# 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
rich: Optional[dict] = None,
)
.set_series_opts(
label_opts=opts.LabelOpts(font_size=10,formatter="{b}: {c}-{d}%")
)
7.MarkPointItem:标记点数据项-设最小值线、平均值线、最大值线(MarkPointItem:标记点数据项)
- opts.MarkLineOpts(data=[])
https://pyecharts.org/#/zh-cn/series_options?id=markpointitem%ef%bc%9a%e6%a0%87%e8%ae%b0%e7%82%b9%e6%95%b0%e6%8d%ae%e9%a1%b9
class MarkPointItem(
# 标注名称。
name: Optional[str] = None,
# 特殊的标注类型,用于标注最大值最小值等。可选:
# 'min' 最大值。
# 'max' 最大值。
# 'average' 平均值。
type_: Optional[str] = None,
# 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值,可以是
# 0(xAxis, radiusAxis),
# 1(yAxis, angleAxis),默认使用第一个数值轴所在的维度。
value_index: Optional[Numeric] = None,
# 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值。这可以是维度的直接名称,
# 例如折线图时可以是 x、angle 等、candlestick 图时可以是 open、close 等维度名称。
value_dim: Optional[str] = None,
# 标注的坐标。坐标格式视系列的坐标系而定,可以是直角坐标系上的 x, y,
# 也可以是极坐标系上的 radius, angle。例如 [121, 2323]、['aa', 998]。
coord: Optional[Sequence] = None,
# 相对容器的屏幕 x 坐标,单位像素。
x: Optional[Numeric] = None,
# 相对容器的屏幕 y 坐标,单位像素。
y: Optional[Numeric] = None,
# 标注值,可以不设。
value: Optional[Numeric] = None,
# 标记的图形。
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
# 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
symbol: Optional[str] = None,
# 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
# 例如 [20, 10] 表示标记宽为 20,高为 10。
symbol_size: Union[Numeric, Sequence] = None,
# 标记点样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
)
https://gallery.pyecharts.org/#/Bar/bar_markline_type
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkLine(指定类型)"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="min", name="最小值"),
opts.MarkLineItem(type_="max", name="最大值"),
opts.MarkLineItem(type_="average", name="平均值"),
]
),
)
)
8.条形图Bar:基本
https://gallery.pyecharts.org/#/Bar/bar_base
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
.render("bar_base.html")
)
9.条形图Bar:标题可以是个链接(TitleOpts:标题配置项)
class TitleOpts(
# 主标题文本,支持使用 \n 换行。
title: Optional[str] = None,
# 主标题跳转 URL 链接
title_link: Optional[str] = None,
# 主标题跳转链接方式
# 默认值是: blank
# 可选参数: 'self', 'blank'
# 'self' 当前窗口打开; 'blank' 新窗口打开
title_target: Optional[str] = None,
# 副标题文本,支持使用 \n 换行。
subtitle: Optional[str] = None,
# 副标题跳转 URL 链接
subtitle_link: Optional[str] = None,
# 副标题跳转链接方式
# 默认值是: blank
# 可选参数: 'self', 'blank'
# 'self' 当前窗口打开; 'blank' 新窗口打开
subtitle_target: Optional[str] = None,
# title 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# title 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Optional[str] = None,
# title 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# title 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Optional[str] = None,
# 标题内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。
# // 设置内边距为 5
# padding: 5
# // 设置上下的内边距为 5,左右的内边距为 10
# padding: [5, 10]
# // 分别设置四个方向的内边距
# padding: [
# 5, // 上
# 10, // 右
# 5, // 下
# 10, // 左
# ]
padding: Union[Sequence, Numeric] = 5,
# 主副标题之间的间距。
item_gap: Numeric = 10,
# 主标题字体样式配置项,参考 `series_options.TextStyleOpts`
title_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
# 副标题字体样式配置项,参考 `series_options.TextStyleOpts`
subtitle_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)
def BAR():
c = (
Bar({"theme": ThemeType.MACARONS})
.add_xaxis(['自学','面授'])
.add_yaxis("上课方式",[6,9])
.set_global_opts(
title_opts=opts.TitleOpts(title="授课方式", title_link='https://www.baidu.com/',subtitle="自学与面授对比",)
)
)
return c
10.Pie - Pie_base
https://gallery.pyecharts.org/#/Pie/pie_base
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_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_base.html")
)
11.定制主题
https://pyecharts.org/#/zh-cn/themes
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
def theme_default() -> Bar:
c = (
Bar()
# 等价于 Bar(init_opts=opts.InitOpts(theme=ThemeType.WHITE))
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.add_yaxis("商家C", Faker.values())
.add_yaxis("商家D", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts("Theme-default"))
)
return c
相关主题有LIGHT、DARK、CHALK、ESSOS、INFOGRAPHIC、MACARONS、PURPLE_PASSION、ROMA、ROMANTIC、SHINE、VINTAGE、WALDEN、WESTEROS、WONDERLAND。
12.1 Sankey:桑基图(sankey_base)
https://pyecharts.org/#/zh-cn/basic_charts?id=sankey%ef%bc%9a%e6%a1%91%e5%9f%ba%e5%9b%be
https://gallery.pyecharts.org/#/Sankey/sankey_base
- class pyecharts.charts.Sankey
class Sankey(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- class pyechart.options.SankeyLevelsOpts
class SankeyLevelsOpts(
# 指定设置的是桑基图哪一层,取值从 0 开始。
depth: Numeric = None,
# 桑基图指定层节点的样式。参考 `global_opts.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
# 桑基图指定层出边的样式。
# 其中 lineStyle.color 支持设置为'source'或者'target'特殊值,此时出边会自动取源节点或目标节点的颜色作为自己的颜色。
# 参考 `global_opts.LineStyleOpts`
linestyle_opts: Union[LineStyleOpts, dict, None] = None,
)
- func pyecharts.charts.Sankey.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
nodes: Sequence,
links: Sequence,
# 是否选中图例
is_selected: bool = True,
# Sankey 组件离容器左侧的距离。
pos_left: types.Union[str, types.Numeric] = "5%",
# Sankey 组件离容器上侧的距离。
pos_top: types.Union[str, types.Numeric] = "5%",
# Sankey 组件离容器右侧的距离。
pos_right: types.Union[str, types.Numeric] = "20%",
# Sankey 组件离容器下侧的距离。
pos_bottom: types.Union[str, types.Numeric] = "5%",
# 桑基图中每个矩形节点的宽度。
node_width: Numeric = 20,
# 桑基图中每一列任意两个矩形节点之间的间隔。
node_gap: Numeric = 8,
# 桑基图中节点的对齐方式,默认是双端对齐,可以设置为左对齐或右对齐,对应的值分别是:
# justify: 节点双端对齐。
# left: 节点左对齐。
# right: 节点右对齐。
node_align: str = "justify",
# 布局的迭代次数,用来不断优化图中节点的位置,以减少节点和边之间的相互遮盖。
# 默认布局迭代次数:32。
# 注: 布局迭代次数不要低于默认值。
layout_iterations: types.Numeric = 32,
# 桑基图中节点的布局方向,可以是水平的从左往右,也可以是垂直的从上往下。
# 对应的参数值分别是 horizontal, vertical。
orient: str = "horizontal",
# 控制节点拖拽的交互,默认开启。开启后,用户可以将图中任意节点拖拽到任意位置。若想关闭此交互,只需将值设为 false 就行了。
is_draggable: bool = True,
# 鼠标 hover 到节点或边上,相邻接的节点和边高亮的交互,默认关闭,可手动开启。
# false:hover 到节点或边时,只有被 hover 的节点或边高亮。
# true:同 'allEdges'。
# 'allEdges':hover 到节点时,与节点邻接的所有边以及边对应的节点全部高亮。hover 到边时,边和相邻节点高亮。
# 'outEdges':hover 的节点、节点的出边、出边邻接的另一节点 会被高亮。hover 到边时,边和相邻节点高亮。
# 'inEdges':hover 的节点、节点的入边、入边邻接的另一节点 会被高亮。hover 到边时,边和相邻节点高亮。
focus_node_adjacency: types.Union[bool, str] = False,
# 桑基图每一层的设置。可以逐层设置
levels: types.SankeyLevel = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 线条样式配置项,参考 `series_options.LineStyleOpts`
linestyle_opt: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
)
- Sankey - Sankey_base
from pyecharts import options as opts
from pyecharts.charts import Sankey
nodes = [
{"name": "category1"},
{"name": "category2"},
{"name": "category3"},
{"name": "category4"},
{"name": "category5"},
{"name": "category6"},
]
links = [
{"source": "category1", "target": "category2", "value": 10},
{"source": "category2", "target": "category3", "value": 15},
{"source": "category3", "target": "category4", "value": 20},
{"source": "category5", "target": "category6", "value": 25},
]
c = (
Sankey()
.add(
"sankey",
nodes,
links,
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
label_opts=opts.LabelOpts(position="right"),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Sankey-基本示例"))
.render("sankey_base.html")
)
12.2 Sankey:season版(变更颜色、选择方式),无法标记标签值
https://gallery.pyecharts.org/#/Sankey/sankey_diagram
def Sankey2():
nodes = [
{"name": "R1"},
{"name": "R2"},
{"name": "R3"},
{"name": "潜力低"},
{"name": "潜力中"},
{"name": "潜力高"},
{"name": "能力低"},
{"name": "能力中"},
{"name": "能力高"},
]
links = [
{"source": "潜力低", "target": "R2", "value": 7},
{"source": "潜力低", "target": "R3", "value": 1},
{"source": "潜力中", "target": "R2", "value": 1},
{"source": "潜力中", "target": "R3", "value": 1},
{"source": "R2", "target": "能力低", "value": 1},
{"source": "R2", "target": "能力中", "value": 3},
{"source": "R2", "target": "能力高", "value": 4},
{"source": "R3", "target": "能力中", "value": 2},
]
c = (
Sankey()
.add(
# 系列
"sankey",
#节点
nodes,
#链接
links,
# 设定通用图层的图层和线条
linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
label_opts=opts.LabelOpts(position="right"),
focus_node_adjacency=True,
# 设定每一层的图层和线条
levels=[
opts.SankeyLevelsOpts(
depth=0,
itemstyle_opts=opts.ItemStyleOpts(color="#fbb4ae"),
linestyle_opts=opts.LineStyleOpts(color="source", opacity=0.2,curve=0.5),
),
opts.SankeyLevelsOpts(
depth=1,
itemstyle_opts=opts.ItemStyleOpts(color="#b3cde3"),
linestyle_opts=opts.LineStyleOpts(color="source", opacity=0.2,curve=0.5),
),
opts.SankeyLevelsOpts(
depth=2,
itemstyle_opts=opts.ItemStyleOpts(color="#ccebc5"),
linestyle_opts=opts.LineStyleOpts(color="source", opacity=0.2,curve=0.5),
)]
)
.set_global_opts(title_opts=opts.TitleOpts(title="Sankey-潜能示范"))
)
return c
? 13.Line - Temperature_change_line_chart:data列表
https://gallery.pyecharts.org/#/Line/temperature_change_line_chart
import pyecharts.options as opts
from pyecharts.charts import Line
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://www.echartsjs.com/examples/editor.html?c=line-marker
目前无法实现的功能:
1、最低气温的最高值暂时无法和 Echarts 的示例完全复刻
"""
week_name_list = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
high_temperature = [11, 11, 15, 13, 12, 13, 10]
low_temperature = [1, -2, 2, 5, 3, 2, 0]
(
Line(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add_xaxis(xaxis_data=week_name_list)
.add_yaxis(
series_name="最高气温",
y_axis=high_temperature,
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
]
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均值")]
),
)
.add_yaxis(
series_name="最低气温",
y_axis=low_temperature,
markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(value=-2, name="周最低", x=1, y=-1.5)]
),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="average", name="平均值"),
opts.MarkLineItem(symbol="none", x="90%", y="max"),
opts.MarkLineItem(symbol="circle", type_="max", name="最高点"),
]
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="未来一周气温变化", subtitle="纯属虚构"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
toolbox_opts=opts.ToolboxOpts(is_show=True),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
)
.render("temperature_change_line_chart.html")
)
14.Gauge - Gauge_base(仪表盘)
https://gallery.pyecharts.org/#/Gauge/gauge_base
from pyecharts import options as opts
from pyecharts.charts import Gauge
c = (
Gauge()
.add("", [("完成率", 66.6)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例"))
.render("gauge_base.html")
)
15.Calendar:日历图 【Calendar_label_setting(VisualMapOpts筛选标签设定)】、【日历日期中文设定)】
https://pyecharts.org/#/zh-cn/basic_charts?id=calendar%ef%bc%9a%e6%97%a5%e5%8e%86%e5%9b%be
- class pyecharts.charts.Calendar
class Calendar(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyeachrts.charts.Calendar.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据,格式为 [(date1, value1), (date2, value2), ...]
yaxis_data: Sequence,
# 是否选中图例
is_selected: bool = True,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 日历坐标系组件配置项,参考 `CalendarOpts`
calendar_opts: Union[opts.CalendarOpts, dict, None] = None,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
- CalendarOpts:日历坐标系组件配置项 class pyecharts.options.CalendarOpts
class CalendarOpts(
# calendar组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# calendar组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# calendar组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_right: Optional[str] = None,
# calendar组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_bottom: Optional[str] = None,
# 日历坐标的布局朝向。可选:
# 'horizontal', 'vertical'
orient: Optional[str] = None,
# 必填,日历坐标的范围 支持多种格式,使用示例:
# 某一年 range: 2017
# 某个月 range: '2017-02'
# 某个区间 range: ['2017-01-02', '2017-02-23']
# 注意 此写法会识别为['2017-01-01', '2017-02-01']
# range: ['2017-01', '2017-02']
range_: Union[str, Sequence, int] = None,
# 星期轴的样式,参考 `series_options.LabelOpts`
daylabel_opts: Union[LabelOpts, dict, None] = None,
# 月份轴的样式,参考 `series_options.LabelOpts`
monthlabel_opts: Union[LabelOpts, dict, None] = None,
# 年份的样式,参考 `series_options.LabelOpts`
yearlabel_opts: Union[LabelOpts, dict, None] = None,
)
- Calendar_label_setting(VisualMapOpts筛选标签设定)、日历日期中文设定
https://gallery.pyecharts.org/#/Calendar/calendar_label_setting
import datetime
import random
from pyecharts import options as opts
from pyecharts.charts import Calendar
begin = datetime.date(2017, 1, 1)
end = datetime.date(2017, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
]
c = (
Calendar()
.add(
"",
data,
calendar_opts=opts.CalendarOpts(
range_="2017",
daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),
monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2017年微信步数情况(中文 Label)"),
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),
)
.render("calendar_label_setting.html")
)
16.VisualMapOpts筛选标签个性化设定
- VisualMapOpts:视觉映射配置项 class pyecharts.options.VisualMapOpts
https://pyecharts.org/#/zh-cn/global_options?id=visualmapopts%ef%bc%9a%e8%a7%86%e8%a7%89%e6%98%a0%e5%b0%84%e9%85%8d%e7%bd%ae%e9%a1%b9
class VisualMapOpts(
# 是否显示视觉映射配置
is_show: bool = True,
# 映射过渡类型,可选,"color", "size"
type_: str = "color",
# 指定 visualMapPiecewise 组件的最小值。
min_: Union[int, float] = 0,
# 指定 visualMapPiecewise 组件的最大值。
max_: Union[int, float] = 100,
# 两端的文本,如['High', 'Low']。
range_text: Union[list, tuple] = None,
# visualMap 组件过渡颜色
range_color: Union[Sequence[str]] = None,
# visualMap 组件过渡 symbol 大小
range_size: Union[Sequence[int]] = None,
# visualMap 图元以及其附属物(如文字标签)的透明度。
range_opacity: Optional[Numeric] = None,
# 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
orient: str = "vertical",
# visualMap 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# visualMap 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Optional[str] = None,
# visualMap 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# visualMap 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Optional[str] = None,
# 对于连续型数据,自动平均切分成几段。默认为5段。连续数据的范围需要 max 和 min 来指定
split_number: int = 5,
# 指定取哪个系列的数据,默认取所有系列。
series_index: Union[Numeric, Sequence, None] = None,
# 组件映射维度
dimension: Optional[Numeric] = None,
# 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
is_calculable: bool = True,
# 是否为分段型
is_piecewise: bool = False,
# 是否反转 visualMap 组件
is_inverse: bool = False,
# 数据展示的小数精度。
# 连续型数据平均分段,精度根据数据自动适应。
# 连续型数据自定义分段或离散数据根据类别分段模式,精度默认为0(没有小数)。
precision: Optional[int] = None,
# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
# pieces: [
# {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。
# {"min": 900, "max": 1500},
# {"min": 310, "max": 1000},
# {"min": 200, "max": 300},
# {"min": 10, "max": 200, "label": '10 到 200(自定义label)'},
# {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况
# {"max": 5} // 不指定 min,表示 min 为无限大(-Infinity)。
# ]
pieces: Optional[Sequence] = None,
# 定义 在选中范围外 的视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围)
# 可选的视觉元素有:
# symbol: 图元的图形类别。
# symbolSize: 图元的大小。
# color: 图元的颜色。
# colorAlpha: 图元的颜色的透明度。
# opacity: 图元以及其附属物(如文字标签)的透明度。
# colorLightness: 颜色的明暗度,参见 HSL。
# colorSaturation: 颜色的饱和度,参见 HSL。
# colorHue: 颜色的色调,参见 HSL。
out_of_range: Optional[Sequence] = None,
# 图形的宽度,即长条的宽度。
item_width: int = 0,
# 图形的高度,即长条的高度。
item_height: int = 0,
# visualMap 组件的背景色。
background_color: Optional[str] = None,
# visualMap 组件的边框颜色。
border_color: Optional[str] = None,
# visualMap 边框线宽,单位px。
border_width: int = 0,
# 文字样式配置项,参考 `series_options.TextStyleOpts`
textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)
- 我的例子是用来设定个性化的筛选栏
def CALENDAR():
# 获取标题值
sheet_8 = wb['Sheet8']
subject_value = []
for j in range(2,sheet_8.max_row+1):
v2 = sheet_8.cell(j,2).value
subject_value.append(v2)
begin = datetime.date(2021, 1, 1)
end = datetime.date(2021, 8, 23)
data = [
[str(begin + datetime.timedelta(days=i)), subject_value[i]]
for i in range((end - begin).days + 1)
]
c = (
Calendar()
.add("", data, calendar_opts=opts.CalendarOpts(
range_=['2021-01-01', '2021-08-23'],
daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),
monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"))
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2021年上课人数情况"),
visualmap_opts=opts.VisualMapOpts(
#max_=200,
#min_=1,
orient="horizontal",
is_piecewise=True,
pieces= [
{"min": 101},
{"min": 76, "max": 100},
{"min": 51, "max": 76},
{"min": 26, "max": 50},
{"min": 11, "max": 25},
{"min": 6, "max": 10},
{"min": 1, "max": 5},
],
pos_top="230px",
pos_left="100px",
),
)
)
return c
17.漏斗图 Funnel
https://pyecharts.org/#/zh-cn/basic_charts?id=funnel%ef%bc%9a%e6%bc%8f%e6%96%97%e5%9b%be
- class pyecharts.charts.Funnel
class Funnel(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Funnel.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项,格式为 [(key1, value1), (key2, value2)]
data_pair: Sequence,
# 是否选中图例
is_selected: bool = True,
# 系列 label 颜色
color: Optional[str] = None,
# 数据排序, 可以取 'ascending','descending','none'(表示按 data 顺序)
sort_: str = "descending",
# 数据图形间距
gap: Numeric = 0,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
- Funnel - Funnel_chart
https://gallery.pyecharts.org/#/Funnel/funnel_chart
import pyecharts.options as opts
from pyecharts.charts import Funnel
x_data = ["展现", "点击", "访问", "咨询", "订单"]
y_data = [100, 80, 60, 40, 20]
data = [[x_data[i], y_data[i]] for i in range(len(x_data))]
(
Funnel(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add(
series_name="",
data_pair=data,
gap=2,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),
label_opts=opts.LabelOpts(is_show=True, position="inside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))
.render("funnel_chart.html")
)
18.TooltipOpts:提示框配置项(设定弹出框的提示)
- class pyecharts.options.TooltipOpts‘
https://pyecharts.org/#/zh-cn/global_options?id=tooltipopts%ef%bc%9a%e6%8f%90%e7%a4%ba%e6%a1%86%e9%85%8d%e7%bd%ae%e9%a1%b9
class TooltipOpts(
# 是否显示提示框组件,包括提示框浮层和 axisPointer。
is_show: bool = True,
# 触发类型。可选:
# 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
# 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
# 'none': 什么都不触发
trigger: str = "item",
# 提示框触发的条件,可选:
# 'mousemove': 鼠标移动时触发。
# 'click': 鼠标点击时触发。
# 'mousemove|click': 同时鼠标移动和点击时触发。
# 'none': 不在 'mousemove' 或 'click' 时触发,
trigger_on: str = "mousemove|click",
# 指示器类型。可选
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
axis_pointer_type: str = "line",
# 是否显示提示框浮层,默认显示。
# 只需 tooltip 触发事件或显示 axisPointer 而不需要显示内容时可配置该项为 false。
is_show_content: bool = True,
# 是否永远显示提示框内容,
# 默认情况下在移出可触发提示框区域后一定时间后隐藏,设置为 true 可以保证一直显示提示框内容。
is_always_show_content: bool = False,
# 浮层显示的延迟,单位为 ms,默认没有延迟,也不建议设置。
show_delay: Numeric = 0,
# 浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效。
hide_delay: Numeric = 100,
# 提示框浮层的位置,默认不设置时位置会跟随鼠标的位置。
# 1、通过数组配置:
# 绝对位置,相对于容器左侧 10px, 上侧 10 px ===> position: [10, 10]
# 相对位置,放置在容器正中间 ===> position: ['50%', '50%']
# 2、通过回调函数配置
# 3、固定参数配置:'inside','top','left','right','bottom'
position: Union[str, Sequence, JSFunc] = None,
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 字符串模板 模板变量有:
# {a}:系列名。
# {b}:数据名。
# {c}:数据值。
# {@xxx}:数据中名为 'xxx' 的维度的值,如 {@product} 表示名为 'product'` 的维度的值。
# {@[n]}:数据中维度 n 的值,如{@[3]}` 表示维度 3 的值,从 0 开始计数。
# 示例:formatter: '{b}: {@score}'
#
# 回调函数,回调函数格式:
# (params: Object|Array) => string
# 参数 params 是 formatter 需要的单个数据集。格式如下:
# {
# componentType: 'series',
# // 系列类型
# seriesType: string,
# // 系列在传入的 option.series 中的 index
# seriesIndex: number,
# // 系列名称
# seriesName: string,
# // 数据名,类目名
# name: string,
# // 数据在传入的 data 数组中的 index
# dataIndex: number,
# // 传入的原始数据项
# data: Object,
# // 传入的数据值
# value: number|Array,
# // 数据图形的颜色
# color: string,
# }
formatter: Optional[str] = None,
# 提示框浮层的背景颜色。
background_color: Optional[str] = None,
# 提示框浮层的边框颜色。
border_color: Optional[str] = None,
# 提示框浮层的边框宽。
border_width: Numeric = 0,
# 文字样式配置项,参考 `series_options.TextStyleOpts`
textstyle_opts: TextStyleOpts = TextStyleOpts(font_
- Funnel - Funnel_chart
import pyecharts.options as opts
from pyecharts.charts import Funnel
x_data = ["展现", "点击", "访问", "咨询", "订单"]
y_data = [100, 80, 60, 40, 20]
data = [[x_data[i], y_data[i]] for i in range(len(x_data))]
(
Funnel(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add(
series_name="",
data_pair=data,
gap=2,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),
label_opts=opts.LabelOpts(is_show=True, position="inside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))
.render("funnel_chart.html")
)
19.Liquid:水球图
- class pyecharts.charts.Liquid
https://pyecharts.org/#/zh-cn/basic_charts?id=graph%ef%bc%9a%e5%85%b3%e7%b3%bb%e5%9b%be
class Liquid(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Liquid.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据,格式为 [value1, value2, ....]
data: Sequence,
# 水球外形,有' circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' 可选。
# 默认 'circle'。也可以为自定义的 SVG 路径。
shape: str = "circle",
# 波浪颜色。
color: Optional[Sequence[str]] = None,
# 背景颜色
background_color: types.Union[str, dict, None] = None,
# 是否显示波浪动画。
is_animation: bool = True,
# 是否显示边框。
is_outline_show: bool = True,
# 外沿边框宽度
outline_border_distance: types.Numeric = 8,
# 外沿样式
outline_itemstyle_opts: types.ItemStyle = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(font_size=50, position="inside"),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
)
- Liquid - Liquid_base
https://gallery.pyecharts.org/#/Liquid/liquid_base
from pyecharts import options as opts
from pyecharts.charts import Liquid
c = (
Liquid()
.add("lq", [0.6, 0.7])
.set_global_opts(title_opts=opts.TitleOpts(title="Liquid-基本示例"))
.render("liquid_base.html")
)
20.Parallel:平行坐标系
- class pyecharts.charts.Parallel
class Parallel(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Parallel.add_schema
def add_schema(
schema: Sequence[Union[opts.ParallelAxisOpts, dict]],
parallel_opts: Union[opts.ParallelOpts, dict, None] = None,
)
- func pyecharts.charts.Parallel.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据
data: types.Sequence[types.Union[opts.ParallelItem, dict]],
# 是否选中图例。
is_selected: bool = True,
# 是否平滑曲线
is_smooth: bool = False,
# 线条样式,参考 `series_options.LineStyleOpts`
linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
- ParallelOpts:平行坐标系配置项 class pyecharts.options.TooltipOpts
class ParallelOpts(
# parallel 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: str = "5%",
# parallel 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: str = "13%",
# parallel 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: str = "10%",
# parallel 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: str = "20%",
# 布局方式,可选值为:
# 'horizontal':水平排布各个坐标轴。
# 'vertical':竖直排布各个坐标轴。
layout: Optional[str] = None,
)
- ParallelAxisOpts:平行坐标系轴配置项 class pyecharts.options.ParallelAxisOpts
class ParallelAxisOpts(
# 坐标轴的维度序号。
dim: Numeric,
# 坐标轴名称。
name: str,
# 坐标轴数据项
data: Sequence = None,
# 坐标轴类型。可选:
# 'value': 数值轴,适用于连续数据。
# 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
# 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同
# 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
# 'log' 对数轴。适用于对数数据。
type_: Optional[str] = None,
# 坐标轴刻度最小值。
# 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
# 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
min_: Union[str, Numeric, None] = None,
# 坐标轴刻度最大值。
# 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
# 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
max_: Union[str, Numeric, None] = None,
# 只在数值轴中(type: 'value')有效。
# 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
# 在设置 min 和 max 之后该配置项无效。
is_scale: bool = False,
)
- ParallelItem:平行坐标系数据项
class ParallelItem(
# 数据项名称。
name: Optional[str] = None,
# 数据项值。
value: Optional[Sequence] = None,
# 线条样式。
linestyle_opts: Union[LineStyleOpts, dict, None] = None,
# 线的颜色。
color: Union[str, dict] = "#000",
# 线宽。
width: Numeric = 2,
# 线的类型。可选'solid','dashed','dotted'
type_: str = "solid",
# 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
opacity: Numeric = 0.45,
)
- Parallel - Parallel_category
from pyecharts import options as opts
from pyecharts.charts import Parallel
data = [
[1, 91, 45, 125, 0.82, 34, 23, "良"],
[2, 65, 27, 78, 0.86, 45, 29, "良"],
[3, 83, 60, 84, 1.09, 73, 27, "良"],
[4, 109, 81, 121, 1.28, 68, 51, "轻度污染"],
[5, 106, 77, 114, 1.07, 55, 51, "轻度污染"],
[6, 109, 81, 121, 1.28, 68, 51, "轻度污染"],
[7, 106, 77, 114, 1.07, 55, 51, "轻度污染"],
[8, 89, 65, 78, 0.86, 51, 26, "良"],
[9, 53, 33, 47, 0.64, 50, 17, "良"],
[10, 80, 55, 80, 1.01, 75, 24, "良"],
[11, 117, 81, 124, 1.03, 45, 24, "轻度污染"],
[12, 99, 71, 142, 1.1, 62, 42, "良"],
[13, 95, 69, 130, 1.28, 74, 50, "良"],
[14, 116, 87, 131, 1.47, 84, 40, "轻度污染"],
]
c = (
Parallel()
.add_schema(
[
opts.ParallelAxisOpts(dim=0, name="data"),
opts.ParallelAxisOpts(dim=1, name="AQI"),
opts.ParallelAxisOpts(dim=2, name="PM2.5"),
opts.ParallelAxisOpts(dim=3, name="PM10"),
opts.ParallelAxisOpts(dim=4, name="CO"),
opts.ParallelAxisOpts(dim=5, name="NO2"),
opts.ParallelAxisOpts(dim=6, name="CO2"),
opts.ParallelAxisOpts(
dim=7,
name="等级",
type_="category",
data=["优", "良", "轻度污染", "中度污染", "重度污染", "严重污染"],
),
]
)
.add("parallel", data)
.set_global_opts(title_opts=opts.TitleOpts(title="Parallel-Category"))
.render("parallel_category.html")
)
21.Parallel:平行坐标系—设定多个系列,固定最大最小值,离散的类目数据
def PARALLEL2():
data1 = [[4, 4.6, 81, 0.4, 68, 510, "初级"],]
data21 = [[3, 4.1, 78, 0.5, 88, 650, "中级"],]
data22 = [[4, 3, 88, 0.34, 99,560, "中级"],]
data23 = [[5, 3, 60, 0.66, 73, 273, "中级"],]
data3 = [[5, 3.5, 77, 0.55, 88, 900, "高级"],]
c = (
Parallel()
.add_schema(
[
opts.ParallelAxisOpts(dim=0, name="能力1",min_="0",max_="5"),
opts.ParallelAxisOpts(dim=1, name="能力2",min_="0",max_="5"),
opts.ParallelAxisOpts(dim=2, name="能力3",min_="0",max_="100"),
opts.ParallelAxisOpts(dim=3, name="能力4",min_="0",max_="1"),
opts.ParallelAxisOpts(dim=4, name="能力5",min_="0",max_="100"),
opts.ParallelAxisOpts(dim=5, name="能力6",min_="0",max_="990"),
opts.ParallelAxisOpts(dim=7, name="等级",type_="category",data=["初级", "中级", "高级"],),
]
)
.add("同仁1", data1)
.add("同仁2", data21)
.add("同仁3", data22)
.add("同仁4", data23)
.add("同仁5", data3)
.set_global_opts(title_opts=opts.TitleOpts(title="Parallel-Category"))
)
return c
22.Pie:饼图
https://gallery.pyecharts.org/#/Pie/pie_base
- class pyecharts.charts.Pie
class Pie(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Pie.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项,格式为 [(key1, value1), (key2, value2)]
data_pair: types.Sequence[types.Union[types.Sequence, opts.PieItem, dict]],
# 系列 label 颜色
color: Optional[str] = None,
# 饼图的半径,数组的第一项是内半径,第二项是外半径
# 默认设置成百分比,相对于容器高宽中较小的一项的一半
radius: Optional[Sequence] = None,
# 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
# 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
center: Optional[Sequence] = None,
# 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
# radius:扇区圆心角展现数据的百分比,半径展现数据的大小
# area:所有扇区圆心角相同,仅通过半径展现数据大小
rosetype: Optional[str] = None,
# 饼图的扇区是否是顺时针排布。
is_clockwise: bool = True,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
# 可以定义 data 的哪个维度被编码成什么。
encode: types.Union[types.JSFunc, dict, None] = None,
)
- PieItem:饼图数据项
class PieItem(
# 数据项名称。
name: Optional[str] = None,
# 数据值。
value: Optional[Numeric] = None,
# 该数据项是否被选中。
is_selected: bool = False,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[LabelOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[TooltipOpts, dict, None] = None,
)
- PieLabelLineOpts: 饼图标签的视觉引导线样式
class PieLabelLineOpts(
# 是否显示视觉引导线。
is_show: bool = True,
# 视觉引导线第一段的长度。
length: Numeric = None,
# 视觉引导项第二段的长度。
length_2: Numeric = None,
# 是否平滑视觉引导线,默认不平滑,可以设置成 true 平滑显示。
# 也可以设置为 0 到 1 的值,表示平滑程度。
smooth: Union[bool, Numeric] = False,
# 线条样式,参考 `LineStyleOpts`
linestyle_opts: Union[LineStyleOpts, dict, None] = None,
)
- Pie - Pie_base
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_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_base.html")
)
23.图表 API:指定颜色set_colors
https://pyecharts.org/#/zh-cn/chart_api
- func pyecharts.Base.set_colors
# 设置全局 Label 颜色
def set_colors(colors: colors: Sequence[str])
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")
)
24.设定画布的背景颜色
https://gallery.pyecharts.org/#/Pie/customized_pie
Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))
25.设定图例
https://gallery.pyecharts.org/#/Pie/pie_scroll_legend
- 主要是这一段
.set_global_opts(
legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
)
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.choose() + Faker.choose(),
Faker.values() + Faker.values() + Faker.values(),
)
],
center=["40%", "50%"],
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Pie-Legend 滚动"),
legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_scroll_legend.html")
)
? 26.设定label的内容显示
https://gallery.pyecharts.org/#/Pie/pie_rich_label
- 看label_opts=opts.LabelOpts()这一段
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())],
radius=["40%", "55%"],
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(title_opts=opts.TitleOpts(title="Pie-富文本示例"))
.render("pie_rich_label.html")
)
27.Pie - Pie_position:标题Legend和图表的位置有变化
- 控制图表的位置
# 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
# 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
center: Optional[Sequence] = None,
- 控制标题的位置
class LegendOpts(
# 图例的类型。可选值:
# 'plain':普通图例。缺省就是普通图例。
# 'scroll':可滚动翻页的图例。当图例数量较多时可以使用。
type_: Optional[str] = None,
# 图例选择的模式,控制是否可以通过点击图例改变系列的显示状态。默认开启图例选择,可以设成 false 关闭
# 除此之外也可以设成 'single' 或者 'multiple' 使用单选或者多选模式。
selected_mode: Union[str, bool, None] = None,
# 是否显示图例组件
is_show: bool = True,
# 图例组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Union[str, Numeric, None] = None,
# 图例组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Union[str, Numeric, None] = None,
# 图例组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Union[str, Numeric, None] = None,
# 图例组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Union[str, Numeric, None] = None,
# 图例列表的布局朝向。可选:'horizontal', 'vertical'
orient: Optional[str] = None,
# 图例标记和文本的对齐。默认自动(auto)
# 根据组件的位置和 orient 决定
# 当组件的 left 值为 'right' 以及纵向布局(orient 为 'vertical')的时候为右对齐,即为 'right'。
# 可选参数: `auto`, `left`, `right`
align: Optional[str] = None,
# 图例内边距,单位px,默认各方向内边距为5
padding: int = 5,
# 图例每项之间的间隔。横向布局时为水平间隔,纵向布局时为纵向间隔。
# 默认间隔为 10
item_gap: int = 10,
# 图例标记的图形宽度。默认宽度为 25
item_width: int = 25,
# 图例标记的图形高度。默认高度为 14
item_height: int = 14,
# 图例关闭时的颜色。默认是 #ccc
inactive_color: Optional[str] = None,
# 图例组件字体样式,参考 `series_options.TextStyleOpts`
textstyle_opts: Union[TextStyleOpts, dict, None] = None,
# 图例项的 icon。
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
# 可以通过 'path://' 将图标设置为任意的矢量路径。
legend_icon: Optional[str] = None,
)
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")
)
28.Pie_radius:甜甜圈,或环形饼状图
https://gallery.pyecharts.org/#/Pie/pie_radius
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())],
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")
)
29.Pie:多个玫瑰图
https://gallery.pyecharts.org/#/Pie/pie_rosetype
# 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
# radius:扇区圆心角展现数据的百分比,半径展现数据的大小
# area:所有扇区圆心角相同,仅通过半径展现数据大小
rosetype: Optional[str] = None,
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
v = Faker.choose()
c = (
Pie()
.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")
)
30.Season实践:读取数据实现玫瑰图,调整图表和图例的位置
def PIE_ROSE2():
# 获取excel值
sheet_10 = wb['Sheet10']
v1 = [];
v2 = []
for i in range(2,sheet_10.max_row+1):
subject_item = sheet_10.cell(i,1).value
subject_value = sheet_10.cell(i,2).value
v1.append(subject_item)
v2.append(subject_value)
c = (
Pie()
.add(
"",
[list(z) for z in zip(v1, v2)],
radius=["30%", "75%"],
center=["50%", "60%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=True,formatter='{b},{c}人, {d}%'),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"),
legend_opts=opts.LegendOpts(type_='scroll',pos_right='30px',orient='vertical', legend_icon = 'pin', padding = 10,)
)
)
return c
31.formatter:字符串模板和回调函数
-
可参考echarts官网的文档
https://echarts.apache.org/zh/option.html#grid.tooltip.formatter -
可参考pyecharts官网
https://pyecharts.org/#/zh-cn/javascript
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
# 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
# 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:
# 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
# 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
# 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
# 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
# 示例:formatter: '{b}: {@score}'
#
# 回调函数,回调函数格式:
# (params: Object|Array) => string
# 参数 params 是 formatter 需要的单个数据集。格式如下:
# {
# componentType: 'series',
# // 系列类型
# seriesType: string,
# // 系列在传入的 option.series 中的 index
# seriesIndex: number,
# // 系列名称
# seriesName: string,
# // 数据名,类目名
# name: string,
# // 数据在传入的 data 数组中的 index
# dataIndex: number,
# // 传入的原始数据项
# data: Object,
# // 传入的数据值
# value: number|Array,
# // 数据图形的颜色
# color: string,
# }
formatter: Optional[str] = None,
- 官方例子Pie - Mutiple_pie
https://gallery.pyecharts.org/#/Pie/mutiple_pie
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.commons.utils import JsCode
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()
.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")
)
- 我的例子
fn3 = """
function(params) {
if(params.percent > 10){
console.log(params.name);
console.log(params);
return params.name + ' : ' + params.percent + ' % '}{
return params.name;}
}
"""
def new_label_opts2():
return opts.LabelOpts(formatter=JsCode(fn3), position="top")
def PIE_ROSE_JS():
# 获取excel值
sheet_10 = wb['Sheet10']
v1 = []
v2 = []
for i in range(2,sheet_10.max_row+1):
subject_item = sheet_10.cell(i,1).value
subject_value = sheet_10.cell(i,2).value
v1.append(subject_item)
v2.append(subject_value)
c = (
Pie()
.add(
"",
[list(z) for z in zip(v1, v2)],
radius=["30%", "75%"],
center=["50%", "60%"],
rosetype="radius",
label_opts=new_label_opts2(),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"),
legend_opts=opts.LegendOpts(type_='scroll',pos_right='30px',orient='vertical', legend_icon = 'pin', padding = 10,)
)
)
return c
- 我的例子的控制台console输出:可以看到你可以用的变量有哪些
M360
page_draggable_layout.html:4818
{componentType: "series", componentSubType: "pie", componentIndex: 0, seriesType: "pie", seriesIndex: 0, …}
$vars: (4) ["seriesName", "name", "value", "percent"]
borderColor: undefined
color: undefined
componentIndex: 0
componentSubType: "pie"
componentType: "series"
data: {name: "M360", value: 706}
dataIndex: 0
dataType: undefined
dimensionIndex: undefined
dimensionNames: ["value"]
encode: {value: Array(1)}
marker: ""
name: "M360"
percent: 30.34
seriesId: "\u0000series\u00000\u00000"
seriesIndex: 0
seriesName: "series\u00000"
seriesType: "pie"
status: "normal"
value: 706
32.Nested_pies:圈中有圈(season版),含label的border设定,legend取并集。
https://gallery.pyecharts.org/#/Pie/nested_pies
- 注意以下radius设定:
radius=["40%", "55%"],
radius=[0, "30%"],
- 注意以下label的border设定:
.add(
series_name="访问来源",
radius=["40%", "55%"],
data_pair=outer_data_pair,
label_opts=opts.LabelOpts(
position="outside",
formatter=" \n {b}-{c}-{d}% \n",
background_color="#eee",
border_color="#aaa",
border_width=1,
border_radius=4,
),
- 注意以下legend取并集:
.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical"))
- 源代码
import pyecharts.options as opts
from pyecharts.charts import Pie
def PIE_IN_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)]
c = (
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=" \n {b}-{c}-{d}% \n",
background_color="#eee",
border_color="#aaa",
border_width=1,
border_radius=4,
),
)
.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}%)"
)
)
)
return c
33.Radar雷达图 - Basic_radar_chart
https://pyecharts.org/#/zh-cn/basic_charts?id=radar%ef%bc%9a%e9%9b%b7%e8%be%be%e5%9b%be
- class pyecharts.charts.Radar
class Radar(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Radar.add_schema
def add_schema(
# 雷达指示器配置项列表,参考 `RadarIndicatorItem`
schema: Sequence[Union[opts.RadarIndicatorItem, dict]],
# 雷达图绘制类型,可选 'polygon' 和 'circle'
shape: Optional[str] = None,
# 雷达的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标。
# 支持设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度。
center: Optional[types.Sequence] = None,
# 文字样式配置项,参考 `series_options.TextStyleOpts`
textstyle_opts: Union[opts.TextStyleOpts, dict] = opts.TextStyleOpts(),
# 分割线配置项,参考 `series_options.SplitLineOpts`
splitline_opt: Union[opts.SplitLineOpts, dict] = opts.SplitLineOpts(is_show=True),
# 分隔区域配置项,参考 `series_options.SplitAreaOpts`
splitarea_opt: Union[opts.SplitAreaOpts, dict] = opts.SplitAreaOpts(),
# 坐标轴轴线配置项,参考 `global_options.AxisLineOpts`
axisline_opt: Union[opts.AxisLineOpts, dict] = opts.AxisLineOpts(),
# 极坐标系的径向轴。参考 `basic_charts.RadiusAxisOpts`
radiusaxis_opts: types.RadiusAxis = None,
# 极坐标系的角度轴。参考 `basic_charts.AngleAxisOpts`
angleaxis_opts: types.AngleAxis = None,
# 极坐标系配置,参考 `global_options.PolorOpts`
polar_opts: types.Polar = None,
)
- func pyecharts.charts.Radar.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项
data: types.Sequence[types.Union[opts.RadarItem, dict]],
# 是否选中图例
is_selected: bool = True,
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
# 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
symbol: Optional[str] = None,
# 系列 label 颜色
color: Optional[str] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: opts.LabelOpts = opts.LabelOpts(),
# 线样式配置项,参考 `series_options.LineStyleOpts`
linestyle_opts: opts.LineStyleOpts = opts.LineStyleOpts(),
# 区域填充样式配置项,参考 `series_options.AreaStyleOpts`
areastyle_opts: opts.AreaStyleOpts = opts.AreaStyleOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
)
- RadarIndicatorItem class pyecharts.options.RadarIndicatorItem
class RadarIndicatorItem(
# 指示器名称。
name: Optional[str] = None,
# 指示器的最大值,可选,建议设置
min_: Optional[Numeric] = None,
# 指示器的最小值,可选,默认为 0。
max_: Optional[Numeric] = None,
# 标签特定的颜色。
color: Optional[str] = None,
)
- RadarItem:雷达图数据项
class RadarItem(
# 数据项名称
name: Optional[str] = None,
# 单个数据项的数值。
value: Optional[Numeric] = None,
# 单个数据标记的图形。
symbol: Optional[str] = None,
# 单个数据标记的大小
symbol_size: Union[Sequence[Numeric], Numeric] = None,
# 单个数据标记的旋转角度(而非弧度)。
symbol_rotate: Optional[Numeric] = None,
# 如果 symbol 是 path:// 的形式,是否在缩放时保持该图形的长宽比。
symbol_keep_aspect: bool = False,
# 单个数据标记相对于原本位置的偏移。
symbol_offset: Optional[Sequence] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[LabelOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[TooltipOpts, dict, None] = None,
# 线样式配置项,参考 `series_options.LineStyleOpts`
linestyle_opts: Union[LineStyleOpts, dict, None] = None,
# 区域填充样式配置项,参考 `series_options.AreaStyleOpts`
areastyle_opts: Union[AreaStyleOpts, dict, None] = None,
)
https://gallery.pyecharts.org/#/Radar/basic_radar_chart
import pyecharts.options as opts
from pyecharts.charts import Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
(
Radar(init_opts=opts.InitOpts(width="1280px", height="720px", bg_color="#CCCCCC"))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售(sales)", max_=6500),
opts.RadarIndicatorItem(name="管理(Administration)", max_=16000),
opts.RadarIndicatorItem(name="信息技术(Information Technology)", max_=30000),
opts.RadarIndicatorItem(name="客服(Customer Support)", max_=38000),
opts.RadarIndicatorItem(name="研发(Development)", max_=52000),
opts.RadarIndicatorItem(name="市场(Marketing)", max_=25000),
],
splitarea_opt=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add(
series_name="预算分配(Allocated Budget)",
data=v1,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
)
.add(
series_name="实际开销(Actual Spending)",
data=v2,
linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="基础雷达图"), legend_opts=opts.LegendOpts()
)
.render("basic_radar_chart.html")
)
34.SplitAreaOpts:分隔区域配置项;AreaStyleOpts:区域填充样式配置项
- class pyecharts.options.SplitAreaOpts
class SplitAreaOpts(
# 是否显示分隔区域。
is_show=True,
# 分隔区域的样式配置项,参考 `series_options.AreaStyleOpts`
areastyle_opts: AreaStyleOpts = AreaStyleOpts()
)
- class pyecharts.options.AreaStyleOpts
class AreaStyleOpts(
# 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
opacity: Optional[Numeric] = 0,
# 填充的颜色。
# 颜色可以使用 RGB 表示,比如 'rgb(128, 128, 128)',如果想要加上 alpha 通道表示不透明度,
# 可以使用 RGBA,比如 'rgba(128, 128, 128, 0.5)',也可以使用十六进制格式,比如 '#ccc'。
# 除了纯色之外颜色也支持渐变色和纹理填充
#
# 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,
# 如果 globalCoord 为 `true`,则该四个值是绝对的像素位置
# color: {
# type: 'linear',
# x: 0,
# y: 0,
# x2: 0,
# y2: 1,
# colorStops: [{
# offset: 0, color: 'red' // 0% 处的颜色
# }, {
# offset: 1, color: 'blue' // 100% 处的颜色
# }],
# global: false // 缺省为 false
# }
#
# 径向渐变,前三个参数分别是圆心 x, y 和半径,取值同线性渐变
# color: {
# type: 'radial',
# x: 0.5,
# y: 0.5,
# r: 0.5,
# colorStops: [{
# offset: 0, color: 'red' // 0% 处的颜色
# }, {
# offset: 1, color: 'blue' // 100% 处的颜色
# }],
# global: false // 缺省为 false
# }
#
# 纹理填充
# color: {
# image: imageDom, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串
# repeat: 'repeat' // 是否平铺, 可以是 'repeat-x', 'repeat-y', 'no-repeat'
# }
color: Optional[str] = None
)
- 完整例子
import pyecharts.options as opts
from pyecharts.charts import Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
(
Radar(init_opts=opts.InitOpts(width="1280px", height="720px", bg_color="#CCCCCC"))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售(sales)", max_=6500),
opts.RadarIndicatorItem(name="管理(Administration)", max_=16000),
opts.RadarIndicatorItem(name="信息技术(Information Technology)", max_=30000),
opts.RadarIndicatorItem(name="客服(Customer Support)", max_=38000),
opts.RadarIndicatorItem(name="研发(Development)", max_=52000),
opts.RadarIndicatorItem(name="市场(Marketing)", max_=25000),
],
splitarea_opt=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add(
series_name="预算分配(Allocated Budget)",
data=v1,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
)
.add(
series_name="实际开销(Actual Spending)",
data=v2,
linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="基础雷达图"), legend_opts=opts.LegendOpts()
)
.render("basic_radar_chart.html")
)
- 变更参数:SplitAreaOpts
splitarea_opt=opts.SplitAreaOpts(
is_show=False, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
- 变更参数:SplitAreaOpts
splitarea_opt=opts.SplitAreaOpts(
is_show=False, areastyle_opts=opts.AreaStyleOpts(opacity=0.3)
),
35.TextStyleOpts:文字样式配置项
- class pyecharts.options.TextStyleOpts
class TextStyleOpts(
# 文字颜色。
color: Optional[str] = None,
# 文字字体的风格
# 可选:'normal','italic','oblique'
font_style: Optional[str] = None,
# 主标题文字字体的粗细,可选:
# 'normal','bold','bolder','lighter'
font_weight: Optional[str] = None,
# 文字的字体系列
# 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
font_family: Optional[str] = None,
# 文字的字体大小
font_size: Optional[Numeric] = None,
# 文字水平对齐方式,默认自动
align: Optional[str] = None,
# 文字垂直对齐方式,默认自动
vertical_align: Optional[str] = None,
# 行高
line_height: Optional[str] = None,
# 文字块背景色。可以是直接的颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'
background_color: Optional[str] = None,
# 文字块边框颜色
border_color: Optional[str] = None,
# 文字块边框宽度
border_width: Optional[Numeric] = None,
# 文字块的圆角
border_radius: Union[Numeric, Sequence, None] = None,
# 文字块的内边距
# 例如 padding: [3, 4, 5, 6]:表示 [上, 右, 下, 左] 的边距
# 例如 padding: 4:表示 padding: [4, 4, 4, 4]
# 例如 padding: [3, 4]:表示 padding: [3, 4, 3, 4]
padding: Union[Numeric, Sequence, None] = None,
# 文字块的背景阴影颜色
shadow_color: Optional[str] = None,
# 文字块的背景阴影长度
shadow_blur: Optional[Numeric] = None,
# 文字块的宽度
width: Optional[str] = None,
# 文字块的高度
height: Optional[str] = None,
# 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
# 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
rich: Optional[dict] = None,
)
- 完整例子
import pyecharts.options as opts
from pyecharts.charts import Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
(
Radar(init_opts=opts.InitOpts(width="1280px", height="720px", bg_color="#CCCCCC"))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售(sales)", max_=6500),
opts.RadarIndicatorItem(name="管理(Administration)", max_=16000),
opts.RadarIndicatorItem(name="信息技术(Information Technology)", max_=30000),
opts.RadarIndicatorItem(name="客服(Customer Support)", max_=38000),
opts.RadarIndicatorItem(name="研发(Development)", max_=52000),
opts.RadarIndicatorItem(name="市场(Marketing)", max_=25000),
],
splitarea_opt=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add(
series_name="预算分配(Allocated Budget)",
data=v1,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
)
.add(
series_name="实际开销(Actual Spending)",
data=v2,
linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="基础雷达图"), legend_opts=opts.LegendOpts()
)
.render("basic_radar_chart.html")
)
- 变更参数:TextStyleOpts
textstyle_opts=opts.TextStyleOpts(color="#fff"),
36.LabelOpts:标签配置项 for 雷达图
- class pyecharts.options.LabelOpts
class LabelOpts(
# 是否显示标签。
is_show: bool = True,
# 标签的位置。可选
# 'top','left','right','bottom','inside','insideLeft','insideRight'
# 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
# 'insideTopRight','insideBottomRight'
position: Union[str, Sequence] = "top",
# 文字的颜色。
# 如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
color: Optional[str] = None,
# 距离图形元素的距离。当 position 为字符描述值(如 'top'、'insideRight')时候有效。
distance: Union[Numeric, Sequence, None] = None,
# 文字的字体大小
font_size: Numeric = 12,
# 文字字体的风格,可选:
# 'normal','italic','oblique'
font_style: Optional[str] = None,
# 文字字体的粗细,可选:
# 'normal','bold','bolder','lighter'
font_weight: Optional[str] = None,
# 文字的字体系列
# 还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ...
font_family: Optional[str] = None,
# 标签旋转。从 -90 度到 90 度。正值是逆时针。
rotate: Optional[Numeric] = None,
# 刻度标签与轴线之间的距离。
margin: Optional[Numeric] = 8,
# 坐标轴刻度标签的显示间隔,在类目轴中有效。
# 默认会采用标签不重叠的策略间隔显示标签。
# 可以设置成 0 强制显示所有标签。
# 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
# 可以用数值表示间隔的数据,也可以通过回调函数控制。回调函数格式如下:
# (index:number, value: string) => boolean
# 第一个参数是类目的 index,第二个值是类目名称,如果跳过则返回 false。
interval: Union[Numeric, str, None]= None,
# 文字水平对齐方式,默认自动。可选:
# 'left','center','right'
horizontal_align: Optional[str] = None,
# 文字垂直对齐方式,默认自动。可选:
# 'top','middle','bottom'
vertical_align: Optional[str] = None,
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
# 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
# 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:
# 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
# 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
# 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
# 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
# 示例:formatter: '{b}: {@score}'
#
# 回调函数,回调函数格式:
# (params: Object|Array) => string
# 参数 params 是 formatter 需要的单个数据集。格式如下:
# {
# componentType: 'series',
# // 系列类型
# seriesType: string,
# // 系列在传入的 option.series 中的 index
# seriesIndex: number,
# // 系列名称
# seriesName: string,
# // 数据名,类目名
# name: string,
# // 数据在传入的 data 数组中的 index
# dataIndex: number,
# // 传入的原始数据项
# data: Object,
# // 传入的数据值
# value: number|Array,
# // 数据图形的颜色
# color: string,
# }
formatter: Optional[str] = None,
# 在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果
# 具体配置可以参考一下 https://www.echartsjs.com/tutorial.html#%E5%AF%8C%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE
rich: Optional[dict] = None,
)
- 完整例子
import pyecharts.options as opts
from pyecharts.charts import Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
(
Radar(init_opts=opts.InitOpts(width="1280px", height="720px", bg_color="#CCCCCC"))
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售(sales)", max_=6500),
opts.RadarIndicatorItem(name="管理(Administration)", max_=16000),
opts.RadarIndicatorItem(name="信息技术(Information Technology)", max_=30000),
opts.RadarIndicatorItem(name="客服(Customer Support)", max_=38000),
opts.RadarIndicatorItem(name="研发(Development)", max_=52000),
opts.RadarIndicatorItem(name="市场(Marketing)", max_=25000),
],
splitarea_opt=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add(
series_name="预算分配(Allocated Budget)",
data=v1,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
)
.add(
series_name="实际开销(Actual Spending)",
data=v2,
linestyle_opts=opts.LineStyleOpts(color="#5CACEE"),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="基础雷达图"), legend_opts=opts.LegendOpts()
)
.render("basic_radar_chart.html")
)
- 变更参数:TextStyleOpts
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
37.Radar雷达图 - Radar_angle_radius_axis(用极坐标,内部刻度)
-
Polar:极坐标系的链接
https://gallery.pyecharts.org/#/Polar/polar_angleaxis
可详见 38.Polar - Polar_angleaxis -
雷达图的链接
https://gallery.pyecharts.org/#/Radar/radar_angle_radius_axis
from pyecharts import options as opts
from pyecharts.charts import Radar
data = [{"value": [4, -4, 2, 3, 0, 1], "name": "预算分配"}]
c_schema = [
{"name": "销售", "max": 4, "min": -4},
{"name": "管理", "max": 4, "min": -4},
{"name": "技术", "max": 4, "min": -4},
{"name": "客服", "max": 4, "min": -4},
{"name": "研发", "max": 4, "min": -4},
{"name": "市场", "max": 4, "min": -4},
]
c = (
Radar()
.set_colors(["#4587E7"])
.add_schema(
schema=c_schema,
shape="circle",
center=["50%", "50%"],
radius="80%",
# 以下是环形图表的架构
angleaxis_opts=opts.AngleAxisOpts(
min_=0,
max_=360,
is_clockwise=False,
interval=5,
axistick_opts=opts.AxisTickOpts(is_show=False),
axislabel_opts=opts.LabelOpts(is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
),
# 以下是内部刻度
radiusaxis_opts=opts.RadiusAxisOpts(
min_=-4,
max_=4,
interval=2,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
# 以下是内部的环形标记
polar_opts=opts.PolarOpts(),
splitarea_opt=opts.SplitAreaOpts(is_show=False),
splitline_opt=opts.SplitLineOpts(is_show=False),
)
.add(
series_name="预算",
data=data,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
linestyle_opts=opts.LineStyleOpts(width=1),
)
.render("radar_angle_radius_axis.html")
)
- 我的例子
def RADAR3():
data1 = [{"value": [34,20,19,25,50,37,32,25,3,25,24,68,6,63,20], "name": "评估分数"}]
data2 = [{"value": [41,20,25,44,42,31,39,39,50,46,8,23,37,98,52], "name": "评估分数"}]
data3 = [{"value": [19,24,16,22,16,26,20,30,96,91,96,68,85,87,74], "name": "评估分数"}]
c_schema = [
{"name": "接纳反馈", "max": 100, "min": 0},
{"name": "学习敏锐度", "max": 100, "min": 0},
{"name": "结果导向", "max": 100, "min": 0},
{"name": "全局思维", "max": 100, "min": 0},
{"name": "适应力", "max": 100, "min": 0},
{"name": "成就他人", "max": 100, "min": 0},
{"name": "领导意愿", "max": 100, "min": 0},
{"name": "平衡人际与任务", "max": 100, "min": 0},
{"name": "辅导", "max": 100, "min": 0},
{"name": "授权委责", "max": 100, "min": 0},
{"name": "建立成功团队", "max": 100, "min": 0},
{"name": "管理人际关系", "max": 100, "min": 0},
{"name": "影响力", "max": 100, "min": 0},
{"name": "建立伙伴关系", "max": 100, "min": 0},
{"name": "计划与组织", "max": 100, "min": 0},
]
c = (
Radar()
.set_colors(["#4587E7"])
.add_schema(
schema=c_schema,
shape="circle",
center=["50%", "50%"],
radius="80%",
# 以下是环形图表的架构
angleaxis_opts=opts.AngleAxisOpts(
min_=0,
max_=360,
is_clockwise=False,
interval=5,
axistick_opts=opts.AxisTickOpts(is_show=False),
axislabel_opts=opts.LabelOpts(is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
),
# 以下是内部刻度
radiusaxis_opts=opts.RadiusAxisOpts(
min_=0,
max_=100,
interval=20,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
# 以下是内部的环形标记
polar_opts=opts.PolarOpts(),
splitarea_opt=opts.SplitAreaOpts(is_show=False),
splitline_opt=opts.SplitLineOpts(is_show=False),
)
.add(
series_name="S君",
data=data1,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
color="#CD0000",
linestyle_opts=opts.LineStyleOpts(width=1,color="#CD0000"),
)
.add(
series_name="C君",
data=data2,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
color="#5CACEE",
linestyle_opts=opts.LineStyleOpts(width=1,color="#5CACEE"),
)
.add(
series_name="B君",
data=data3,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
color="green",
linestyle_opts=opts.LineStyleOpts(width=1,color="green"),
)
# 不显示值
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="潜能雷达图"), legend_opts=opts.LegendOpts()
)
)
return c
38.Polar - Polar_angleaxis
-
链接
https://pyecharts.org/#/zh-cn/basic_charts?id=polar%ef%bc%9a%e6%9e%81%e5%9d%90%e6%a0%87%e7%b3%bb -
class pyecharts.charts.Polar
class Polar(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Polar.add_schema
def add_schema(
radiusaxis_opts: Union[opts.RadiusAxisOpts, dict] = opts.RadiusAxisOpts(),
angleaxis_opts: Union[opts.AngleAxisOpts, dict] = opts.AngleAxisOpts(),
)
- func pyecharts.charts.Polar.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项
data: Sequence,
# 是否选中图例
is_selected: bool = True,
# 图表类型,支持
# ChartType.SCATTER, ChartType.LINE, ChartType.BAR,ChartType.EFFECT_SCATTER
type_: str = "line",
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
# 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
symbol: Optional[str] = None,
# 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
# 例如 [20, 10] 表示标记宽为 20,高为 10。
symbol_size: Numeric = 4,
# 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
stack: Optional[str] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 区域填充样式配置项,参考 `series_options.AreaStyleOpts`
areastyle_opts: Union[opts.AreaStyleOpts, dict] = opts.AreaStyleOpts(),
# 坐标轴刻度配置项,参考 `global_options.AxisTickOpts`
axistick_opts: Union[AxisTickOpts, dict, None] = None,
# 涟漪特效配置项,参考 `series_options.EffectOpts`
effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
)
- RadiusAxisItem:极坐标系径向轴数据项 class pyecharts.options.RadiusAxisItem
class RadiusAxisItem(
value: Optional[str] = None,
textstyle_opts: Optional[TextStyleOpts] = None,
)
- RadiusAxisOpts:极坐标系径向轴配置项 class pyecharts.options.RadiusAxisOpts
class RadiusAxisOpts(
# 径向轴所在的极坐标系的索引,默认使用第一个极坐标系。
polar_index: Optional[int] = None,
# 数据项,参考 `global_options.RadiusAxisItem`
data: Optional[Sequence[Union[RadiusAxisItem, dict, str]]] = None,
# 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。
# 类目轴中 boundaryGap 可以配置为 true 和 false。默认为 true,这时候刻度只是作为分隔线,
# 标签和数据点都会在两个刻度之间的带(band)中间。
# 非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
# 可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: ['20%', '20%']
boundary_gap: Union[bool, Sequence] = None,
# 坐标轴类型。可选:
# 'value': 数值轴,适用于连续数据。
# 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
# 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同
# 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
# 'log' 对数轴。适用于对数数据。
type_: Optional[str] = None,
# 坐标轴名称。
name: Optional[str] = None,
# 坐标轴名称显示位置。可选:
# 'start', 'middle' 或者 'center','end
name_location: Optional[str] = None,
# 坐标轴刻度最小值。
# 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
# 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
min_: Union[str, Numeric, None] = None,
# 坐标轴刻度最大值。
# 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
# 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
max_: Union[str, Numeric, None] = None,
# 只在数值轴中(type: 'value')有效。
# 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
# 在设置 min 和 max 之后该配置项无效。
is_scale: bool = False,
# 强制设置坐标轴分割间隔。
interval: Optional[Numeric] = None,
# 分割线配置项,参考 `series_options.SplitLineOpts`
splitline_opts: Union[SplitLineOpts, dict, None] = None,
# 坐标轴在 grid 区域中的分隔区域,默认不显示。参考 `series_options.SplitAreaOpts`
splitarea_opts: Union[SplitAreaOpts, dict, None] = None,
# 坐标轴线风格配置项,参考 `series_options.AxisLineOpts`
axisline_opts: Union[AxisLineOpts, dict, None] = None,
# 坐标轴线标签配置项,参考 `series_options.LabelOpts`
axislabel_opts: Union[LabelOpts, dict, None] = None,
# 半径轴组件的所有图形的 z 值。控制图形的前后顺序。z 值 小的图形会被 z 值大的图形覆盖
z: Optional[int] = None,
)
- AngleAxisItem:极坐标系角度轴数据项 class pyecharts.options.AngleAxisItem
class AngleAxisItem(
value: Optional[str] = None,
textstyle_opts: Optional[TextStyleOpts] = None,
)
- AngleAxisOpts:极坐标系角度轴配置项 class pyecharts.options.AngleAxisOpts
class AngleAxisOpts(
# 径向轴所在的极坐标系的索引,默认使用第一个极坐标系。
polar_index: Optional[int] = None,
data: Optional[Sequence[Union[AngleAxisItem, dict, str]]] = None,
start_angle: Optional[Numeric] = None,
is_clockwise: bool = False,
# 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。
# 类目轴中 boundaryGap 可以配置为 true 和 false。默认为 true,这时候刻度只是作为分隔线,
# 标签和数据点都会在两个刻度之间的带(band)中间。
# 非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
# 可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: ['20%', '20%']
boundary_gap: Union[bool, Sequence] = None,
# 坐标轴类型。可选:
# 'value': 数值轴,适用于连续数据。
# 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
# 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同
# 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
# 'log' 对数轴。适用于对数数据。
type_: Optional[str] = None,
# 坐标轴刻度最小值。
# 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
# 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
min_: Union[str, Numeric, None] = None,
# 坐标轴刻度最大值。
# 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
# 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
# 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'
# 也可以设置为负数,如 -3)。
max_: Union[str, Numeric, None] = None,
# 只在数值轴中(type: 'value')有效。
# 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
# 在设置 min 和 max 之后该配置项无效。
is_scale: bool = False,
# 坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整。
# 在类目轴中无效。
split_number: Numeric = 5,
# 强制设置坐标轴分割间隔。
interval: Optional[Numeric] = None,
# 分割线风格配置项,参考 `series_options.SplitLineOpts`
splitline_opts: Union[SplitLineOpts, dict, None] = None,
# 坐标轴线风格配置项,参考 `series_options.AxisLineOpts`
axisline_opts: Union[AxisLineOpts, dict, None] = None,
# 坐标轴标签风格配置项,参考 `series_options.LabelOpts`
axislabel_opts: Union[LabelOpts, dict, None] = None,
# 半径轴组件的所有图形的 z 值。控制图形的前后顺序。z 值 小的图形会被 z 值大的图形覆盖
z: Optional[int] = None,
)
- Polar - Polar_angleaxis
https://gallery.pyecharts.org/#/Polar/polar_angleaxis
from pyecharts import options as opts
from pyecharts.charts import Polar
from pyecharts.faker import Faker
c = (
Polar()
.add_schema(angleaxis_opts=opts.AngleAxisOpts(data=Faker.week, type_="category"))
.add("A", [1, 2, 3, 4, 3, 5, 1], type_="bar", stack="stack0")
.add("B", [2, 4, 6, 1, 2, 3, 1], type_="bar", stack="stack0")
.add("C", [1, 2, 3, 4, 1, 2, 5], type_="bar", stack="stack0")
.set_global_opts(title_opts=opts.TitleOpts(title="Polar-AngleAxis"))
.render("polar_angleaxis.html")
)
39.Polar极坐标实践:有环形区隔、固定最大值最小值、设定堆叠标签
- 有环形区隔
radiusaxis_opts=opts.RadiusAxisOpts(
min_=0,
max_=10,
interval=1,
# 以下两项要一起设定才可以显示环形区隔
splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
- 固定最大值最小值
radiusaxis_opts=opts.RadiusAxisOpts(
min_=0,
max_=10,
interval=1,
# 以下两项要一起设定才可以显示环形区隔
splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
- 设定堆叠标签
.add("A", [1, 2, 3, 4, 3, 5, 1], type_="bar", stack="stack1")
.add("B", [2, 4, 6, 1, 2, 3, 1], type_="bar", stack="stack0")
.add("C", [1, 2, 3, 4, 1, 2, 5], type_="bar", stack="stack0")
- 完整代码
def POLAR2():
c = (
Polar()
.add_schema(
angleaxis_opts=opts.AngleAxisOpts(data=Faker.week, type_="category"),
radiusaxis_opts=opts.RadiusAxisOpts(
min_=0,
max_=10,
interval=1,
# 以下两项要一起设定才可以显示环形区隔
splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add("A", [1, 2, 3, 4, 3, 5, 1], type_="bar", stack="stack1")
.add("B", [2, 4, 6, 1, 2, 3, 1], type_="bar", stack="stack0")
.add("C", [1, 2, 3, 4, 1, 2, 5], type_="bar", stack="stack0")
.set_global_opts(title_opts=opts.TitleOpts(title="Polar-AngleAxis"))
)
return c
40.Sunburst:旭日图
https://pyecharts.org/#/zh-cn/basic_charts?id=sunburst%ef%bc%9a%e6%97%ad%e6%97%a5%e5%9b%be
- class pyecharts.charts.Sunburst
class Sunburst(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Sunburst.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项。
data_pair: Sequence,
# 旭日图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标。
# 支持设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度。
center: Optional[Sequence] = None,
# 旭日图的半径。可以为如下类型:
# Sequence.<int|str>:数组的第一项是内半径,第二项是外半径。
radius: Optional[Sequence] = None,
# 当鼠标移动到一个扇形块时,可以高亮相关的扇形块。
# 'descendant':高亮该扇形块和后代元素,其他元素将被淡化;
# 'ancestor':高亮该扇形块和祖先元素;
# 'self':只高亮自身;
# 'none':不会淡化其他元素。
highlight_policy: str = "descendant",
# 点击节点后的行为。可取值为:false:节点点击无反应。
# 'rootToNode':点击节点后以该节点为根结点。
# 'link':如果节点数据中有 link 点击节点后会进行超链接跳转。
node_click: str = "rootToNode",
# 扇形块根据数据 value 的排序方式,如果未指定 value,则其值为子元素 value 之和。
# 'desc':降序排序;
# 'asc':升序排序;
# 'null':表示不排序,使用原始数据的顺序;
# 使用 javascript 回调函数进行排列:
sort_: Optional[JSFunc] = "desc",
# 旭日图多层级配置
# 目前配置方式可以参考: https://www.echartsjs.com/option.html#series-sunburst.levels
levels: Optional[Sequence] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 数据项的配置,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
- SunburstItem: 旭日图的数据项 class pyecharts.options.SunburstItem
class SunburstItem(
# 数据值,如果包含 children,则可以不写 value 值。
# 这时,将使用子元素的 value 之和作为父元素的 value。
# 如果 value 大于子元素之和,可以用来表示还有其他子元素未显示。
value: Optional[Numeric] = None,
# 显示在扇形块中的描述文字。
name: Optional[str] = None,
# 点击此节点可跳转的超链接。须 Sunburst.add.node_click 值为 'link' 时才生效
link: Optional[str] = None,
# 意义同 HTML <a> 标签中的 target,跳转方式的不同
# blank 是在新窗口或者新的标签页中打开
# self 则在当前页面或者当前标签页打开
target: Optional[str] = "blank",
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[LabelOpts, dict, None] = None,
# 数据项配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
# 子节点数据项配置配置(和 SunburstItem 一致, 递归下去)
children: Optional[Sequence] = None,
)
- Sunburst - Drink_flavors
https://gallery.pyecharts.org/#/Sunburst/basic_sunburst
from pyecharts.charts import Sunburst
from pyecharts import options as opts
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://www.echartsjs.com/examples/editor.html?c=sunburst-simple
目前无法实现的功能:
1、
"""
data = [
opts.SunburstItem(
name="Grandpa",
children=[
opts.SunburstItem(
name="Uncle Leo",
value=15,
children=[
opts.SunburstItem(name="Cousin Jack", value=2),
opts.SunburstItem(
name="Cousin Mary",
value=5,
children=[opts.SunburstItem(name="Jackson", value=2)],
),
opts.SunburstItem(name="Cousin Ben", value=4),
],
),
opts.SunburstItem(
name="Father",
value=10,
children=[
opts.SunburstItem(name="Me", value=5),
opts.SunburstItem(name="Brother Peter", value=1),
],
),
],
),
opts.SunburstItem(
name="Nancy",
children=[
opts.SunburstItem(
name="Uncle Nike",
children=[
opts.SunburstItem(name="Cousin Betty", value=1),
opts.SunburstItem(name="Cousin Jenny", value=2),
],
)
],
),
]
sunburst = (
Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px"))
.add(series_name="", data_pair=data, radius=[0, "90%"])
.set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-基本示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
.render("basic_sunburst.html")
)
41.label在三个地方都可以生效:set_series_opts(),add(),opts.***Item()
- add()局部生效
opts.SunburstItem(name="Cousin Jenny", value=2,label_opts=opts.LabelOpts(formatter="{b}-{c}2222")),
- set_series_opts()全图生效
sunburst = (
Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px"))
.add(series_name="RPA课程", data_pair=data, radius=[10, "90%"])
.set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-RPA课程1"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}-{c}"))
)
- add()全部变成绿色
sunburst = (
Sunburst(init_opts=opts.InitOpts(width="1200px", height="600px"))
.add(series_name="RPA课程", data_pair=data, radius=[10, "90%"], sort_="null",itemstyle_opts=opts.ItemStyleOpts(color='green'))
.set_global_opts(title_opts=opts.TitleOpts(title="RPA專家領域課程"))
.set_series_opts(label_opts=opts.LabelOpts(color='white',font_size=12,formatter="{b}"))
)
- opts.***Item()
opts.SunburstItem(
name="3.流程建模",
children=[
opts.SunburstItem(name="流程概念", value=0.33),
opts.SunburstItem(name="流程建模", value=0.33),
opts.SunburstItem(name="表單設計", value=0.34,itemstyle_opts=opts.ItemStyleOpts(color='yellow')),
],
),
42.旭日图:season版(以课程架构为例)
def SUNBURST3():
data = [
opts.SunburstItem(
name="Power BI",
children=[
opts.SunburstItem(
name="1.資料分析",
value=None,
children=[
opts.SunburstItem(name="資料處理", value=2),
opts.SunburstItem(name="常用函數",value=2),
],
),
opts.SunburstItem(
name="2.資料呈現",
value=None,
children=[
opts.SunburstItem(name="圖表製作", value=4),
],
),
opts.SunburstItem(
name="3.融合RPA",
value=None,
children=[
opts.SunburstItem(name="PBI模組", value=4),
],
),
],
),
opts.SunburstItem(
name="Python",
children=[
opts.SunburstItem(
name="1.函數&變量",
children=[
opts.SunburstItem(name="print()", value=1),
opts.SunburstItem(name="資料類型", value=1),
opts.SunburstItem(name="條件判斷", value=1),
opts.SunburstItem(name="input()", value=1),
],
),
opts.SunburstItem(
name="2.資料製作",
children=[
opts.SunburstItem(name="列表字典", value=2),
opts.SunburstItem(name="循环", value=1),
opts.SunburstItem(name="布林值", value=1),
],
),
opts.SunburstItem(
name="3.如何解決問題",
children=[
opts.SunburstItem(name="設計思維", value=1),
opts.SunburstItem(name="函數", value=1),
opts.SunburstItem(name="類與对象", value=2),
],
),
opts.SunburstItem(
name="4.函數模塊",
children=[
opts.SunburstItem(name="模組", value=2),
opts.SunburstItem(name="openpyxl", value=1),
opts.SunburstItem(name="Excel", value=1),
],
),
opts.SunburstItem(
name="5.RPA啟動",
children=[
opts.SunburstItem(name="Python模組", value=2),
opts.SunburstItem(name="RPA啟動Python", value=2),
],
),
],
),
opts.SunburstItem(
name="VBA",
children=[
opts.SunburstItem(
name="1.VBA變量",
children=[
opts.SunburstItem(name="VBA變數", value=4),
],
),
opts.SunburstItem(
name="2.函數模塊",
children=[
opts.SunburstItem(name="函數模組", value=4),
],
),
opts.SunburstItem(
name="3.RPA啟動VBA",
children=[
opts.SunburstItem(name="RPA啟動VBA", value=2),
],
),
],
),
opts.SunburstItem(
name="BPM",
children=[
opts.SunburstItem(
name="1.企業流程",
children=[
opts.SunburstItem(name="流程概念", value=0.33),
opts.SunburstItem(name="BPM方法論", value=0.33),
opts.SunburstItem(name="流程工具", value=0.34),
],
),
opts.SunburstItem(
name="2.流程8元素",
children=[
opts.SunburstItem(name="流程8元素", value=0.5),
opts.SunburstItem(name="8元素應用", value=0.5),
],
),
opts.SunburstItem(
name="3.流程建模",
children=[
opts.SunburstItem(name="流程概念", value=0.33),
opts.SunburstItem(name="流程建模", value=0.33),
opts.SunburstItem(name="表單設計", value=0.34,itemstyle_opts=opts.ItemStyleOpts(color='auto')),
],
),
],
),
]
sunburst = (
Sunburst(init_opts=opts.InitOpts(width="1200px", height="600px"))
.add(series_name="RPA课程", data_pair=data, radius=[10, "90%"], sort_="null")
.set_global_opts(title_opts=opts.TitleOpts(title="RPA專家領域課程"))
.set_series_opts(label_opts=opts.LabelOpts(color='white',font_size=12,formatter="{b}"))
)
return sunburst
43.旭日图:自定义颜色、中间有主题
def SUNBURST4():
data = [
opts.SunburstItem(
name="RPA",
value=None,
label_opts=opts.LabelOpts(color='black',font_size=20,vertical_align='bottom',horizontal_align='center',rotate='tangential'),
itemstyle_opts=opts.ItemStyleOpts(color='#fff'),
children=[
opts.SunburstItem(
name="Power BI",
itemstyle_opts=opts.ItemStyleOpts(color='#6699CC'),
label_opts=opts.LabelOpts(color='white',font_size=16),
children=[
opts.SunburstItem(
name="1.資料分析",
value=None,
itemstyle_opts=opts.ItemStyleOpts(color='#6699CC'),
children=[
opts.SunburstItem(name="資料處理", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#6699CC')),
opts.SunburstItem(name="常用函數",value=2,itemstyle_opts=opts.ItemStyleOpts(color='#6699CC')),
],
),
opts.SunburstItem(
name="2.資料呈現",
value=None,
itemstyle_opts=opts.ItemStyleOpts(color='#6699CC'),
children=[
opts.SunburstItem(name="圖表製作", value=4,itemstyle_opts=opts.ItemStyleOpts(color='#6699CC')),
],
),
opts.SunburstItem(
name="3.融合RPA",
value=None,
itemstyle_opts=opts.ItemStyleOpts(color='#6699CC'),
children=[
opts.SunburstItem(name="PBI模組", value=4,itemstyle_opts=opts.ItemStyleOpts(color='#6699CC')),
],
),
],
),
opts.SunburstItem(
name="Python",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
label_opts=opts.LabelOpts(color='white',font_size=16),
children=[
opts.SunburstItem(
name="1.函數&變量",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
children=[
opts.SunburstItem(name="print()", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="資料類型", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="條件判斷", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="input()", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
],
),
opts.SunburstItem(
name="2.資料製作",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
children=[
opts.SunburstItem(name="列表字典", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="循环", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="布林值", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
],
),
opts.SunburstItem(
name="3.解決問題",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
children=[
opts.SunburstItem(name="設計思維", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="函數", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="類與对象", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
],
),
opts.SunburstItem(
name="4.函數模塊",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
children=[
opts.SunburstItem(name="模組", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="openpyxl", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="Excel", value=1,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
],
),
opts.SunburstItem(
name="5.RPA啟動",
itemstyle_opts=opts.ItemStyleOpts(color='#CC0033'),
children=[
opts.SunburstItem(name="Python模組", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
opts.SunburstItem(name="啟動Python", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#CC0033')),
],
),
],
),
opts.SunburstItem(
name="VBA",
label_opts=opts.LabelOpts(color='white',font_size=16),
itemstyle_opts=opts.ItemStyleOpts(color='#009999'),
children=[
opts.SunburstItem(
name="1.VBA變量",
itemstyle_opts=opts.ItemStyleOpts(color='#009999'),
children=[
opts.SunburstItem(name="VBA變數", value=4,itemstyle_opts=opts.ItemStyleOpts(color='#009999')),
],
),
opts.SunburstItem(
name="2.函數模塊",
itemstyle_opts=opts.ItemStyleOpts(color='#009999'),
children=[
opts.SunburstItem(name="函數模組", value=4,itemstyle_opts=opts.ItemStyleOpts(color='#009999')),
],
),
opts.SunburstItem(
name="3.RPA啟動VBA",
itemstyle_opts=opts.ItemStyleOpts(color='#009999'),
children=[
opts.SunburstItem(name="RPA啟動VBA", value=2,itemstyle_opts=opts.ItemStyleOpts(color='#009999')),
],
),
],
),
opts.SunburstItem(
name="BPM",
label_opts=opts.LabelOpts(color='white',font_size=16),
itemstyle_opts=opts.ItemStyleOpts(color='#FF9966'),
children=[
opts.SunburstItem(
name="1.企業流程",
itemstyle_opts=opts.ItemStyleOpts(color='#FF9966'),
children=[
opts.SunburstItem(name="流程概念", value=0.33,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
opts.SunburstItem(name="BPM方法論", value=0.33,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
opts.SunburstItem(name="流程工具", value=0.34,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
],
),
opts.SunburstItem(
name="2.流程8元素",
itemstyle_opts=opts.ItemStyleOpts(color='#FF9966'),
children=[
opts.SunburstItem(name="流程8元素", value=0.5,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
opts.SunburstItem(name="8元素應用", value=0.5,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
],
),
opts.SunburstItem(
name="3.流程建模",
itemstyle_opts=opts.ItemStyleOpts(color='#FF9966'),
children=[
opts.SunburstItem(name="流程概念", value=0.33,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
opts.SunburstItem(name="流程建模", value=0.33,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
opts.SunburstItem(name="表單設計", value=0.34,itemstyle_opts=opts.ItemStyleOpts(color='#FF9966')),
],
),
],
),
])
]
sunburst = (
Sunburst(init_opts=opts.InitOpts(width="1200px", height="600px"))
.add(series_name="RPA课程", data_pair=data, radius=[0, "95%"], sort_="null")
.set_global_opts(title_opts=opts.TitleOpts(title="RPA專家領域課程"))
.set_series_opts(label_opts=opts.LabelOpts(color='white',font_size=12,formatter="{b}"))
)
return sunburst
44.旭日图:label的positon=‘outside’
https://gallery.pyecharts.org/#/Sunburst/drink_flavors
data=[.......]
c = (
Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px"))
.add(
"",
data_pair=data,
highlight_policy="ancestor",
radius=[0, "95%"],
sort_="null",
levels=[
{},
{
"r0": "15%",#内圈
"r": "35%",#外圈
"itemStyle": {"borderWidth": 2},
"label": {"rotate": "tangential"},
},
{"r0": "35%", "r": "70%", "label": {"align": "right"}},
{
"r0": "70%",
"r": "72%",
"label": {"position": "outside", "padding": 3, "silent": False},
"itemStyle": {"borderWidth": 3},
},
],
)
.set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-官方示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
.render("drink_flavors.html")
)
45.ThemeRiver:主题河流图
主题河流图一般在文本中用到的不多,但通过这种时间序列关系,我们能够分析一些特定的词在全文中的分布规律,这样有助于我们理解全文内容。
https://pyecharts.org/#/zh-cn/basic_charts?id=themeriver%ef%bc%9a%e4%b8%bb%e9%a2%98%e6%b2%b3%e6%b5%81%e5%9b%be
https://gallery.pyecharts.org/#/ThemeRiver/theme_river
- class pyecharts.charts.ThemeRiver
class ThemeRiver(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.ThemeRiver.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: Sequence,
# 系列数据项
data: types.Sequence[types.Union[opts.ThemeRiverItem, dict]],
# 是否选中图例
is_selected: bool = True,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 单轴组件配置项,参考 `global_options.SingleAxisOpts`
singleaxis_opts: Union[opts.SingleAxisOpts, dict] = opts.SingleAxisOpts(),
):
- ThemeRiverItem:主题河流图数据项
class ThemeRiverItem(
# 时间或主题的时间属性。
date: Optional[str] = None,
# 事件或主题在某个时间点的值。
value: Optional[Numeric] = None,
# 事件或主题的名称。
name: Optional[str] = None,
)
- Themeriver - Theme_river
import pyecharts.options as opts
from pyecharts.charts import ThemeRiver
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=themeRiver-basic
目前无法实现的功能:
1、暂时无法设置阴影样式
"""
x_data = ["DQ", "TY", "SS", "QG", "SY", "DD"]
y_data = [
["2015/11/08", 10, "DQ"],
["2015/11/09", 15, "DQ"],
["2015/11/10", 35, "DQ"],
["2015/11/11", 38, "DQ"],
["2015/11/12", 22, "DQ"],
["2015/11/13", 16, "DQ"],
["2015/11/14", 7, "DQ"],
["2015/11/15", 2, "DQ"],
["2015/11/16", 17, "DQ"],
["2015/11/17", 33, "DQ"],
["2015/11/18", 40, "DQ"],
["2015/11/19", 32, "DQ"],
["2015/11/20", 26, "DQ"],
["2015/11/21", 35, "DQ"],
["2015/11/22", 40, "DQ"],
["2015/11/23", 32, "DQ"],
["2015/11/24", 26, "DQ"],
["2015/11/25", 22, "DQ"],
["2015/11/26", 16, "DQ"],
["2015/11/27", 22, "DQ"],
["2015/11/28", 10, "DQ"],
["2015/11/08", 35, "TY"],
["2015/11/09", 36, "TY"],
["2015/11/10", 37, "TY"],
["2015/11/11", 22, "TY"],
["2015/11/12", 24, "TY"],
["2015/11/13", 26, "TY"],
["2015/11/14", 34, "TY"],
["2015/11/15", 21, "TY"],
["2015/11/16", 18, "TY"],
["2015/11/17", 45, "TY"],
["2015/11/18", 32, "TY"],
["2015/11/19", 35, "TY"],
["2015/11/20", 30, "TY"],
["2015/11/21", 28, "TY"],
["2015/11/22", 27, "TY"],
["2015/11/23", 26, "TY"],
["2015/11/24", 15, "TY"],
["2015/11/25", 30, "TY"],
["2015/11/26", 35, "TY"],
["2015/11/27", 42, "TY"],
["2015/11/28", 42, "TY"],
["2015/11/08", 21, "SS"],
["2015/11/09", 25, "SS"],
["2015/11/10", 27, "SS"],
["2015/11/11", 23, "SS"],
["2015/11/12", 24, "SS"],
["2015/11/13", 21, "SS"],
["2015/11/14", 35, "SS"],
["2015/11/15", 39, "SS"],
["2015/11/16", 40, "SS"],
["2015/11/17", 36, "SS"],
["2015/11/18", 33, "SS"],
["2015/11/19", 43, "SS"],
["2015/11/20", 40, "SS"],
["2015/11/21", 34, "SS"],
["2015/11/22", 28, "SS"],
["2015/11/23", 26, "SS"],
["2015/11/24", 37, "SS"],
["2015/11/25", 41, "SS"],
["2015/11/26", 46, "SS"],
["2015/11/27", 47, "SS"],
["2015/11/28", 41, "SS"],
["2015/11/08", 10, "QG"],
["2015/11/09", 15, "QG"],
["2015/11/10", 35, "QG"],
["2015/11/11", 38, "QG"],
["2015/11/12", 22, "QG"],
["2015/11/13", 16, "QG"],
["2015/11/14", 7, "QG"],
["2015/11/15", 2, "QG"],
["2015/11/16", 17, "QG"],
["2015/11/17", 33, "QG"],
["2015/11/18", 40, "QG"],
["2015/11/19", 32, "QG"],
["2015/11/20", 26, "QG"],
["2015/11/21", 35, "QG"],
["2015/11/22", 40, "QG"],
["2015/11/23", 32, "QG"],
["2015/11/24", 26, "QG"],
["2015/11/25", 22, "QG"],
["2015/11/26", 16, "QG"],
["2015/11/27", 22, "QG"],
["2015/11/28", 10, "QG"],
["2015/11/08", 10, "SY"],
["2015/11/09", 15, "SY"],
["2015/11/10", 35, "SY"],
["2015/11/11", 38, "SY"],
["2015/11/12", 22, "SY"],
["2015/11/13", 16, "SY"],
["2015/11/14", 7, "SY"],
["2015/11/15", 2, "SY"],
["2015/11/16", 17, "SY"],
["2015/11/17", 33, "SY"],
["2015/11/18", 40, "SY"],
["2015/11/19", 32, "SY"],
["2015/11/20", 26, "SY"],
["2015/11/21", 35, "SY"],
["2015/11/22", 4, "SY"],
["2015/11/23", 32, "SY"],
["2015/11/24", 26, "SY"],
["2015/11/25", 22, "SY"],
["2015/11/26", 16, "SY"],
["2015/11/27", 22, "SY"],
["2015/11/28", 10, "SY"],
["2015/11/08", 10, "DD"],
["2015/11/09", 15, "DD"],
["2015/11/10", 35, "DD"],
["2015/11/11", 38, "DD"],
["2015/11/12", 22, "DD"],
["2015/11/13", 16, "DD"],
["2015/11/14", 7, "DD"],
["2015/11/15", 2, "DD"],
["2015/11/16", 17, "DD"],
["2015/11/17", 33, "DD"],
["2015/11/18", 4, "DD"],
["2015/11/19", 32, "DD"],
["2015/11/20", 26, "DD"],
["2015/11/21", 35, "DD"],
["2015/11/22", 40, "DD"],
["2015/11/23", 32, "DD"],
["2015/11/24", 26, "DD"],
["2015/11/25", 22, "DD"],
["2015/11/26", 16, "DD"],
["2015/11/27", 22, "DD"],
["2015/11/28", 10, "DD"],
]
(
ThemeRiver(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add(
series_name=x_data,
data=y_data,
singleaxis_opts=opts.SingleAxisOpts(
pos_top="50", pos_bottom="50", type_="time"
),
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line")
)
.render("theme_river.html")
)
48.主题河流图(openpyxl读数据、时间轴、隐藏label、legend竖排)
def THEME_RIVER2():
# 获取excel值
sheet_12 = wb['Sheet12']
v1 = []
v3 = []
for i in range(2,sheet_12.max_row+1):
v2 = []
subject_time = sheet_12.cell(i,1).value
subject_item = sheet_12.cell(i,2).value
subject_value = sheet_12.cell(i,3).value
v2.append(subject_time)
v2.append(subject_value)
v2.append(subject_item)
v1.append(v2)
v3.append(subject_item)
#列表转集合
v3 = list(set(v3))
print(v1)
print('-----------------------------------------')
print(v3)
#x_data = ["COM", "FAC", "FAE","FIN","HR","IE","M360","MIS","NPI","PD","PE","PMC","PME","PSE",
# "PUR","QA","TE","V360","ADM","SQM","TRA","PCB","WH"]
x_data = v3
y_data = v1
c = (
ThemeRiver(init_opts=opts.InitOpts(width="1200px", height="600px"))
.add(
series_name=x_data,
label_opts= opts.LabelOpts(is_show = False),
data=y_data,
singleaxis_opts=opts.SingleAxisOpts(
pos_top="5%", pos_bottom="5%", pos_right='10%',type_="time"
),
)
.set_global_opts(
title_opts = opts.TitleOpts(title='上课人数分布'),
legend_opts = opts.LegendOpts(orient='vertical',pos_right='5'),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line")
)
)
return c
47.触发提示框
- TooltipOpts:提示框配置项 class pyecharts.options.TooltipOpts
class TooltipOpts(
# 是否显示提示框组件,包括提示框浮层和 axisPointer。
is_show: bool = True,
# 触发类型。可选:
# 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
# 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
# 'none': 什么都不触发
trigger: str = "item",
# 提示框触发的条件,可选:
# 'mousemove': 鼠标移动时触发。
# 'click': 鼠标点击时触发。
# 'mousemove|click': 同时鼠标移动和点击时触发。
# 'none': 不在 'mousemove' 或 'click' 时触发,
trigger_on: str = "mousemove|click",
# 指示器类型。可选
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
axis_pointer_type: str = "line",
# 是否显示提示框浮层,默认显示。
# 只需 tooltip 触发事件或显示 axisPointer 而不需要显示内容时可配置该项为 false。
is_show_content: bool = True,
# 是否永远显示提示框内容,
# 默认情况下在移出可触发提示框区域后一定时间后隐藏,设置为 true 可以保证一直显示提示框内容。
is_always_show_content: bool = False,
# 浮层显示的延迟,单位为 ms,默认没有延迟,也不建议设置。
show_delay: Numeric = 0,
# 浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效。
hide_delay: Numeric = 100,
# 提示框浮层的位置,默认不设置时位置会跟随鼠标的位置。
# 1、通过数组配置:
# 绝对位置,相对于容器左侧 10px, 上侧 10 px ===> position: [10, 10]
# 相对位置,放置在容器正中间 ===> position: ['50%', '50%']
# 2、通过回调函数配置
# 3、固定参数配置:'inside','top','left','right','bottom'
position: Union[str, Sequence, JSFunc] = None,
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 字符串模板 模板变量有:
# {a}:系列名。
# {b}:数据名。
# {c}:数据值。
# {@xxx}:数据中名为 'xxx' 的维度的值,如 {@product} 表示名为 'product'` 的维度的值。
# {@[n]}:数据中维度 n 的值,如{@[3]}` 表示维度 3 的值,从 0 开始计数。
# 示例:formatter: '{b}: {@score}'
#
# 回调函数,回调函数格式:
# (params: Object|Array) => string
# 参数 params 是 formatter 需要的单个数据集。格式如下:
# {
# componentType: 'series',
# // 系列类型
# seriesType: string,
# // 系列在传入的 option.series 中的 index
# seriesIndex: number,
# // 系列名称
# seriesName: string,
# // 数据名,类目名
# name: string,
# // 数据在传入的 data 数组中的 index
# dataIndex: number,
# // 传入的原始数据项
# data: Object,
# // 传入的数据值
# value: number|Array,
# // 数据图形的颜色
# color: string,
# }
formatter: Optional[str] = None,
# 提示框浮层的背景颜色。
background_color: Optional[str] = None,
# 提示框浮层的边框颜色。
border_color: Optional[str] = None,
# 提示框浮层的边框宽。
border_width: Numeric = 0,
# 文字样式配置项,参考 `series_options.TextStyleOpts`
textstyle_opts: TextStyleOpts = TextStyleOpts(font_size=14),
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line")
)
48.WordCloud:词云图
https://pyecharts.org/#/zh-cn/basic_charts?id=wordcloud%ef%bc%9a%e8%af%8d%e4%ba%91%e5%9b%be
- class pyecharts.charts.WordCloud
class WordCloud(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.WordCloud.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项,[(word1, count1), (word2, count2)]
data_pair: Sequence,
# 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
shape: str = "circle",
# 自定义的图片(目前支持 jpg, jpeg, png, ico 的格式,其他的图片格式待测试)
# 该参数支持:
# 1、 base64 (需要补充 data 头);
# 2、本地文件路径(相对或者绝对路径都可以)
# 注:如果使用了 mask_image 之后第一次渲染会出现空白的情况,再刷新一次就可以了(Echarts 的问题)
# Echarts Issue: https://github.com/ecomfe/echarts-wordcloud/issues/74
mask_image: types.Optional[str] = None,
# 单词间隔
word_gap: Numeric = 20,
# 单词字体大小范围
word_size_range=None,
# 旋转单词角度
rotate_step: Numeric = 45,
# 距离左侧的距离
pos_left: types.Optional[str] = None,
# 距离顶部的距离
pos_top: types.Optional[str] = None,
# 距离右侧的距离
pos_right: types.Optional[str] = None,
# 距离底部的距离
pos_bottom: types.Optional[str] = None,
# 词云图的宽度
width: types.Optional[str] = None,
# 词云图的高度
height: types.Optional[str] = None,
# 允许词云图的数据展示在画布范围之外
is_draw_out_of_bound: bool = False,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 词云图文字的配置
textstyle_opts: types.TextStyle = None,
# 词云图文字阴影的范围
emphasis_shadow_blur: types.Optional[types.Numeric] = None,
# 词云图文字阴影的颜色
emphasis_shadow_color: types.Optional[str] = None,
)
- Wordcloud - Basic_wordcloud
https://gallery.pyecharts.org/#/WordCloud/basic_wordcloud
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data = [
("生活资源", "999"),
("供热管理", "888"),
("供气质量", "777"),
("生活用水管理", "688"),
("一次供水问题", "588"),
("交通运输", "516"),
("城市交通", "515"),
("环境保护", "483"),
("房地产管理", "462"),
("城乡建设", "449"),
("社会保障与福利", "429"),
("社会保障", "407"),
("文体与教育管理", "406"),
("公共安全", "406"),
("公交运输管理", "386"),
("出租车运营管理", "385"),
("供热管理", "375"),
("市容环卫", "355"),
("自然资源管理", "355"),
("粉尘污染", "335"),
("噪声污染", "324"),
("土地资源管理", "304"),
("物业服务与管理", "304"),
("医疗卫生", "284"),
("粉煤灰污染", "284"),
("占道", "284"),
("供热发展", "254"),
("农村土地规划管理", "254"),
("生活噪音", "253"),
("供热单位影响", "253"),
("城市供电", "223"),
("房屋质量与安全", "223"),
("大气污染", "223"),
("房屋安全", "223"),
("文化活动", "223"),
("拆迁管理", "223"),
("公共设施", "223"),
("供气质量", "223"),
("供电管理", "223"),
("燃气管理", "152"),
("教育管理", "152"),
("医疗纠纷", "152"),
("执法监督", "152"),
("设备安全", "152"),
("政务建设", "152"),
("县区、开发区", "152"),
("宏观经济", "152"),
("教育管理", "112"),
("社会保障", "112"),
("生活用水管理", "112"),
("物业服务与管理", "112"),
("分类列表", "112"),
("农业生产", "112"),
("二次供水问题", "112"),
("城市公共设施", "92"),
("拆迁政策咨询", "92"),
("物业服务", "92"),
("物业管理", "92"),
("社会保障保险管理", "92"),
("低保管理", "92"),
("文娱市场管理", "72"),
("城市交通秩序管理", "72"),
("执法争议", "72"),
("商业烟尘污染", "72"),
("占道堆放", "71"),
("地上设施", "71"),
("水质", "71"),
("无水", "71"),
("供热单位影响", "71"),
("人行道管理", "71"),
("主网原因", "71"),
("集中供热", "71"),
("客运管理", "71"),
("国有公交(大巴)管理", "71"),
("工业粉尘污染", "71"),
("治安案件", "71"),
("压力容器安全", "71"),
("身份证管理", "71"),
("群众健身", "41"),
("工业排放污染", "41"),
("破坏森林资源", "41"),
("市场收费", "41"),
("生产资金", "41"),
("生产噪声", "41"),
("农村低保", "41"),
("劳动争议", "41"),
("劳动合同争议", "41"),
("劳动报酬与福利", "41"),
("医疗事故", "21"),
("停供", "21"),
("基础教育", "21"),
("职业教育", "21"),
("物业资质管理", "21"),
("拆迁补偿", "21"),
("设施维护", "21"),
("市场外溢", "11"),
("占道经营", "11"),
("树木管理", "11"),
("农村基础设施", "11"),
("无水", "11"),
("供气质量", "11"),
("停气", "11"),
("市政府工作部门(含部门管理机构、直属单位)", "11"),
("燃气管理", "11"),
("市容环卫", "11"),
("新闻传媒", "11"),
("人才招聘", "11"),
("市场环境", "11"),
("行政事业收费", "11"),
("食品安全与卫生", "11"),
("城市交通", "11"),
("房地产开发", "11"),
("房屋配套问题", "11"),
("物业服务", "11"),
("物业管理", "11"),
("占道", "11"),
("园林绿化", "11"),
("户籍管理及身份证", "11"),
("公交运输管理", "11"),
("公路(水路)交通", "11"),
("房屋与图纸不符", "11"),
("有线电视", "11"),
("社会治安", "11"),
("林业资源", "11"),
("其他行政事业收费", "11"),
("经营性收费", "11"),
("食品安全与卫生", "11"),
("体育活动", "11"),
("有线电视安装及调试维护", "11"),
("低保管理", "11"),
("劳动争议", "11"),
("社会福利及事务", "11"),
("一次供水问题", "11"),
]
(
WordCloud()
.add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
.render("basic_wordcloud.html")
)
49.词云图:结合JIEBA和collections.Counter(),读取真实文章
- 源代码
import jieba
import re
from collections import Counter
def JIEBA():
cut_words=""
for line in open(r'JIEBA.txt',encoding='utf-8'):
line.strip('\n')
#line = re.sub("[A-Za-z0-9\:\·\—\,\。\“ \”]", "", line)
seg_list=jieba.cut(line,cut_all=False)
cut_words+=(" ".join(seg_list))
all_words=cut_words.split()
#print(all_words)
c=Counter()
for x in all_words:
if len(x)>1 and x != '\r\n':
c[x] += 1
print('\n词频统计结果:')
JIEBA_list = []
for (k,v) in c.most_common():# 输出词频最高的前两个词
if v>2:#只添加value超过2的部分,剔除大部分值
JIEBA_list.append((k,v))
print("%s:%d"%(k,v))
return JIEBA_list
def WORDCLOUD2():
data= JIEBA()
c = (
WordCloud(init_opts=opts.InitOpts(width="1200px", height="600px"))
.add(series_name="热点分析", data_pair=data, shape="circle", width='100%',height='100%',word_size_range=[10, 200])
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
)
return c
-
词云图
-
txt原档
百度是拥有强大互联网基础的领先AI公司。百度愿景是:成为最懂用户,并能帮助人们成长的全球顶级高科技公司。 [1]
“百度”二字,来自于八百年前南宋词人辛弃疾的一句词:众里寻他千百度。这句话描述了词人对理想的执着追求。1999年底,身在美国硅谷的李彦宏看到了中国互联网及中文搜索引擎服务的巨大发展潜力,抱着技术改变世界的梦想,他毅然辞掉硅谷的高薪工作,携搜索引擎专利技术,于 2000年1月1日在中关村创建了百度公司。
百度拥有数万名研发工程师,这是中国乃至全球都顶尖的技术团队。这支队伍掌握着世界上最为先进的搜索引擎技术,使百度成为中国掌握世界尖端科学核心技术的中国高科技企业,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。 [1]
百度是拥有强大互联网基础的领先AI公司。是全球为数不多的提供AI芯片、软件架构和应用程序等全栈AI技术的公司之一,被国际机构评为全球四大AI公司之一。百度以“用科技让复杂的世界更简单”为使命,坚持技术创新,致力于“成为最懂用户,并能帮助人们成长的全球顶级高科技公司”。
百度公司2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。百度每天响应来自100余个国家和地区的数十亿次搜索请求,是网民获取中文信息和服务的最主要入口,服务10亿互联网用户。
基于搜索引擎,百度演化出语音、图像、知识图谱、自然语言处理等人工智能技术;最近10年,百度在深度学习、对话式人工智能操作系统、自动驾驶、AI芯片等前沿领域投资,使得百度成为一个拥有强大互联网基础的领先AI公司。
百度大脑是百度通用AI能力之集大成,已对外开放了270多项AI能力,日调用量突破1万亿次。在算力方面,百度自主研发的云端通用芯片昆仑1,已在百度搜索引擎和智能云生态伙伴等场景广泛部署,具有高性能和高性价比。下一代7纳米昆仑2芯片即将量产,性能比昆仑1提升3倍。算法方面,飞桨是中国自主研发的第一个深度学习框架,是AI时代的操作系统,凝聚了265万开发者、服务了10万家企业。最近三年,在中国人工智能专利申请和授权方面,百度始终排名第一。
在云、AI、互联网融合发展的大趋势下,百度形成了移动生态、百度智能云、智能交通、智能驾驶及更多人工智能领域前沿布局的多引擎增长新格局,积蓄起支撑未来发展的强大势能。
百度在AI算力、算法、开放平台、开发者生态等方面建立的领先优势,正转化为百度智能云“云智一体”的差异化竞争力,使之进入强劲增长的快车道。AI Cloud连续三次中国市场份额第一。目前百度智能云在智能制造、智慧金融、智慧城市、智慧能源、智慧医疗等领域均拥有领先的产品、技术和解决方案。智能交通方面,百度 “ACE交通引擎”是全球首个车路行融合的全栈式智能交通解决方案。
作为全球领先的自动驾驶开放平台,百度Apollo代表中国最强自动驾驶实力,被知名研究公司Navigant Research列为全球四大自动驾驶领域领导者之一。自动驾驶技术方面,拥有超过十项中国第一。目前,百度Apollo同时在北京、长沙、美国加州三地进行开放道路无人化测试,在最前沿的无人化测试领域取得了新突破。2020年,百度发布了汽车智能化乐高式解决方案,包含AVP(Apollo Valet Parking)和ANP(Apollo Navigation Pilot)产品。目前,百度与10家中国及全球的汽车制造商签署了战略合作伙伴关系,提供高精地图、自主泊车、领航辅助驾驶等汽车智能化服务。2021年,百度正式组建了一家智能汽车公司“集度”,以加速智能驾驶技术的普及和应用。
小度助手是中国领先的对话式人工智能操作系统,拥有中国市场最繁荣、开放的对话式人工智能生态,2020年12月,小度助手月语音交互次数超过62亿次,小度助手第一方硬件设备月语音交互次数达37亿次。
百度以技术创新为信仰,在创新投入、研发布局、人才引进方面均走在国际前列。2020年,百度核心研发费用占收入比例达21.4%,研发投入强度位于中国大型科技互联网公司前列。百度全球AI专利申请量已超过1万件,其中中国专利9000多件,位列中国第一,并在深度学习技术、智能语音、自然语言处理、自动驾驶、知识图谱、智能推荐等多个领域排名国内第一。
百度一直秉承着“科技为更好”的社会责任理念,坚持运用创新技术,聚焦于解决社会问题,履行企业公民的社会责任,为帮助全球用户创造更加美好的生活而不断努力。百度“AI寻人”项目与民政部进行合作,借助跨年龄人脸识别技术,已帮助12000多名走失者与家人团聚。百度“共益计划”已收到超过300家公益组织机构的入驻申请,帮助200多家在百度上进行了免费推广,涵盖了教育、环保、医疗、扶贫等广阔的社会议题。
百度是一家持续创新的,以“用科技让复杂的世界更简单”为使命的高科技公司。
百度使命:用科技让复杂的世界更简单
mission:Make the complicated world simpler through technology.
百度愿景:成为最懂用户,并能帮助人们成长的全球顶级高科技公司 [4]
vision:To be a top global technology company which best understands users’needs and enables their growth.
百度核心价值观:简单可依赖
百度文化论语
人一定要做自己喜欢且擅长的事情·认准了,就去做;不跟风,不动摇· 专注如一· 保持学习心态· 公司离破产永远只有30天· 每个人都要捡起地上的垃圾· 百度不仅是李彦宏的,更是每一个百度人的· 一定要找最优秀的人才· 给最自由的空间· 允许试错· 证明自己,用结果说话· 让优秀人才脱颖而出· 愿意被挑战· 说话不绕弯子· 对事不对人· 百度没有公司政治· 遇到新事物,先看看别人是怎么干的· 听多数人的意见,和少数人商量,自己做决定· 一个人最重要的能力是判断力· 用流程解决共性问题· 创新求变· 不唯上· 问题驱动· 让数据说话· 高效率执行· 少许诺,多兑现· 把事情做到极致· 用户需求决定一切· 让产品简单,再简单· 迅速迭代,越变越美· 你不是孤军· 打破部门樊篱· 主动分享· 帮助别人,成就自己· 只把最好的成果传递给下一环节· 从可信赖到可依赖
人才理念
招最好的人,给最大的空间,看最后的结果,让优秀人才脱颖而出。
“互联网公司,最有价值的就是人。我们的办公室、服务器会折旧,但一个公司,始终在增值的就是公司的每一位员工。”
“对于一个人才,我们更多注重的是,你能不能够创造,为自身创造价值,给用户带来更好的体验,这是百度所关心的,所看重的。”——李彦宏
财报数据 语音
2015年第四季度财报显示,百度营收为186.99亿元人民币,同比增长33.1%,其中移动营收占比持续上升达到56%;2015年全年百度总营收为663.82亿元人民币,同比增长35.3%,业绩超出华尔街预期。百度股价盘后大涨11.24%,收盘报176美元。 [6]
2016年第四季度及全年未经审计的财务报告。移除去哪儿影响,百度第四季度营收为182.12亿人民币(约合26.23亿美元),与去年同期持平,其中移动营收占比65%;2016年度总营收为705.49亿人民币(约合101.61亿美元),同比增长11.9%。百度2016年第四季度业绩符合华尔街预期。 [7]
2017年四季度,百度营收为236亿元人民币(约合36.2亿美元),同比增长29%,其中移动营收占比持续上升至76%。2017年全年百度总营收为848亿元人民币(约合130.3亿美元),同比增长20%。2017年四季度业绩与全年业绩均超出华尔街预期。移除百度移动游戏与百度外卖影响,百度预计在2018年第一季度,百度的净收入总额将会介于198.6亿元人民币(约合30.5亿美元)到209.7亿元人民币(约合32.2亿美元),同比增长29%至36%。这一指标同样超出华尔街预期。 [8]
2018年第四季度及全年未经审计的财务报告。数据显示,本季度百度营收272亿元人民币(约合39.6亿美元),同比增长22%,超出华尔街预期;净利润21亿元(约合3.03亿美元)。2018年度总营收为1,023亿人民币(约合148.8亿美元)。 [9]
2019年第四季度及全年未经审计的财务报告。第四季度百度实现营收289亿元人民币,归属百度的净利润达到92亿元人民币 (非美国通用会计准则),同比增长95%。2019年年营收为1074亿元人民币。 [10]
2020年第一季度未经审计的财务报告。数据显示:第一季度百度营收225亿元,净利润(Non-GAAP)31亿元,同比增长219%。 [11]
产品手册 语音
百度产品
百度一下,生活更好
网页搜索:全球最大的中文搜索引擎
作为全球最大的中文搜索引擎公司,百度一直致力于让网民更平等的获取信息,找到所求。百度是用户获取信息的最主要入口,随着移动互联网的发展,百度网页搜索完成了由PC向移动的转型,由连接人与信息扩展到连接人与服务,用户可以在PC、Pad、手机上访问百度主页,通过文字、语音、图像多种交互方式瞬间找到所需要的信息和服务。
百度(百度App):7亿用户首选的搜索和资讯客户端
百度App是一款有7亿用户在使用的手机“搜索+资讯”客户端,结合了搜索功能和智能信息推荐,依托百度网页、百度图片、百度新闻、百度知道、百度百科、百度地图、百度音乐、百度视频等专业垂直频道“有事搜一搜,没事看一看”,为用户提供更多丰富和实用的功能与服务。
百度地图:新一代人工智能地图
百度地图是为用户提供包括智能路线规划、智能导航、实时路况等出行相关服务的平台。作为“新一代人工智能地图”,百度地图实现了语音交互覆盖用户操控全流程,上线了AR步导 、AR导游等实用功能。
百度,连接人与服务
百度糯米:省钱更省心!
百度糯米汇集美食、电影、酒店、休闲娱乐、旅游、到家服务等众多生活服务的相关产品,并先后接入百度外卖、去哪儿网资源,一站式解决吃喝玩乐相关的所有问题,逐渐完善了百度糯米O2O的生态布局。
百度,每个人的舞台
百度贴吧:上贴吧,找组织
百度贴吧,全球最大的中文社区。贴吧是一种基于关键词的主题交流社区,它与搜索紧密结合,准确把握用户需求,搭建别具特色的“兴趣主题“互动平台。贴吧目录涵盖社会、地区、生活、教育、娱乐明星、游戏、体育、企业等方方面面,目前是全球最大的中文交流平台。
百度百科:全球最大的中文百科全书
百度百科是一个内容开放、自由的网络百科全书平台, 旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚上亿用户的头脑智慧,积极进行交流和分享。
百度知道:总有一个人知道你问题的答案
百度知道,是百度旗下的互动式知识问答分享平台,也是全球最大的中文问答平台。广大网友根据实际需求在百度知道上进行提问,便立即获得数亿网友的在线解答。
百度文库:让每个人平等的提升自我
百度文库是百度发布的供网友在线分享文档的知识平台,是最大的互联网学习开放平台。百度文库用户可以在此平台上,上传, 在线阅读与下载文档。
百度健康:你身边的健康管家
百度健康是百度移动生态体系中最重要的垂类之一,是百度自身孵化和打造的一站式健康管理平台,联合顶级医疗资源,构建健康知识服务、在线医疗咨询服务、健康商城服务、慢病管理服务及互联网医院服务五大体系,让用户便捷地获取可靠的健康知识和优质的健康服务。截至2021年8月,百度健康已收录权威科普内容5亿条,吸引超过30万专业医生入驻,每日提供在线医疗咨询服务超过200万次。
好看视频:分享美好,看见世界
好看视频平台拥有独家短视频内容源,分类覆盖搞笑、音乐、影视、娱乐、游戏、生活、小品、军事、汽车、新闻等全方位优质视频内容,是一个专业短视频聚合平台。数十万视频创作者通过好看视频给7亿百度生态用户提供全方位的视频内容,每天的观看次数高达数十亿次。
百度,互联网生活助手
小度:无处不在的人工智能个人助手
百度是中国对话式人工智能的开创者,从2015年百度世界发布‘度秘’,到2017年发布DuerOS并与硬件合作伙伴广泛合作,到2018年发布一系列小度智能硬件产品,百度旗下软硬件一体化的人工智能生态已经形成。小度目前涵盖小度系列智能硬件,小度助手软件服务(内置于第三方合作伙伴硬件及手机APP中),以及小度对话式人工智能操作系统。
小度车载OS
小度车载OS:面向量产的完整人工智能车联网系统解决方案,具备完整、多模、开放三大特点,包含大屏智能车机、液晶仪表盘、流媒体智能后视镜、小度车载机器人及AR-HUD智能挡风玻璃五大组件,为用户提供极佳的车内交互体验。
百度Apollo企业版
百度Apollo企业版(Apollo Enterprise)为汽车企业,供应商和出行服务商加速实现智能化、网联化、共享化,提供量产、定制、安全的自动驾驶和车联网解决方案。包含五大全面解决方案:小度车载OS、高速场景自动驾驶 、自主泊车(Valet Parking)、小巴自动驾驶、地图数据服务平台。
百度车联网
百度车联网是Apollo的先行军,是百度AI赋能车场景的建设者和核心出口,也是百度人工智能战略的核心重要组成部分。在业界有领先的语音语义、多模交互、驾驶员监测、车载信息安全等核心能力,提供全方位的车联网生态系统及服务,加速人工智能车场景领域的产品落地。
智能小程序:智能连接人与信息、人与服务、人与万物的开放生态
智能小程序是基于百度App的一种全新应用形态,可实现一次开发多端运行,既可以在百度系APP,也可以在其他合作APP上运行,帮助开发者更广泛地获取流量。无需安装,即点即用,体验堪比App,用户能更快捷地获取到想要的服务和信息。
百度手机助手:最具人气的应用商店
百度手机助手是Android手机的权威资源平台,分发市场份额连续十个季度排名市场第一,拥有最全最好的应用、游戏、壁纸资源,帮助用户在海量资源中精准搜索、高速下载、轻松管理,万千汇聚,一触即得。
百度网盘:让美好永远相伴
百度网盘是百度推出的一项云存储服务,不仅为用户提供免费的存储空间,还可以将照片、视频、文档、通讯录等数据在移动设备和PC客户端之间跨平台同步和管理;百度网盘还支持添加好友、创建群组,并可跨终端随时随地进行分享。
百度智能云
百度旗下面向企业及开发者的智能云计算服务平台,作为百度AI战略的载体和源动力,百度智能云是百度大脑的云化,承载了百度大脑150+AI能力,并且为Apollo和DuerOS提供技术支撑。
百度移动端输入法:更懂你的表达
9亿用户在用的手机输入法,多次荣获「年度优秀应用」「最受欢迎输入法」等奖项。超大词库,智能联想出词,支持多种输入方式,打字流畅;语音输入高速、精准,支持中英自由说、方言自由说。提供千款个性化皮肤、emoji、颜文字,热门流行表情图每日更新,帮助年轻用户个性化的表达。
百度浏览器:做个有趣的人
百度手机浏览器是百度自主研发,为手机上网用户量身定制的一款浏览类产品,于2011 年6月15日正式上线公测,极速内核强劲动力,提供超强智能搜索,整合百度优质服务。
Hao123:上网从这里开始
Hao123创立于1999年,2004年被百度收购。作为百度旗下核心产品,hao123及时收录包括音乐、视频、小说、游戏等热门分类的网站,与搜索完美结合,为中国互联网用户提供最简单便捷的网上导航服务,重新定义了上网导航的概念。
百度安全:有AI更安全
百度安全是百度公司旗下,以AI为核心、大数据为基础打造的领先安全品牌,是百度在互联网安全18年最佳实践的总结与提炼。业务由AI安全、移动安全、云安全、数据安全、业务安全五大矩阵构成,全面覆盖百度各种复杂业务场景,同时向个人用户和商业伙伴输出领先的安全产品与行业一体化解决方案。
百度商业服务,新生产力引擎
百度商业服务整合了搜索、资讯、视频、线下场景屏、联盟流量等资源,形成全场景全用户覆盖的媒体矩阵,并依托AI技术和大数据能力提供消费者洞察、自动化创意、商家小程序等一整套智能营销解决方案。为企业提供品牌建设、效果推广及消费者运营的全方位商业服务。
2019年数字营销将进入以AI智能营销为核心的4.0时代,百度商业服务将实现新连接、新场景、新流量、新品牌的"四新合力"升级,并全面应用于搜索推广、信息流广告、品牌营销、商品推广等核心商业产品。
全新搜索推广:从流量运营到消费者运营,在意图识别、流量、创意、广告匹配等全链路应用AI能力,打通线上线下场景实现用户场景全覆盖,并继续为所有的大客户和中小本地客户提供营销和消费者运营能力。
信息流广告:与搜索推广形成“搜索+推荐”双引擎,全面应用AI技术的同时,整合百度APP、好看视频、全民小视频等原生流量及优质的联盟流量资源,支持图片、视频、AR等多种形式的广告创意,并提供便捷易用的营销工具,为企业提供一站式的信息流营销服务。
品牌营销:聚合线上线下资源,为商业伙伴的品牌成长提供平台支撑,用大数据赋能品牌营销,用AI实现心智营销,用百度全意识整合营销数字平台Omni Marketing帮助品牌在品牌建设、品牌沟通、品牌转化中实现品效协同,精准有效地发现目标消费者,通过恰当媒体与消费者沟通,最终实现消费者的有效转化。
闪投商品推广(DPA:Dynamic Product Ads):AI驱动的千人千面的精准营销,智能连接人与商品,基于大数据刻画人群画像并进行意图的动态识别,基于结构化的商品数据进行商品与意图的匹配并实现广告创意的智能拼接,从而实现在正确的时间和场景向正确的人正确地展示正确的商品信息。