Pyecharts树状图:树图
文章目录
前言
本文主要是展示了Pyecharts树状图
的基本树图的简单应用和基本案例。
一. Tree树图
1.1 add 函数
这里主要是名称,数据,布局类型,标记图形,标签配置项。
# func pyecharts.charts.Tree.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项
data: Sequence[Union[opts.TreeItem, dict]],
# 树图的布局,有 正交 和 径向 两种。这里的 正交布局 就是我们通常所说的水平 和 垂直 方向,
# 对应的参数取值为 'orthogonal' 。而 径向布局 是指以根节点为圆心,每一层节点为环,
# 一层层向外发散绘制而成的布局,对应的参数取值为 'radial'
layout: str = "orthogonal",
# 标记的图形。ECharts 提供的标记类型包括 'emptyCircle', 'circle', 'rect', 'roundRect',
# 'triangle', 'diamond', 'pin', 'arrow', 'none'。
symbol: types.JSFunc = "emptyCircle",
# 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
# 例如 [20, 10] 表示标记宽为 20,高为 10。
symbol_size: types.Union[types.JSFunc, types.Numeric, types.Sequence] = 7,
# 树图中 正交布局 的方向,也就是说只有在 layout = 'orthogonal' 的时候,
# 该配置项才生效。对应有 水平 方向的 从左到右,从右到左;以及垂直方向的从上到下,
# 从下到上。取值分别为 'LR' , 'RL', 'TB', 'BT'。注意,之前的配置项值 'horizontal'
# 等同于 'LR', 'vertical' 等同于 'TB'。
orient: str = "LR",
# tree组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# tree 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# tree 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Optional[str] = None,
# tree 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Optional[str] = None,
# 折叠节点间隔,当节点过多时可以解决节点显示过杂间隔。
collapse_interval: Numeric = 0,
# 树图在 正交布局 下,边的形状。分别有曲线和折线两种,对应的取值是 curve 和 polyline.
# 注意:该配置项只在 正交布局 下有效,在经向布局下的开发环境中会报错。
edge_shape: str = "curve",
# 正交布局下当边的形状是折线时,子树中折线段分叉的位置。
# 这里的位置指的是分叉点与子树父节点的距离占整个子树高度的百分比。
# 默认取值是 '50%',可以是 ['0', '100%'] 之间。
# 注意:该配置项只有在 edgeShape = 'curve' 时才有效。
edge_fork_position: str = "50%",
# 是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移。
# 可以设置成 'scale' 或者 'move'。设置成 true 为都开启
is_roam: bool = False,
# 子树折叠和展开的交互,默认打开 。由于绘图区域是有限的,而通常一个树图的节点可能会比较多,
# 这样就会出现节点之间相互遮盖的问题。为了避免这一问题,可以将暂时无关的子树折叠收起,
# 等到需要时再将其展开。如上面径向布局树图示例,节点中心用蓝色填充的就是折叠收起的子树,可以点击将其展开。
# 注意:如果配置自定义的图片作为节点的标记,是无法通过填充色来区分当前节点是否有折叠的子树的。
# 而目前暂不支持,上传两张图片分别表示节点折叠和展开两种状态。所以,如果想明确地显示节点的两种状态,
# 建议使用 ECharts 常规的标记类型,如 'emptyCircle' 等。
is_expand_and_collapse: bool = True,
# 树图初始展开的层级(深度)。根节点是第 0 层,然后是第 1 层、第 2 层,... ,
# 直到叶子节点。该配置项主要和 折叠展开 交互一起使用,目的还是为了防止一次展示过多节点,
# 节点之间发生遮盖。如果设置为 -1 或者 null 或者 undefined,所有节点都将展开。
initial_tree_depth: Optional[Numeric] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 叶子节点标签配置项,参考 `series_options.LabelOpts`
leaves_label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
)
1.2 TreeItem
树的配置项还是很重要的,基本一些好看点的图都需要进行重新设置。
# class pyecharts.options.TreeItem
class TreeItem(
# 树节点的名称,用来标识每一个节点。
name: Optional[str] = None,
# 节点的值,在 tooltip 中显示。
value: Optional[Numeric] = None,
# 该节点的样式,参考 `series_options.LabelOpts`
label_opts: Optional[LabelOpts] = None,
# 子节点,嵌套定义。
children: Optional[Sequence] = None,
)
二. 例子
2.1 左右方向
from pyecharts import options as opts
from pyecharts.charts import Tree
data = [
{
"children": [
{"name": "B"},
{
"children": [{"children": [{"name": "I"}], "name": "E"}, {"name": "F"}],
"name": "C",
},
{
"children": [
{"children": [{"name": "J"}, {"name": "K"}], "name": "G"},
{"name": "H"},
],
"name": "D",
},
],
"name": "A",
}
]
c = (
Tree()
.add("", data)
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-基本示例"))
.render("tree_base.html")
)
2.2 下上方向
import json
from pyecharts import options as opts
from pyecharts.charts import Tree
with open("flare.json", "r", encoding="utf-8") as f:
j = json.load(f)
c = (
Tree()
.add(
"",
[j],
collapse_interval=2,
orient="BT",
label_opts=opts.LabelOpts(
position="top",
horizontal_align="right",
vertical_align="middle",
rotate=-90,
),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-下上方向"))
.render("tree_bottom_top.html")
)
2.3 右左方向
import json
from pyecharts import options as opts
from pyecharts.charts import Tree
with open("flare.json", "r", encoding="utf-8") as f:
j = json.load(f)
c = (
Tree()
.add("", [j], collapse_interval=2, orient="RL")
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-右左方向"))
.render("tree_right_left.html")
)
2.4 上下方向
import json
from pyecharts import options as opts
from pyecharts.charts import Tree
with open("flare.json", "r", encoding="utf-8") as f:
j = json.load(f)
c = (
Tree()
.add(
"",
[j],
collapse_interval=2,
orient="TB",
label_opts=opts.LabelOpts(
position="top",
horizontal_align="right",
vertical_align="middle",
rotate=-90,
),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-上下方向"))
.render("tree_top_bottom.html")
)
2.5 环状树图
import asyncio
from aiohttp import TCPConnector, ClientSession
import pyecharts.options as opts
from pyecharts.charts import Tree
async def get_json_data(url: str) -> dict:
async with ClientSession(connector=TCPConnector(ssl=False)) as session:
async with session.get(url=url) as response:
return await response.json()
# 获取官方的数据
data = asyncio.run(
get_json_data(url="https://echarts.apache.org/examples/data/asset/data/flare.json")
)
(
Tree(init_opts=opts.InitOpts(width="1400px", height="800px"))
.add(
series_name="",
data=[data],
pos_top="18%",
pos_bottom="14%",
layout="radial",
symbol="emptyCircle",
symbol_size=7,
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove")
)
.render("radial_tree.html")
)
2.6 布局树图
import json
from pyecharts import options as opts
from pyecharts.charts import Tree
with open("flare.json", "r", encoding="utf-8") as f:
j = json.load(f)
c = (
Tree()
.add("", [j], collapse_interval=2, layout="radial")
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-Layout"))
.render("tree_layout.html")
)
这里我们可以将前面四种图分为一类,在详细一点,就是上下方向的为一组,左右方向为一组,环形为一组,每一组两个图。然后我们讲他们两两进行对比,发现,其实主要是在前面四张图的
add函数
中的orient参数
的设定,以及label_opts
的有效设定,使得图形与平时常见的有一些不同。对于环状图,就是add函数
里的layout参数
的设定不同。
总结
本文主要是简单展示了Pyecharts树图
的简单应用,后面用六张图为案例进行简单的做一个熟练。