# 这是一个类,继承了 `BasicOpts` 类
class VisualMapOpts(BasicOpts):
# 初始化函数,定义了一些参数及其默认值。其中包括 range_color、range_size、和 range_opacity 等参数
def __init__(
self,
is_show: bool = True, # 是否显示视觉映射组件,默认为 True
type_: str = "color", # 视觉映射的类型,可选值为 "color" 或 "size",默认为 "color"
min_: Numeric = 0, # 传入数据的最小值,默认为 0
max_: Numeric = 100, # 传入数据的最大值,默认为 100
range_text: Optional[Sequence] = None, # 区间文字,可以是列表或元组,例如 ["low", "high"],默认为空
range_color: Optional[Sequence[str]] = None, # 区间颜色,可以是列表或元组,例如 ["#50a3ba", "#eac763", "#d94e5d"],默认为空
range_size: Optional[Sequence[int]] = None, # 区间大小,可以是列表或元组,例如 [20, 50],默认为空
range_opacity: Union[Numeric, Sequence[Numeric]] = None, # 区间透明度,可以是数字或列表或元组,例如 [0.3, 1],默认为空
orient: str = "vertical", # 组件方向,可选值为 "horizontal" 或 "vertical",默认为 "vertical"
pos_left: Optional[str] = None, # 组件的左侧距离,例如 "20%",默认为空
pos_right: Optional[str] = None, # 组件的右侧距离,例如 "20%",默认为空
pos_top: Optional[str] = None, # 组件的顶部距离,例如 "20%",默认为空
pos_bottom: Optional[str] = None, # 组件的底部距离,例如 "20%",默认为空
padding: Union[int, Sequence[int]] = 5, # 内部间距,默认为 5
split_number: int = 5, # 分割段数,默认为 5
series_index: Union[Numeric, Sequence, None] = None, # 控制只对某些系列进行映射,默认为空
is_hover_link: bool = True, # 鼠标悬停时是否启用联动高亮效果,默认为 True
dimension: Optional[Numeric] = None, # 指定 data 中哪个维度的数据用来映射,例如 0 或 "x",默认为空
is_calculable: bool = True, # 是否显示拖拽用的手柄(手柄可以用来调整选中范围),默认为 True
is_piecewise: bool = False, # 是否分段显示,默认为 False
is_inverse: bool = False, # 是否反转组件,默认为 False
precision: Optional[int] = None, # 数据的小数精度,例如 0 或 1,默认为空
pieces: Optional[Sequence] = None, # 分段信息,可以是列表或元组(仅当 is_piecewise 为 True 时有效),例如 [(0, 30), (30, 60), (60, 90)],默认为空
out_of_range: Optional[Sequence] = None, # 未在映射范围内的数据颜色,例如 "#999",默认为空
item_width: int = 0, # 分段控件单元的宽度(仅当 is_piecewise 为 True 且未指定宽度时有效),默认为 0
item_height: int = 0, # 分段控件单元的高度(仅当 is_piecewise 为 True 且未指定高度时有效),默认为 0
background_color: Optional[str] = None, # 组件背景颜色,默认为空
border_color: Optional[str] = None, # 组件边框颜色,默认为空
border_width: int = 0, # 组件边框宽度,默认为 0
textstyle_opts: Union[TextStyleOpts, dict, None] = None, # 文本样式设置,可为 TextStyleOpts 对象、字典或空值,默认为空
):
# 初始化内部区间操作,并根据视觉映射类型设置不同的区间操作
_inrange_op: dict = {}
if type_ == "color":
range_color = range_color or ["#50a3ba", "#eac763", "#d94e5d"]
_inrange_op.update(color=range_color)
elif type_ == "size":
range_size = range_size or [20, 50]
_inrange_op.update(symbolSize=range_size)
if range_opacity is not None:
_inrange_op.update(opacity=range_opacity)
# 根据是否分段显示设置视觉映射类型
_visual_typ = "piecewise" if is_piecewise else "continuous"
# 根据是否分段显示及宽高未指定设置默认宽高
if is_piecewise and item_width == 0 and item_height == 0:
item_width, item_height = 20, 14
elif item_width == 0 and item_height == 0:
item_width, item_height = 20, 140
# 存储参数到 opts 字典中
self.opts: dict = {
"show": is_show,
"type": _visual_typ,
"min": min_,
"max": max_,
"text": range_text,
"textStyle": textstyle_opts,
"inRange": _inrange_op,
"calculable": is_calculable,
"inverse": is_inverse,
"precision": precision,
"splitNumber": split_number,
"dimension": dimension,
"seriesIndex": series_index,
"hoverLink": is_hover_link,
"orient": orient,
"left": pos_left,
"top": pos_top,
"bottom": pos_bottom,
"right": pos_right,
"padding": padding,
"showLabel": True,
"itemWidth": item_width,
"itemHeight": item_height,
"outOfRange": out_of_range,
"backgroundColor": background_color,
"borderColor": border_color,
"borderWidth": border_width,
}
# 如果分段显示,则增加 pieces 参数
if is_piecewise:
self.opts.update(pieces=pieces)