文章目录
- 74.Tree:树图
- 74.1 Tree - Tree_base
- 74.2 Tree - Tree_bottom_top
- 74.3 Tree - Tree_right_left
- 74.4 Tree - Tree_left_right
- 74.5 Tree - Tree_top_bottom
- ?74.6 Tree - Radial_tree
- 74.7 Tree - Tree_layout
- 75. TreeMap:矩形树图
- 75.1 Treemap - Echarts_option_query
- 75.2 Treemap - Treemap_levels
- 75.3 Treemap - Treemap_base
- 75.4 Season实践:Treemap - Treemap_base
- 76.Geo:地理坐标系
- ?76.1 Geo - Geo_chart_countries_js
- 76.2 Geo - Geo_lines_background
- 76.3 Geo - Geo_visualmap_piecewise
- 76.4 Geo - Geo_lines
- 76.5 Geo - Geo_guangdong
- 76.6 Geo - Geo_heatmap
- 76.7 Geo - Geo_effectscatter
- 76.7 Geo - Geo_base
- ?76.8 Geo - Geo_echart_china_js
- 77.Map:地图
- 77.1 Map - Map_base
- 77.2 Map - Map_guangdong
- 77.3 Map - Map_visualmap_piecewise
- 77.4 Map - Map_world
- ?77.5 Map - China_gdp_from_1993_to_2018
- ?77.6 Map - China_gdp_from_1980
- ?77.7 Map - Population_density_of_hongkong_v2
- ?77.8 Map - Population_density_of_hongkong
- 77.9 Map - Map_china_citites
- 77.10 Map - Map_without_label
- 77.11 Map - Map_visualmap
- 78.BMap:百度地图(难)
- 78.1 Bmap - Air_quality_baidu_map
- 78.2 Bmap - Bmap_beijing_bus_routines
- 78.3 Bmap - Bmap_base
- 78.4 Bmap - Bmap_heatmap
- 78.5 Bmap - Bmap_custom
- 78.6 Bmap - Hiking_trail_in_hangzhou
- 79.Bar3D:3D柱状图
- 79.1 Bar3d - Bar3d_punch_card
- 79.2 Bar3d - Bar3d_base
- 79.3 Bar3d - Bar3d_stack
- 80.Line3D:3D折线图
- 80.1 Line3d - Line3d_autorotate
- 80.2 Line3d - Line3d_rectangular_projection
- 81.Scatter3D:3D散点图
- 81.1 Scatter3d - Scatter3d
- 82.Surface3D:3D曲面图
- 82.1 Surface3d - Surface_wave
- 83.Map3D - 三维地图
- 83.1 Map3d - Map3d_with_lines3d
- 83.2 Map3d - Map3d_with_scatter3d
- 83.3 Map3d - Map3d_with_bar3d
- 83.4 Map3d - Map3d_china_base
- 84.Component 通用配置项
- 85.Table:表格
- 85.1 Table - Table_base
- 85.2 Season实践:Table之CSS设定
- 86.Image:图像
- 86.1 Image - Image_base
74.Tree:树图
- class pyecharts.charts.Tree
class Tree(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- 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,
)
- 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,
)
74.1 Tree - Tree_base
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")
)
74.2 Tree - Tree_bottom_top
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")
)
74.3 Tree - Tree_right_left
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")
)
74.4 Tree - Tree_left_right
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)
.set_global_opts(title_opts=opts.TitleOpts(title="Tree-左右方向"))
.render("tree_left_right.html")
)
74.5 Tree - Tree_top_bottom
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")
)
?74.6 Tree - Radial_tree
import asyncio
from aiohttp import TCPConnector, ClientSession
import pyecharts.options as opts
from pyecharts.charts import Tree
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=tree-radial
目前无法实现的功能:
1、
"""
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")
)
74.7 Tree - Tree_layout
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")
)
75. TreeMap:矩形树图
- class pyecharts.charts.TreeMap
链接
class TreeMap(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- class pyecharts.options.TreeMapBreadcrumbOpts
class TreeMapBreadcrumbOpts(
# 是否显示面包屑。
is_show: bool = True,
# 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Union[str, Numeric] = "center",
# 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_right: Union[str, Numeric] = "auto",
# 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Union[str, Numeric] = "auto",
# 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_bottom: Union[str, Numeric] = 0,
# 面包屑的高度。
height: Numeric = 22,
# 当面包屑没有内容时候,设个最小宽度。
empty_item_width: Numeric = 25,
# 图形样式。参考 `global_options.ItemStyleOpts`
item_opts: ItemStyleOpts = ItemStyleOpts(),
)
- class pyecharts.options.TreeMapItemStyleOpts
class TreeMapItemStyleOpts(
# 矩形的颜色。
color: Optional[str] = None,
# 矩形颜色的透明度。取值范围是 0 ~ 1 之间的浮点数。
color_alpha: Union[Numeric, Sequence] = None,
# 矩形颜色的饱和度。取值范围是 0 ~ 1 之间的浮点数。
color_saturation: Union[Numeric, Sequence] = None,
# 矩形边框 和 矩形间隔(gap)的颜色。
border_color: Optional[str] = None,
# 矩形边框线宽。为 0 时无边框。而矩形的内部子矩形(子节点)的间隔距离是由 gapWidth 指定的。
border_width: Numeric = 0,
# 矩形边框的颜色的饱和度。取值范围是 0 ~ 1 之间的浮点数。
border_color_saturation: Union[Numeric, Sequence] = None,
# 矩形内部子矩形(子节点)的间隔距离。
gap_width: Numeric = 0,
# 每个矩形的描边颜色。
stroke_color: Optional[str] = None,
# 每个矩形的描边宽度。
stroke_width: Optional[Numeric] = None,
)
- class pyecharts.options.TreeMapLevelsOpts
class TreeMapLevelsOpts(
# 矩形颜色的透明度。取值范围是 0 ~ 1 之间的浮点数。
color_alpha: Union[Numeric, Sequence] = None,
# 矩形颜色的饱和度。取值范围是 0 ~ 1 之间的浮点数。
color_saturation: Union[Numeric, Sequence] = None,
# 表示同一层级节点,在颜色列表中(参见 color 属性)选择时,按照什么来选择。可选值:
# 'value' 将节点的值(即 series-treemap.data.value)映射到颜色列表中。这样得到的颜色,反应了节点值的大小。
# 'index' 将节点的 index(序号)映射到颜色列表中。即同一层级中,第一个节点取颜色列表中第一个颜色,第二个节点取第二个。
# 这样得到的颜色,便于区分相邻节点。
# 'id' 将节点的 id 映射到颜色列表中。
# id 是用户指定的,这样能够使得,在 treemap 通过 setOption 变化数值时,同一 id 映射到同一颜色,保持一致性。
color_mapping_by: str = "index",
# 矩形树图的 Item 配置,参考 `class pyecharts.options.TreeMapItemStyleOpts`
treemap_itemstyle_opts: Union[TreeMapItemStyleOpts, dict, None] = None,
# 每个矩形中,文本标签的样式,参考 `series_options.LabelOpts`
label_opts: Union[LabelOpts, dict, None] = None,
# 用于显示矩形的父节点的标签。参考 `series_options.LabelOpts`
upper_label_opts: Union[LabelOpts, dict, None] = None,
)
- func pyecharts.charts.TreeMap.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项
data: Sequence[Union[opts.TreeItem, dict]],
# 是否选中图例。
is_selected: bool = True,
# leaf_depth 表示『展示几层』,层次更深的节点则被隐藏起来。
# 设置了 leafDepth 后,下钻(drill down)功能开启。drill down 功能即点击后才展示子层级。
# 例如,leafDepth 设置为 1,表示展示一层节点。
leaf_depth: Optional[Numeric] = None,
# treemap 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# treemap 组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right: Optional[str] = None,
# treemap 组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# treemap 组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom: Optional[str] = None,
# treemap 组件的宽度。
width: types.Union[str, types.Numeric] = "80%",
# treemap 组件的高度。
height: types.Union[str, types.Numeric] = "80%",
# 期望矩形长宽比率。布局计算时会尽量向这个比率靠近。
# 默认为黄金比:0.5 * (1 + Math.sqrt(5))。
square_ratio: types.Optional[types.JSFunc] = None,
# 当节点可以下钻时的提示符。只能是字符。
drilldown_icon: str = "▶",
# 是否开启拖拽漫游(移动和缩放)。可取值有:
# false:关闭。
# 'scale' 或 'zoom':只能够缩放。
# 'move' 或 'pan':只能够平移。
# true:缩放和平移均可。
roam: types.Union[bool, str] = True,
# 点击节点后的行为。可取值为
# false:节点点击无反应。
# 'zoomToNode':点击节点后缩放到节点。
# 'link':如果节点数据中有 link 点击节点后会进行超链接跳转。
node_click: types.Union[bool, str] = "zoomToNode",
# 点击某个节点,会自动放大那个节点到合适的比例(节点占可视区域的面积比例),这个配置项就是这个比例。
zoom_to_node_ratio: types.Numeric = 0.32 * 0.32,
# treemap 中采用『三级配置』:
#『每个节点』->『每个层级』->『每个系列』。
# 即我们可以对每个节点进行配置,也可以对树的每个层级进行配置,也可以 series 上设置全局配置。节点上的设置,优先级最高。
# 最常用的是『每个层级进行配置』,levels 配置项就是每个层级的配置
levels: types.TreeMapLevel = None,
# 当前层级的最小 value 值。如果不设置则自动统计。
visual_min: Optional[Numeric] = None,
# 当前层级的最大 value 值。如果不设置则自动统计。
visual_max: Optional[Numeric] = None,
# 本系列默认的 颜色透明度 选取范围。数值范围 0 ~ 1。
color_alpha: types.Union[types.Numeric, types.Sequence] = None,
# 本系列默认的 颜色饱和度 选取范围。数值范围 0 ~ 1。
color_saturation: types.Union[types.Numeric, types.Sequence] = None,
# 表示同一层级节点,在颜色列表中(参见 color 属性)选择时,按照什么来选择。可选值:
# 'value' 将节点的值(即 series-treemap.data.value)映射到颜色列表中。这样得到的颜色,反应了节点值的大小。
# 'index' 将节点的 index(序号)映射到颜色列表中。即同一层级中,第一个节点取颜色列表中第一个颜色,第二个节点取第二个。
# 这样得到的颜色,便于区分相邻节点。
# 'id' 将节点的 id 映射到颜色列表中。
# id 是用户指定的,这样能够使得,在 treemap 通过 setOption 变化数值时,同一 id 映射到同一颜色,保持一致性。
color_mapping_by: str = "index",
# 如果某个节点的矩形的面积,小于这个数值(单位:px平方),这个节点就不显示。
# 如果不加这个限制,很小的节点会影响显示效果。
# 关于视觉设置,详见 series-treemap.levels。
visible_min: types.Numeric = 10,
# 如果某个节点的矩形面积,小于这个数值(单位:px平方),则不显示这个节点的子节点。
# 这能够在矩形面积不足够大时候,隐藏节点的细节。当用户用鼠标缩放节点时,如果面积大于此阈值,又会显示子节点。
# 关于视觉设置,详见 series-treemap.levels。
children_visible_min: types.Optional[types.Numeric] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(position="inside"),
# 父级标签配置项,参考 `series_options.LabelOpts`
upper_label_opts: types.Label = opts.LabelOpts(position="inside"),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图形样式配置,参考 `global_options.ItemStyleOpts`
itemstyle_opts: types.ItemStyle = None,
# 面包屑控件配置,参考 `TreeMapBreadcrumbOpts`
breadcrumb_opts: types.TreeMapBreadcrumb = None,
)
75.1 Treemap - Echarts_option_query
import re
import asyncio
from aiohttp import TCPConnector, ClientSession
import pyecharts.options as opts
from pyecharts.charts import TreeMap
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=treemap-drill-down
目前无法实现的功能:
1、层级的样式配置
"""
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/"
"ec-option-doc-statistics-201604.json"
)
)
tree_map_data: dict = {"children": []}
def convert(source, target, base_path: str):
for key in source:
if base_path != "":
path = base_path + "." + key
else:
path = key
if re.match(r"/^\$/", key):
pass
else:
child = {"name": path, "children": []}
target["children"].append(child)
if isinstance(source[key], dict):
convert(source[key], child, path)
else:
target["value"] = source["$count"]
convert(source=data, target=tree_map_data, base_path="")
(
TreeMap(init_opts=opts.InitOpts(width="1280px", height="720px"))
.add(
series_name="option",
data=tree_map_data["children"],
visual_min=300,
leaf_depth=1,
# 标签居中为 position = "inside"
label_opts=opts.LabelOpts(position="inside"),
)
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
title_opts=opts.TitleOpts(
title="Echarts 配置项查询分布", subtitle="2016/04", pos_left="leafDepth"
),
)
.render("echarts_option_query.html")
)
75.2 Treemap - Treemap_levels
import json
from pyecharts import options as opts
from pyecharts.charts import TreeMap
with open("treemap.json", "r", encoding="utf-8") as f:
data = json.load(f)
c = (
TreeMap()
.add(
series_name="演示数据",
data=data,
levels=[
opts.TreeMapLevelsOpts(
treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(
border_color="#555", border_width=4, gap_width=4
)
),
opts.TreeMapLevelsOpts(
color_saturation=[0.3, 0.6],
treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(
border_color_saturation=0.7, gap_width=2, border_width=2
),
),
opts.TreeMapLevelsOpts(
color_saturation=[0.3, 0.5],
treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(
border_color_saturation=0.6, gap_width=1
),
),
opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.5]),
],
)
.set_global_opts(title_opts=opts.TitleOpts(title="TreeMap-Levels-配置"))
.render("treemap_levels.html")
)
75.3 Treemap - Treemap_base
from pyecharts import options as opts
from pyecharts.charts import TreeMap
data = [
{"value": 40, "name": "我是A"},
{
"value": 180,
"name": "我是B",
"children": [
{
"value": 76,
"name": "我是B.children",
"children": [
{"value": 12, "name": "我是B.children.a"},
{"value": 28, "name": "我是B.children.b"},
{"value": 20, "name": "我是B.children.c"},
{"value": 16, "name": "我是B.children.d"},
],
}
],
},
]
c = (
TreeMap()
.add("演示数据", data)
.set_global_opts(title_opts=opts.TitleOpts(title="TreeMap-基本示例"))
.render("treemap_base.html")
)
75.4 Season实践:Treemap - Treemap_base
我整理了一下前几个Treemap图。
def Treemap_base_2():
data = [
{"value": 40, "name": "我是A"},
{
"value": 180,
"name": "我是B",
"children": [
{
"value": 76,
"name": "我是B.children",
"children": [
{"value": 12, "name": "我是B.children.a"},
{"value": 28, "name": "我是B.children.b"},
{"value": 20, "name": "我是B.children.c"},
{"value": 16, "name": "我是B.children.d"},
],
}
],
},
{"value": 50, "name": "我是C"},
]
c = (
TreeMap()
.add(
series_name="我的数据",
data=data,
leaf_depth=1,
drilldown_icon="▶",
label_opts=opts.LabelOpts(is_show=True,position='inside',formatter="{b}-{c}")
)
.set_global_opts(title_opts=opts.TitleOpts(title="TreeMap-基本示例"))
#.render("treemap_base.html")
)
return c
76.Geo:地理坐标系
- class pyecharts.charts.Geo
class Geo(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
# 是否忽略不存在的坐标,默认值为 False,即不忽略
is_ignore_nonexistent_coord: bool = False
)
- func pyecharts.charts.Geo.add_schema
def add_schema(
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 是否开启鼠标缩放和平移漫游。
is_roam: bool = True,
# 当前视角的缩放比例。默认为 1
zoom: Optional[Numeric] = None,
# 当前视角的中心点,用经纬度表示。例如:center: [115.97, 29.71]
center: Optional[Sequence] = None,
# 参数用于 scale 地图的长宽比。
aspect_scale: types.Numeric = 0.75,
# 二维数组,定义定位的左上角以及右下角分别所对应的经纬度。
bounding_coords: types.Optional[types.Sequence[types.Numeric]] = None,
# 最小的缩放值。
min_scale_limit: types.Optional[types.Numeric] = None,
# 最大的缩放值。
max_scale_limit: types.Optional[types.Numeric] = None,
# 默认是 'name',针对 GeoJSON 要素的自定义属性名称,作为主键用于关联数据点和 GeoJSON 地理要素。
name_property: str = "name",
# 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串。
# 字符串取值可选'single'表示单选,或者'multiple'表示多选。
selected_mode: types.Union[bool, str] = False,
# pyecharts 暂时没有提供 left/top/right/bottom 的配置
# layoutCenter 和 layoutSize 提供了除了 left/right/top/bottom/width/height 之外的布局手段。
# 在使用 left/right/top/bottom/width/height 的时候
# 可能很难在保持地图高宽比的情况下把地图放在某个盒形区域的正中间,并且保证不超出盒形的范围。
# 此时可以通过 layoutCenter 属性定义地图中心在屏幕中的位置,layoutSize 定义地图的大小。
# 如下示例
# layoutCenter: ['30%', '30%'],
# // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
# layoutSize: 100
layout_center: types.Optional[types.Sequence[str]] = None,
# 地图的大小,见 layoutCenter。支持相对于屏幕宽高的百分比或者绝对的像素大小。
layout_size: types.Union[str, types.Numeric] = None,
# # 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict, None] = None,
# 地图区域的多边形 图形样式。
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] =None,
# 高亮状态下的多边形样式
emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict,None] = None,
# 高亮状态下的标签样式。
emphasis_label_opts: Union[opts.LabelOpts, dict, None] =None,
):
- func pyecharts.charts.Geo.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: Sequence,
# Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
# from pyecharts.globals import GeoType
# GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
type_: str = "scatter",
# 是否选中图例
is_selected: bool = True,
# 标记图形形状
symbol: Optional[str] = None,
# 标记的大小
symbol_size: Numeric = 12,
# 每个点的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
blur_size: types.Numeric = 20,
# 每个点模糊的大小,在地理坐标系(coordinateSystem: 'geo')上有效。
point_size: types.Numeric = 20,
# 系列 label 颜色
color: Optional[str] = None,
# 是否是多段线,在画 lines 图情况下
is_polyline: bool = False,
# 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
is_large: bool = False,
# 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。默认值 0.2
trail_length: Numeric = 0.2,
# 开启绘制优化的阈值。
large_threshold: Numeric = 2000,
# 配置该系列每一帧渲染的图形数
progressive: types.Numeric = 400,
# 启用渐进式渲染的图形数量阈值,在单个系列的图形数量超过该阈值时启用渐进式渲染。
progressive_threshold: types.Numeric = 3000,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 涟漪特效配置项,参考 `series_options.EffectOpts`
effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),
# 线样式配置项,参考 `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,
# 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.renderItem)
render_item: types.JsCode = None,
# 这个配置相对非常复杂(参照地址: https://www.echartsjs.com/zh/option.html#series-custom.encode)
encode: types.Union[types.JsCode, dict] = None,
)
- func pyecharts.charts.Geo.add_coordinate 新增一个坐标点
def add_coordinate(
# 坐标地点名称
name: str,
# 经度
longitude: Numeric,
# 纬度
latitude: Numeric,
)
- func pyecharts.charts.Geo.add_coordinate_json 以 JOSN 文件格式新增多个坐标点
def add_coordinate_json(
# json 文件格式的坐标数据
# 格式如下
# {
# "阿城": [126.58, 45.32],
# "阿克苏": [80.19, 41.09]
# }
],
json_file: str
)
- func pyecharts.charts.Geo.get_coordinate 查询指定地点的坐标
def get_coordinate(
# 地点名称
name: str
) -> Sequence
- Geo 图的坐标引用自 pyecharts.datasets.COORDINATES,COORDINATES 是一个支持模糊匹配的字典类。可设置匹配的阈值。
from pyecharts.datasets import COORDINATES
# cutoff 为匹配阈值,阈值越高相似性越高,1 为完全相同。默认为 0.6
COORDINATES.cutoff = 0.75
?76.1 Geo - Geo_chart_countries_js
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.datasets import register_url
try:
register_url("https://echarts-maps.github.io/echarts-countries-js/")
except Exception:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
register_url("https://echarts-maps.github.io/echarts-countries-js/")
geo = (
Geo()
.add_schema(maptype="瑞士")
.set_global_opts(title_opts=opts.TitleOpts(title="瑞士"))
.render("geo_chart_countries_js.html")
)
76.2 Geo - Geo_lines_background
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
c = (
Geo()
.add_schema(
maptype="china",
itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
)
.add(
"",
[("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88)],
type_=ChartType.EFFECT_SCATTER,
color="white",
)
.add(
"geo",
[("广州", "上海"), ("广州", "北京"), ("广州", "杭州"), ("广州", "重庆")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="blue"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Geo-Lines-background"))
.render("geo_lines_background.html")
)
76.3 Geo - Geo_visualmap_piecewise
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
c = (
Geo()
.add_schema(maptype="china")
.add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(is_piecewise=True),
title_opts=opts.TitleOpts(title="Geo-VisualMap(分段型)"),
)
.render("geo_visualmap_piecewise.html")
)
76.4 Geo - Geo_lines
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
c = (
Geo()
.add_schema(maptype="china")
.add(
"",
[("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88)],
type_=ChartType.EFFECT_SCATTER,
color="white",
)
.add(
"geo",
[("广州", "上海"), ("广州", "北京"), ("广州", "杭州"), ("广州", "重庆")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="blue"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Geo-Lines"))
.render("geo_lines.html")
)
76.5 Geo - Geo_guangdong
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType
c = (
Geo()
.add_schema(maptype="广东")
.add(
"geo",
[list(z) for z in zip(Faker.guangdong_city, Faker.values())],
type_=ChartType.HEATMAP,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")
)
.render("geo_guangdong.html")
)
76.6 Geo - Geo_heatmap
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType
c = (
Geo()
.add_schema(maptype="china")
.add(
"geo",
[list(z) for z in zip(Faker.provinces, Faker.values())],
type_=ChartType.HEATMAP,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(),
title_opts=opts.TitleOpts(title="Geo-HeatMap"),
)
)
76.7 Geo - Geo_effectscatter
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import ChartType
c = (
Geo()
.add_schema(maptype="china")
.add(
"geo",
[list(z) for z in zip(Faker.provinces, Faker.values())],
type_=ChartType.EFFECT_SCATTER,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Geo-EffectScatter"))
.render("geo_effectscatter.html")
)
76.7 Geo - Geo_base
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
c = (
Geo()
.add_schema(maptype="china")
.add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-基本示例")
)
.render("geo_base.html")
)
?76.8 Geo - Geo_echart_china_js
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.datasets import register_url
try:
register_url("https://echarts-maps.github.io/echarts-china-counties-js/")
except Exception:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
register_url("https://echarts-maps.github.io/echarts-china-counties-js/")
geo = (
Geo()
.add_schema(maptype="海淀区")
.set_global_opts(title_opts=opts.TitleOpts(title="海淀区"))
.render("geo_echart_china_js.html")
)
77.Map:地图
- class pyecharts.charts.Map
class Map(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Map.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: types.Sequence[types.Union[types.Sequence, opts.MapItem, dict]],
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 是否选中图例
is_selected: bool = True,
# 是否开启鼠标缩放和平移漫游。
is_roam: bool = True,
# 当前视角的中心点,用经纬度表示
center: Optional[Sequence] = None,
# 参数用于 scale 地图的长宽比。
aspect_scale: types.Numeric = 0.75,
# 二维数组,定义定位的左上角以及右下角分别所对应的经纬度。
bounding_coords: types.Optional[types.Sequence[types.Numeric]] = None,
# 最小的缩放值。
min_scale_limit: types.Optional[types.Numeric] = None,
# 最大的缩放值。
max_scale_limit: types.Optional[types.Numeric] = None,
# 默认是 'name',针对 GeoJSON 要素的自定义属性名称,作为主键用于关联数据点和 GeoJSON 地理要素。
name_property: str = "name",
# 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串。
# 字符串取值可选'single'表示单选,或者'multiple'表示多选。
selected_mode: types.Union[bool, str] = False,
# 当前视角的缩放比例。
zoom: Optional[Numeric] = 1,
# 自定义地区的名称映射
name_map: Optional[dict] = None,
# 标记图形形状
symbol: Optional[str] = None,
# 多个拥有相同地图类型的系列会使用同一个地图展现。
# 如果多个系列都在同一个区域有值,ECharts 会对这些值统计得到一个数据。
# 这个配置项就是用于配置统计的方式,目前有:
# 'sum' 取和。
# 'average' 取平均值。
# 'max' 取最大值。
# 'min' 取最小值。
map_value_calculation: str = "sum",
# 是否显示标记图形
is_map_symbol_show: bool = True,
# pyecharts 暂时没有提供 left/top/right/bottom 的配置
# layoutCenter 和 layoutSize 提供了除了 left/right/top/bottom/width/height 之外的布局手段。
# 在使用 left/right/top/bottom/width/height 的时候
# 可能很难在保持地图高宽比的情况下把地图放在某个盒形区域的正中间,并且保证不超出盒形的范围。
# 此时可以通过 layoutCenter 属性定义地图中心在屏幕中的位置,layoutSize 定义地图的大小。
# 如下示例
# layoutCenter: ['30%', '30%'],
# // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
# layoutSize: 100
layout_center: types.Optional[types.Sequence[str]] = None,
# 地图的大小,见 layoutCenter。支持相对于屏幕宽高的百分比或者绝对的像素大小。
layout_size: types.Union[str, types.Numeric] = None,
# 标签配置项,参考 `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,
# 高亮标签配置项,参考 `series_options.LabelOpts`
emphasis_label_opts: Union[opts.LabelOpts, dict, None] = None,
# 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
- MapItem:地图数据项
class MapItem(
# 数据所对应的地图区域的名称,例如 '广东','浙江'。
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,
)
77.1 Map - Map_base
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
.render("map_base.html")
)
77.2 Map - Map_guangdong
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.guangdong_city, Faker.values())], "广东")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-广东地图"), visualmap_opts=opts.VisualMapOpts()
)
.render("map_guangdong.html")
)
77.3 Map - Map_visualmap_piecewise
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap(分段型)"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
.render("map_visualmap_piecewise.html")
)
77.4 Map - Map_world
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.country, Faker.values())], "world")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-世界地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
.render("map_world.html")
)
?77.5 Map - China_gdp_from_1993_to_2018
from typing import List
import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie, Line
"""
Gallery 使用 pyecharts 1.3.0
From pyecharts 交流分享群 -- 郭昱
"""
data = [
{
"time": "1993年",
"data": [
{"name": "广东", "value": [3469.0, 10.12, "广东"]},
{"name": "江苏", "value": [2998.0, 8.75, "江苏"]},
{"name": "山东", "value": [2770.0, 8.08, "山东"]},
{"name": "辽宁", "value": [2011.0, 5.87, "辽宁"]},
{"name": "浙江", "value": [1926.0, 5.62, "浙江"]},
{"name": "河北", "value": [1691.0, 4.93, "河北"]},
{"name": "河南", "value": [1660.0, 4.84, "河南"]},
{"name": "上海", "value": [1519.0, 4.43, "上海"]},
{"name": "四川", "value": [1486.0, 4.34, "四川"]},
{"name": "湖北", "value": [1326.0, 3.87, "湖北"]},
{"name": "湖南", "value": [1245.0, 3.63, "湖南"]},
{"name": "黑龙江", "value": [1198.0, 3.5, "黑龙江"]},
{"name": "福建", "value": [1114.0, 3.25, "福建"]},
{"name": "安徽", "value": [1037.0, 3.03, "安徽"]},
{"name": "北京", "value": [886.0, 2.59, "北京"]},
{"name": "广西", "value": [872.0, 2.54, "广西"]},
{"name": "云南", "value": [783.0, 2.28, "云南"]},
{"name": "江西", "value": [723.0, 2.11, "江西"]},
{"name": "吉林", "value": [719.0, 2.1, "吉林"]},
{"name": "山西", "value": [680.0, 1.98, "山西"]},
{"name": "陕西", "value": [678.0, 1.98, "陕西"]},
{"name": "重庆", "value": [609.0, 1.78, "重庆"]},
{"name": "天津", "value": [539.0, 1.57, "天津"]},
{"name": "内蒙古", "value": [538.0, 1.57, "内蒙古"]},
{"name": "新疆", "value": [495.0, 1.44, "新疆"]},
{"name": "贵州", "value": [418.0, 1.22, "贵州"]},
{"name": "甘肃", "value": [372.0, 1.09, "甘肃"]},
{"name": "海南", "value": [260.0, 0.76, "海南"]},
{"name": "青海", "value": [110.0, 0.32, "青海"]},
{"name": "宁夏", "value": [104.0, 0.3, "宁夏"]},
{"name": "西藏", "value": [37.0, 0.11, "西藏"]},
],
},
{
"time": "1994年",
"data": [
{"name": "广东", "value": [4619.0, 10.17, "广东"]},
{"name": "江苏", "value": [4057.0, 8.93, "江苏"]},
{"name": "山东", "value": [3845.0, 8.47, "山东"]},
{"name": "浙江", "value": [2689.0, 5.92, "浙江"]},
{"name": "辽宁", "value": [2462.0, 5.42, "辽宁"]},
{"name": "河南", "value": [2217.0, 4.88, "河南"]},
{"name": "河北", "value": [2187.0, 4.81, "河北"]},
{"name": "四川", "value": [2001.0, 4.41, "四川"]},
{"name": "上海", "value": [1991.0, 4.38, "上海"]},
{"name": "湖北", "value": [1701.0, 3.74, "湖北"]},
{"name": "湖南", "value": [1650.0, 3.63, "湖南"]},
{"name": "福建", "value": [1644.0, 3.62, "福建"]},
{"name": "黑龙江", "value": [1605.0, 3.53, "黑龙江"]},
{"name": "安徽", "value": [1320.0, 2.91, "安徽"]},
{"name": "广西", "value": [1198.0, 2.64, "广西"]},
{"name": "北京", "value": [1145.0, 2.52, "北京"]},
{"name": "云南", "value": [984.0, 2.17, "云南"]},
{"name": "江西", "value": [948.0, 2.09, "江西"]},
{"name": "吉林", "value": [938.0, 2.07, "吉林"]},
{"name": "陕西", "value": [839.0, 1.85, "陕西"]},
{"name": "重庆", "value": [834.0, 1.84, "重庆"]},
{"name": "山西", "value": [827.0, 1.82, "山西"]},
{"name": "天津", "value": [733.0, 1.61, "天津"]},
{"name": "内蒙古", "value": [695.0, 1.53, "内蒙古"]},
{"name": "新疆", "value": [662.0, 1.46, "新疆"]},
{"name": "贵州", "value": [524.0, 1.15, "贵州"]},
{"name": "甘肃", "value": [454.0, 1.0, "甘肃"]},
{"name": "海南", "value": [332.0, 0.73, "海南"]},
{"name": "青海", "value": [138.0, 0.3, "青海"]},
{"name": "宁夏", "value": [136.0, 0.3, "宁夏"]},
{"name": "西藏", "value": [46.0, 0.1, "西藏"]},
],
},
{
"time": "1995年",
"data": [
{"name": "广东", "value": [5933.0, 10.29, "广东"]},
{"name": "江苏", "value": [5155.0, 8.94, "江苏"]},
{"name": "山东", "value": [4953.0, 8.59, "山东"]},
{"name": "浙江", "value": [3558.0, 6.17, "浙江"]},
{"name": "河南", "value": [2988.0, 5.18, "河南"]},
{"name": "河北", "value": [2850.0, 4.94, "河北"]},
{"name": "辽宁", "value": [2793.0, 4.85, "辽宁"]},
{"name": "上海", "value": [2499.0, 4.34, "上海"]},
{"name": "四川", "value": [2443.0, 4.24, "四川"]},
{"name": "湖南", "value": [2132.0, 3.7, "湖南"]},
{"name": "湖北", "value": [2109.0, 3.66, "湖北"]},
{"name": "福建", "value": [2095.0, 3.63, "福建"]},
{"name": "黑龙江", "value": [1991.0, 3.45, "黑龙江"]},
{"name": "安徽", "value": [1811.0, 3.14, "安徽"]},
{"name": "北京", "value": [1508.0, 2.62, "北京"]},
{"name": "广西", "value": [1498.0, 2.6, "广西"]},
{"name": "云南", "value": [1222.0, 2.12, "云南"]},
{"name": "江西", "value": [1170.0, 2.03, "江西"]},
{"name": "吉林", "value": [1137.0, 1.97, "吉林"]},
{"name": "重庆", "value": [1123.0, 1.95, "重庆"]},
{"name": "山西", "value": [1076.0, 1.87, "山西"]},
{"name": "陕西", "value": [1037.0, 1.8, "陕西"]},
{"name": "天津", "value": [932.0, 1.62, "天津"]},
{"name": "内蒙古", "value": [857.0, 1.49, "内蒙古"]},
{"name": "新疆", "value": [815.0, 1.41, "新疆"]},
{"name": "贵州", "value": [636.0, 1.1, "贵州"]},
{"name": "甘肃", "value": [558.0, 0.97, "甘肃"]},
{"name": "海南", "value": [363.0, 0.63, "海南"]},
{"name": "宁夏", "value": [175.0, 0.3, "宁夏"]},
{"name": "青海", "value": [168.0, 0.29, "青海"]},
{"name": "西藏", "value": [56.0, 0.1, "西藏"]},
],
},
{
"time": "1996年",
"data": [
{"name": "广东", "value": [6835.0, 10.07, "广东"]},
{"name": "江苏", "value": [6004.0, 8.84, "江苏"]},
{"name": "山东", "value": [5884.0, 8.67, "山东"]},
{"name": "浙江", "value": [4189.0, 6.17, "浙江"]},
{"name": "河南", "value": [3635.0, 5.35, "河南"]},
{"name": "河北", "value": [3453.0, 5.09, "河北"]},
{"name": "辽宁", "value": [3158.0, 4.65, "辽宁"]},
{"name": "上海", "value": [2958.0, 4.36, "上海"]},
{"name": "四川", "value": [2872.0, 4.23, "四川"]},
{"name": "湖南", "value": [2540.0, 3.74, "湖南"]},
{"name": "湖北", "value": [2500.0, 3.68, "湖北"]},
{"name": "福建", "value": [2484.0, 3.66, "福建"]},
{"name": "黑龙江", "value": [2371.0, 3.49, "黑龙江"]},
{"name": "安徽", "value": [2093.0, 3.08, "安徽"]},
{"name": "北京", "value": [1789.0, 2.63, "北京"]},
{"name": "广西", "value": [1698.0, 2.5, "广西"]},
{"name": "云南", "value": [1518.0, 2.24, "云南"]},
{"name": "江西", "value": [1410.0, 2.08, "江西"]},
{"name": "吉林", "value": [1347.0, 1.98, "吉林"]},
{"name": "重庆", "value": [1315.0, 1.94, "重庆"]},
{"name": "山西", "value": [1292.0, 1.9, "山西"]},
{"name": "陕西", "value": [1216.0, 1.79, "陕西"]},
{"name": "天津", "value": [1122.0, 1.65, "天津"]},
{"name": "内蒙古", "value": [1023.0, 1.51, "内蒙古"]},
{"name": "新疆", "value": [901.0, 1.33, "新疆"]},
{"name": "贵州", "value": [723.0, 1.06, "贵州"]},
{"name": "甘肃", "value": [723.0, 1.06, "甘肃"]},
{"name": "海南", "value": [390.0, 0.57, "海南"]},
{"name": "宁夏", "value": [203.0, 0.3, "宁夏"]},
{"name": "青海", "value": [184.0, 0.27, "青海"]},
{"name": "西藏", "value": [65.0, 0.1, "西藏"]},
],
},
{
"time": "1997年",
"data": [
{"name": "广东", "value": [7775.0, 10.16, "广东"]},
{"name": "江苏", "value": [6680.0, 8.73, "江苏"]},
{"name": "山东", "value": [6537.0, 8.55, "山东"]},
{"name": "浙江", "value": [4686.0, 6.13, "浙江"]},
{"name": "河南", "value": [4041.0, 5.28, "河南"]},
{"name": "河北", "value": [3954.0, 5.17, "河北"]},
{"name": "辽宁", "value": [3582.0, 4.68, "辽宁"]},
{"name": "上海", "value": [3439.0, 4.5, "上海"]},
{"name": "四川", "value": [3241.0, 4.24, "四川"]},
{"name": "福建", "value": [2871.0, 3.75, "福建"]},
{"name": "湖北", "value": [2856.0, 3.73, "湖北"]},
{"name": "湖南", "value": [2849.0, 3.72, "湖南"]},
{"name": "黑龙江", "value": [2668.0, 3.49, "黑龙江"]},
{"name": "安徽", "value": [2347.0, 3.07, "安徽"]},
{"name": "北京", "value": [2077.0, 2.72, "北京"]},
{"name": "广西", "value": [1817.0, 2.38, "广西"]},
{"name": "云南", "value": [1676.0, 2.19, "云南"]},
{"name": "江西", "value": [1606.0, 2.1, "江西"]},
{"name": "重庆", "value": [1510.0, 1.97, "重庆"]},
{"name": "山西", "value": [1476.0, 1.93, "山西"]},
{"name": "吉林", "value": [1464.0, 1.91, "吉林"]},
{"name": "陕西", "value": [1364.0, 1.78, "陕西"]},
{"name": "天津", "value": [1265.0, 1.65, "天津"]},
{"name": "内蒙古", "value": [1154.0, 1.51, "内蒙古"]},
{"name": "新疆", "value": [1040.0, 1.36, "新疆"]},
{"name": "贵州", "value": [806.0, 1.05, "贵州"]},
{"name": "甘肃", "value": [794.0, 1.04, "甘肃"]},
{"name": "海南", "value": [411.0, 0.54, "海南"]},
{"name": "宁夏", "value": [225.0, 0.29, "宁夏"]},
{"name": "青海", "value": [203.0, 0.27, "青海"]},
{"name": "西藏", "value": [77.0, 0.1, "西藏"]},
],
},
{
"time": "1998年",
"data": [
{"name": "广东", "value": [8531.0, 10.31, "广东"]},
{"name": "江苏", "value": [7200.0, 8.7, "江苏"]},
{"name": "山东", "value": [7021.0, 8.49, "山东"]},
{"name": "浙江", "value": [5053.0, 6.11, "浙江"]},
{"name": "河南", "value": [4308.0, 5.21, "河南"]},
{"name": "河北", "value": [4256.0, 5.15, "河北"]},
{"name": "辽宁", "value": [3882.0, 4.69, "辽宁"]},
{"name": "上海", "value": [3801.0, 4.59, "上海"]},
{"name": "四川", "value": [3474.0, 4.2, "四川"]},
{"name": "福建", "value": [3160.0, 3.82, "福建"]},
{"name": "湖北", "value": [3114.0, 3.76, "湖北"]},
{"name": "湖南", "value": [3026.0, 3.66, "湖南"]},
{"name": "黑龙江", "value": [2774.0, 3.35, "黑龙江"]},
{"name": "安徽", "value": [2543.0, 3.07, "安徽"]},
{"name": "北京", "value": [2377.0, 2.87, "北京"]},
{"name": "广西", "value": [1911.0, 2.31, "广西"]},
{"name": "云南", "value": [1831.0, 2.21, "云南"]},
{"name": "江西", "value": [1720.0, 2.08, "江西"]},
{"name": "山西", "value": [1611.0, 1.95, "山西"]},
{"name": "重庆", "value": [1602.0, 1.94, "重庆"]},
{"name": "吉林", "value": [1577.0, 1.91, "吉林"]},
{"name": "陕西", "value": [1458.0, 1.76, "陕西"]},
{"name": "天津", "value": [1375.0, 1.66, "天津"]},
{"name": "内蒙古", "value": [1263.0, 1.53, "内蒙古"]},
{"name": "新疆", "value": [1107.0, 1.34, "新疆"]},
{"name": "甘肃", "value": [888.0, 1.07, "甘肃"]},
{"name": "贵州", "value": [858.0, 1.04, "贵州"]},
{"name": "海南", "value": [442.0, 0.53, "海南"]},
{"name": "宁夏", "value": [245.0, 0.3, "宁夏"]},
{"name": "青海", "value": [221.0, 0.27, "青海"]},
{"name": "西藏", "value": [92.0, 0.11, "西藏"]},
],
},
{
"time": "1999年",
"data": [
{"name": "广东", "value": [9251.0, 10.47, "广东"]},
{"name": "江苏", "value": [7698.0, 8.71, "江苏"]},
{"name": "山东", "value": [7494.0, 8.48, "山东"]},
{"name": "浙江", "value": [5444.0, 6.16, "浙江"]},
{"name": "河南", "value": [4518.0, 5.11, "河南"]},
{"name": "河北", "value": [4514.0, 5.11, "河北"]},
{"name": "上海", "value": [4189.0, 4.74, "上海"]},
{"name": "辽宁", "value": [4172.0, 4.72, "辽宁"]},
{"name": "四川", "value": [3649.0, 4.13, "四川"]},
{"name": "福建", "value": [3414.0, 3.86, "福建"]},
{"name": "湖北", "value": [3229.0, 3.65, "湖北"]},
{"name": "湖南", "value": [3215.0, 3.64, "湖南"]},
{"name": "黑龙江", "value": [2866.0, 3.24, "黑龙江"]},
{"name": "安徽", "value": [2712.0, 3.07, "安徽"]},
{"name": "北京", "value": [2679.0, 3.03, "北京"]},
{"name": "广西", "value": [1971.0, 2.23, "广西"]},
{"name": "云南", "value": [1900.0, 2.15, "云南"]},
{"name": "江西", "value": [1854.0, 2.1, "江西"]},
{"name": "吉林", "value": [1673.0, 1.89, "吉林"]},
{"name": "山西", "value": [1667.0, 1.89, "山西"]},
{"name": "重庆", "value": [1663.0, 1.88, "重庆"]},
{"name": "陕西", "value": [1593.0, 1.8, "陕西"]},
{"name": "天津", "value": [1501.0, 1.7, "天津"]},
{"name": "内蒙古", "value": [1379.0, 1.56, "内蒙古"]},
{"name": "新疆", "value": [1163.0, 1.32, "新疆"]},
{"name": "甘肃", "value": [956.0, 1.08, "甘肃"]},
{"name": "贵州", "value": [938.0, 1.06, "贵州"]},
{"name": "海南", "value": [477.0, 0.54, "海南"]},
{"name": "宁夏", "value": [265.0, 0.3, "宁夏"]},
{"name": "青海", "value": [239.0, 0.27, "青海"]},
{"name": "西藏", "value": [106.0, 0.12, "西藏"]},
],
},
{
"time": "2000年",
"data": [
{"name": "广东", "value": [10741.0, 10.88, "广东"]},
{"name": "江苏", "value": [8554.0, 8.67, "江苏"]},
{"name": "山东", "value": [8337.0, 8.45, "山东"]},
{"name": "浙江", "value": [6141.0, 6.22, "浙江"]},
{"name": "河南", "value": [5053.0, 5.12, "河南"]},
{"name": "河北", "value": [5044.0, 5.11, "河北"]},
{"name": "上海", "value": [4771.0, 4.83, "上海"]},
{"name": "辽宁", "value": [4669.0, 4.73, "辽宁"]},
{"name": "四川", "value": [3928.0, 3.98, "四川"]},
{"name": "福建", "value": [3765.0, 3.81, "福建"]},
{"name": "湖南", "value": [3551.0, 3.6, "湖南"]},
{"name": "湖北", "value": [3545.0, 3.59, "湖北"]},
{"name": "北京", "value": [3162.0, 3.2, "北京"]},
{"name": "黑龙江", "value": [3151.0, 3.19, "黑龙江"]},
{"name": "安徽", "value": [2902.0, 2.94, "安徽"]},
{"name": "广西", "value": [2080.0, 2.11, "广西"]},
{"name": "云南", "value": [2011.0, 2.04, "云南"]},
{"name": "江西", "value": [2003.0, 2.03, "江西"]},
{"name": "吉林", "value": [1952.0, 1.98, "吉林"]},
{"name": "山西", "value": [1846.0, 1.87, "山西"]},
{"name": "陕西", "value": [1804.0, 1.83, "陕西"]},
{"name": "重庆", "value": [1791.0, 1.81, "重庆"]},
{"name": "天津", "value": [1702.0, 1.72, "天津"]},
{"name": "内蒙古", "value": [1539.0, 1.56, "内蒙古"]},
{"name": "新疆", "value": [1364.0, 1.38, "新疆"]},
{"name": "甘肃", "value": [1053.0, 1.07, "甘肃"]},
{"name": "贵州", "value": [1030.0, 1.04, "贵州"]},
{"name": "海南", "value": [527.0, 0.53, "海南"]},
{"name": "宁夏", "value": [295.0, 0.3, "宁夏"]},
{"name": "青海", "value": [264.0, 0.27, "青海"]},
{"name": "西藏", "value": [118.0, 0.12, "西藏"]},
],
},
{
"time": "2001年",
"data": [
{"name": "广东", "value": [12039.0, 11.07, "广东"]},
{"name": "江苏", "value": [9457.0, 8.69, "江苏"]},
{"name": "山东", "value": [9195.0, 8.45, "山东"]},
{"name": "浙江", "value": [6898.0, 6.34, "浙江"]},
{"name": "河南", "value": [5533.0, 5.09, "河南"]},
{"name": "河北", "value": [5517.0, 5.07, "河北"]},
{"name": "上海", "value": [5210.0, 4.79, "上海"]},
{"name": "辽宁", "value": [5033.0, 4.63, "辽宁"]},
{"name": "四川", "value": [4293.0, 3.95, "四川"]},
{"name": "福建", "value": [4073.0, 3.74, "福建"]},
{"name": "湖北", "value": [3881.0, 3.57, "湖北"]},
{"name": "湖南", "value": [3832.0, 3.52, "湖南"]},
{"name": "北京", "value": [3708.0, 3.41, "北京"]},
{"name": "黑龙江", "value": [3390.0, 3.12, "黑龙江"]},
{"name": "安徽", "value": [3247.0, 2.99, "安徽"]},
{"name": "广西", "value": [2279.0, 2.1, "广西"]},
{"name": "江西", "value": [2176.0, 2.0, "江西"]},
{"name": "云南", "value": [2138.0, 1.97, "云南"]},
{"name": "吉林", "value": [2120.0, 1.95, "吉林"]},
{"name": "山西", "value": [2030.0, 1.87, "山西"]},
{"name": "陕西", "value": [2011.0, 1.85, "陕西"]},
{"name": "重庆", "value": [1977.0, 1.82, "重庆"]},
{"name": "天津", "value": [1919.0, 1.76, "天津"]},
{"name": "内蒙古", "value": [1714.0, 1.58, "内蒙古"]},
{"name": "新疆", "value": [1492.0, 1.37, "新疆"]},
{"name": "贵州", "value": [1133.0, 1.04, "贵州"]},
{"name": "甘肃", "value": [1125.0, 1.03, "甘肃"]},
{"name": "海南", "value": [579.0, 0.53, "海南"]},
{"name": "宁夏", "value": [337.0, 0.31, "宁夏"]},
{"name": "青海", "value": [300.0, 0.28, "青海"]},
{"name": "西藏", "value": [139.0, 0.13, "西藏"]},
],
},
{
"time": "2002年",
"data": [
{"name": "广东", "value": [13502.0, 11.18, "广东"]},
{"name": "江苏", "value": [10607.0, 8.78, "江苏"]},
{"name": "山东", "value": [10276.0, 8.51, "山东"]},
{"name": "浙江", "value": [8004.0, 6.62, "浙江"]},
{"name": "河南", "value": [6035.0, 4.99, "河南"]},
{"name": "河北", "value": [6018.0, 4.98, "河北"]},
{"name": "上海", "value": [5741.0, 4.75, "上海"]},
{"name": "辽宁", "value": [5458.0, 4.52, "辽宁"]},
{"name": "四川", "value": [4725.0, 3.91, "四川"]},
{"name": "福建", "value": [4468.0, 3.7, "福建"]},
{"name": "北京", "value": [4315.0, 3.57, "北京"]},
{"name": "湖北", "value": [4213.0, 3.49, "湖北"]},
{"name": "湖南", "value": [4152.0, 3.44, "湖南"]},
{"name": "黑龙江", "value": [3637.0, 3.01, "黑龙江"]},
{"name": "安徽", "value": [3520.0, 2.91, "安徽"]},
{"name": "广西", "value": [2524.0, 2.09, "广西"]},
{"name": "江西", "value": [2450.0, 2.03, "江西"]},
{"name": "吉林", "value": [2349.0, 1.94, "吉林"]},
{"name": "山西", "value": [2325.0, 1.92, "山西"]},
{"name": "云南", "value": [2313.0, 1.91, "云南"]},
{"name": "陕西", "value": [2253.0, 1.86, "陕西"]},
{"name": "重庆", "value": [2233.0, 1.85, "重庆"]},
{"name": "天津", "value": [2151.0, 1.78, "天津"]},
{"name": "内蒙古", "value": [1941.0, 1.61, "内蒙古"]},
{"name": "新疆", "value": [1613.0, 1.34, "新疆"]},
{"name": "贵州", "value": [1243.0, 1.03, "贵州"]},
{"name": "甘肃", "value": [1232.0, 1.02, "甘肃"]},
{"name": "海南", "value": [643.0, 0.53, "海南"]},
{"name": "宁夏", "value": [377.0, 0.31, "宁夏"]},
{"name": "青海", "value": [341.0, 0.28, "青海"]},
{"name": "西藏", "value": [162.0, 0.13, "西藏"]},
],
},
{
"time": "2003年",
"data": [
{"name": "广东", "value": [15845.0, 11.36, "广东"]},
{"name": "江苏", "value": [12443.0, 8.92, "江苏"]},
{"name": "山东", "value": [12078.0, 8.66, "山东"]},
{"name": "浙江", "value": [9705.0, 6.96, "浙江"]},
{"name": "河北", "value": [6921.0, 4.96, "河北"]},
{"name": "河南", "value": [6868.0, 4.92, "河南"]},
{"name": "上海", "value": [6694.0, 4.8, "上海"]},
{"name": "辽宁", "value": [6003.0, 4.3, "辽宁"]},
{"name": "四川", "value": [5333.0, 3.82, "四川"]},
{"name": "北京", "value": [5007.0, 3.59, "北京"]},
{"name": "福建", "value": [4984.0, 3.57, "福建"]},
{"name": "湖北", "value": [4757.0, 3.41, "湖北"]},
{"name": "湖南", "value": [4660.0, 3.34, "湖南"]},
{"name": "黑龙江", "value": [4057.0, 2.91, "黑龙江"]},
{"name": "安徽", "value": [3923.0, 2.81, "安徽"]},
{"name": "山西", "value": [2855.0, 2.05, "山西"]},
{"name": "广西", "value": [2821.0, 2.02, "广西"]},
{"name": "江西", "value": [2807.0, 2.01, "江西"]},
{"name": "吉林", "value": [2662.0, 1.91, "吉林"]},
{"name": "陕西", "value": [2588.0, 1.85, "陕西"]},
{"name": "天津", "value": [2578.0, 1.85, "天津"]},
{"name": "云南", "value": [2556.0, 1.83, "云南"]},
{"name": "重庆", "value": [2556.0, 1.83, "重庆"]},
{"name": "内蒙古", "value": [2388.0, 1.71, "内蒙古"]},
{"name": "新疆", "value": [1886.0, 1.35, "新疆"]},
{"name": "贵州", "value": [1426.0, 1.02, "贵州"]},
{"name": "甘肃", "value": [1400.0, 1.0, "甘肃"]},
{"name": "海南", "value": [714.0, 0.51, "海南"]},
{"name": "宁夏", "value": [445.0, 0.32, "宁夏"]},
{"name": "青海", "value": [390.0, 0.28, "青海"]},
{"name": "西藏", "value": [185.0, 0.13, "西藏"]},
],
},
{
"time": "2004年",
"data": [
{"name": "广东", "value": [18865.0, 11.23, "广东"]},
{"name": "山东", "value": [15022.0, 8.95, "山东"]},
{"name": "江苏", "value": [15004.0, 8.93, "江苏"]},
{"name": "浙江", "value": [11649.0, 6.94, "浙江"]},
{"name": "河南", "value": [8554.0, 5.09, "河南"]},
{"name": "河北", "value": [8478.0, 5.05, "河北"]},
{"name": "上海", "value": [8073.0, 4.81, "上海"]},
{"name": "辽宁", "value": [6672.0, 3.97, "辽宁"]},
{"name": "四川", "value": [6380.0, 3.8, "四川"]},
{"name": "北京", "value": [6033.0, 3.59, "北京"]},
{"name": "福建", "value": [5763.0, 3.43, "福建"]},
{"name": "湖南", "value": [5642.0, 3.36, "湖南"]},
{"name": "湖北", "value": [5633.0, 3.35, "湖北"]},
{"name": "安徽", "value": [4759.0, 2.83, "安徽"]},
{"name": "黑龙江", "value": [4751.0, 2.83, "黑龙江"]},
{"name": "山西", "value": [3571.0, 2.13, "山西"]},
{"name": "江西", "value": [3457.0, 2.06, "江西"]},
{"name": "广西", "value": [3434.0, 2.04, "广西"]},
{"name": "陕西", "value": [3176.0, 1.89, "陕西"]},
{"name": "吉林", "value": [3122.0, 1.86, "吉林"]},
{"name": "天津", "value": [3111.0, 1.85, "天津"]},
{"name": "云南", "value": [3082.0, 1.84, "云南"]},
{"name": "内蒙古", "value": [3041.0, 1.81, "内蒙古"]},
{"name": "重庆", "value": [3035.0, 1.81, "重庆"]},
{"name": "新疆", "value": [2209.0, 1.32, "新疆"]},
{"name": "甘肃", "value": [1688.0, 1.01, "甘肃"]},
{"name": "贵州", "value": [1678.0, 1.0, "贵州"]},
{"name": "海南", "value": [820.0, 0.49, "海南"]},
{"name": "宁夏", "value": [537.0, 0.32, "宁夏"]},
{"name": "青海", "value": [466.0, 0.28, "青海"]},
{"name": "西藏", "value": [220.0, 0.13, "西藏"]},
],
},
{
"time": "2005年",
"data": [
{"name": "广东", "value": [22557.0, 11.32, "广东"]},
{"name": "江苏", "value": [18599.0, 9.34, "江苏"]},
{"name": "山东", "value": [18367.0, 9.22, "山东"]},
{"name": "浙江", "value": [13418.0, 6.73, "浙江"]},
{"name": "河南", "value": [10587.0, 5.31, "河南"]},
{"name": "河北", "value": [10012.0, 5.03, "河北"]},
{"name": "上海", "value": [9248.0, 4.64, "上海"]},
{"name": "辽宁", "value": [8047.0, 4.04, "辽宁"]},
{"name": "四川", "value": [7385.0, 3.71, "四川"]},
{"name": "北京", "value": [6970.0, 3.5, "北京"]},
{"name": "湖南", "value": [6596.0, 3.31, "湖南"]},
{"name": "湖北", "value": [6590.0, 3.31, "湖北"]},
{"name": "福建", "value": [6555.0, 3.29, "福建"]},
{"name": "黑龙江", "value": [5514.0, 2.77, "黑龙江"]},
{"name": "安徽", "value": [5350.0, 2.69, "安徽"]},
{"name": "山西", "value": [4231.0, 2.12, "山西"]},
{"name": "江西", "value": [4057.0, 2.04, "江西"]},
{"name": "广西", "value": [3984.0, 2.0, "广西"]},
{"name": "陕西", "value": [3934.0, 1.97, "陕西"]},
{"name": "天津", "value": [3906.0, 1.96, "天津"]},
{"name": "内蒙古", "value": [3905.0, 1.96, "内蒙古"]},
{"name": "吉林", "value": [3620.0, 1.82, "吉林"]},
{"name": "重庆", "value": [3468.0, 1.74, "重庆"]},
{"name": "云南", "value": [3463.0, 1.74, "云南"]},
{"name": "新疆", "value": [2604.0, 1.31, "新疆"]},
{"name": "贵州", "value": [2005.0, 1.01, "贵州"]},
{"name": "甘肃", "value": [1934.0, 0.97, "甘肃"]},
{"name": "海南", "value": [919.0, 0.46, "海南"]},
{"name": "宁夏", "value": [613.0, 0.31, "宁夏"]},
{"name": "青海", "value": [543.0, 0.27, "青海"]},
{"name": "西藏", "value": [249.0, 0.12, "西藏"]},
],
},
{
"time": "2006年",
"data": [
{"name": "广东", "value": [26588.0, 11.42, "广东"]},
{"name": "山东", "value": [21900.0, 9.41, "山东"]},
{"name": "江苏", "value": [21742.0, 9.34, "江苏"]},
{"name": "浙江", "value": [15718.0, 6.75, "浙江"]},
{"name": "河南", "value": [12363.0, 5.31, "河南"]},
{"name": "河北", "value": [11468.0, 4.93, "河北"]},
{"name": "上海", "value": [10572.0, 4.54, "上海"]},
{"name": "辽宁", "value": [9305.0, 4.0, "辽宁"]},
{"name": "四川", "value": [8690.0, 3.73, "四川"]},
{"name": "北京", "value": [8118.0, 3.49, "北京"]},
{"name": "湖南", "value": [7689.0, 3.3, "湖南"]},
{"name": "湖北", "value": [7617.0, 3.27, "湖北"]},
{"name": "福建", "value": [7584.0, 3.26, "福建"]},
{"name": "黑龙江", "value": [6212.0, 2.67, "黑龙江"]},
{"name": "安徽", "value": [6113.0, 2.63, "安徽"]},
{"name": "内蒙古", "value": [4944.0, 2.12, "内蒙古"]},
{"name": "山西", "value": [4879.0, 2.1, "山西"]},
{"name": "江西", "value": [4821.0, 2.07, "江西"]},
{"name": "广西", "value": [4746.0, 2.04, "广西"]},
{"name": "陕西", "value": [4744.0, 2.04, "陕西"]},
{"name": "天津", "value": [4463.0, 1.92, "天津"]},
{"name": "吉林", "value": [4275.0, 1.84, "吉林"]},
{"name": "云南", "value": [3988.0, 1.71, "云南"]},
{"name": "重庆", "value": [3907.0, 1.68, "重庆"]},
{"name": "新疆", "value": [3045.0, 1.31, "新疆"]},
{"name": "贵州", "value": [2339.0, 1.0, "贵州"]},
{"name": "甘肃", "value": [2277.0, 0.98, "甘肃"]},
{"name": "海南", "value": [1066.0, 0.46, "海南"]},
{"name": "宁夏", "value": [726.0, 0.31, "宁夏"]},
{"name": "青海", "value": [649.0, 0.28, "青海"]},
{"name": "西藏", "value": [291.0, 0.12, "西藏"]},
],
},
{
"time": "2007年",
"data": [
{"name": "广东", "value": [31777.0, 11.36, "广东"]},
{"name": "江苏", "value": [26018.0, 9.3, "江苏"]},
{"name": "山东", "value": [25777.0, 9.21, "山东"]},
{"name": "浙江", "value": [18754.0, 6.7, "浙江"]},
{"name": "河南", "value": [15012.0, 5.37, "河南"]},
{"name": "河北", "value": [13607.0, 4.86, "河北"]},
{"name": "上海", "value": [12494.0, 4.47, "上海"]},
{"name": "辽宁", "value": [11164.0, 3.99, "辽宁"]},
{"name": "四川", "value": [10562.0, 3.78, "四川"]},
{"name": "北京", "value": [9847.0, 3.52, "北京"]},
{"name": "湖南", "value": [9440.0, 3.37, "湖南"]},
{"name": "湖北", "value": [9333.0, 3.34, "湖北"]},
{"name": "福建", "value": [9249.0, 3.31, "福建"]},
{"name": "安徽", "value": [7361.0, 2.63, "安徽"]},
{"name": "黑龙江", "value": [7104.0, 2.54, "黑龙江"]},
{"name": "内蒙古", "value": [6423.0, 2.3, "内蒙古"]},
{"name": "山西", "value": [6024.0, 2.15, "山西"]},
{"name": "广西", "value": [5823.0, 2.08, "广西"]},
{"name": "江西", "value": [5800.0, 2.07, "江西"]},
{"name": "陕西", "value": [5757.0, 2.06, "陕西"]},
{"name": "吉林", "value": [5285.0, 1.89, "吉林"]},
{"name": "天津", "value": [5253.0, 1.88, "天津"]},
{"name": "云南", "value": [4773.0, 1.71, "云南"]},
{"name": "重庆", "value": [4676.0, 1.67, "重庆"]},
{"name": "新疆", "value": [3523.0, 1.26, "新疆"]},
{"name": "贵州", "value": [2884.0, 1.03, "贵州"]},
{"name": "甘肃", "value": [2704.0, 0.97, "甘肃"]},
{"name": "海南", "value": [1254.0, 0.45, "海南"]},
{"name": "宁夏", "value": [919.0, 0.33, "宁夏"]},
{"name": "青海", "value": [797.0, 0.28, "青海"]},
{"name": "西藏", "value": [341.0, 0.12, "西藏"]},
],
},
{
"time": "2008年",
"data": [
{"name": "广东", "value": [36797.0, 11.04, "广东"]},
{"name": "江苏", "value": [30982.0, 9.3, "江苏"]},
{"name": "山东", "value": [30933.0, 9.28, "山东"]},
{"name": "浙江", "value": [21463.0, 6.44, "浙江"]},
{"name": "河南", "value": [18019.0, 5.41, "河南"]},
{"name": "河北", "value": [16012.0, 4.8, "河北"]},
{"name": "上海", "value": [14070.0, 4.22, "上海"]},
{"name": "辽宁", "value": [13669.0, 4.1, "辽宁"]},
{"name": "四川", "value": [12601.0, 3.78, "四川"]},
{"name": "湖南", "value": [11555.0, 3.47, "湖南"]},
{"name": "湖北", "value": [11329.0, 3.4, "湖北"]},
{"name": "北京", "value": [11115.0, 3.33, "北京"]},
{"name": "福建", "value": [10823.0, 3.25, "福建"]},
{"name": "安徽", "value": [8852.0, 2.66, "安徽"]},
{"name": "内蒙古", "value": [8496.0, 2.55, "内蒙古"]},
{"name": "黑龙江", "value": [8314.0, 2.49, "黑龙江"]},
{"name": "山西", "value": [7315.0, 2.19, "山西"]},
{"name": "陕西", "value": [7315.0, 2.19, "陕西"]},
{"name": "广西", "value": [7021.0, 2.11, "广西"]},
{"name": "江西", "value": [6971.0, 2.09, "江西"]},
{"name": "天津", "value": [6719.0, 2.02, "天津"]},
{"name": "吉林", "value": [6426.0, 1.93, "吉林"]},
{"name": "重庆", "value": [5794.0, 1.74, "重庆"]},
{"name": "云南", "value": [5692.0, 1.71, "云南"]},
{"name": "新疆", "value": [4183.0, 1.25, "新疆"]},
{"name": "贵州", "value": [3562.0, 1.07, "贵州"]},
{"name": "甘肃", "value": [3167.0, 0.95, "甘肃"]},
{"name": "海南", "value": [1503.0, 0.45, "海南"]},
{"name": "宁夏", "value": [1204.0, 0.36, "宁夏"]},
{"name": "青海", "value": [1019.0, 0.31, "青海"]},
{"name": "西藏", "value": [395.0, 0.12, "西藏"]},
],
},
{
"time": "2009年",
"data": [
{"name": "广东", "value": [39483.0, 10.81, "广东"]},
{"name": "江苏", "value": [34457.0, 9.43, "江苏"]},
{"name": "山东", "value": [33897.0, 9.28, "山东"]},
{"name": "浙江", "value": [22990.0, 6.29, "浙江"]},
{"name": "河南", "value": [19480.0, 5.33, "河南"]},
{"name": "河北", "value": [17235.0, 4.72, "河北"]},
{"name": "辽宁", "value": [15212.0, 4.16, "辽宁"]},
{"name": "上海", "value": [15046.0, 4.12, "上海"]},
{"name": "四川", "value": [14151.0, 3.87, "四川"]},
{"name": "湖南", "value": [13060.0, 3.58, "湖南"]},
{"name": "湖北", "value": [12961.0, 3.55, "湖北"]},
{"name": "福建", "value": [12237.0, 3.35, "福建"]},
{"name": "北京", "value": [12153.0, 3.33, "北京"]},
{"name": "安徽", "value": [10063.0, 2.75, "安徽"]},
{"name": "内蒙古", "value": [9740.0, 2.67, "内蒙古"]},
{"name": "黑龙江", "value": [8587.0, 2.35, "黑龙江"]},
{"name": "陕西", "value": [8170.0, 2.24, "陕西"]},
{"name": "广西", "value": [7759.0, 2.12, "广西"]},
{"name": "江西", "value": [7655.0, 2.1, "江西"]},
{"name": "天津", "value": [7522.0, 2.06, "天津"]},
{"name": "山西", "value": [7358.0, 2.01, "山西"]},
{"name": "吉林", "value": [7279.0, 1.99, "吉林"]},
{"name": "重庆", "value": [6530.0, 1.79, "重庆"]},
{"name": "云南", "value": [6170.0, 1.69, "云南"]},
{"name": "新疆", "value": [4277.0, 1.17, "新疆"]},
{"name": "贵州", "value": [3913.0, 1.07, "贵州"]},
{"name": "甘肃", "value": [3388.0, 0.93, "甘肃"]},
{"name": "海南", "value": [1654.0, 0.45, "海南"]},
{"name": "宁夏", "value": [1353.0, 0.37, "宁夏"]},
{"name": "青海", "value": [1081.0, 0.3, "青海"]},
{"name": "西藏", "value": [441.0, 0.12, "西藏"]},
],
},
{
"time": "2010年",
"data": [
{"name": "广东", "value": [46013.0, 10.53, "广东"]},
{"name": "江苏", "value": [41425.0, 9.48, "江苏"]},
{"name": "山东", "value": [39170.0, 8.96, "山东"]},
{"name": "浙江", "value": [27722.0, 6.34, "浙江"]},
{"name": "河南", "value": [23092.0, 5.28, "河南"]},
{"name": "河北", "value": [20394.0, 4.67, "河北"]},
{"name": "辽宁", "value": [18457.0, 4.22, "辽宁"]},
{"name": "四川", "value": [17185.0, 3.93, "四川"]},
{"name": "上海", "value": [17166.0, 3.93, "上海"]},
{"name": "湖南", "value": [16038.0, 3.67, "湖南"]},
{"name": "湖北", "value": [15968.0, 3.65, "湖北"]},
{"name": "福建", "value": [14737.0, 3.37, "福建"]},
{"name": "北京", "value": [14114.0, 3.23, "北京"]},
{"name": "安徽", "value": [12359.0, 2.83, "安徽"]},
{"name": "内蒙古", "value": [11672.0, 2.67, "内蒙古"]},
{"name": "黑龙江", "value": [10369.0, 2.37, "黑龙江"]},
{"name": "陕西", "value": [10123.0, 2.32, "陕西"]},
{"name": "广西", "value": [9570.0, 2.19, "广西"]},
{"name": "江西", "value": [9451.0, 2.16, "江西"]},
{"name": "天津", "value": [9224.0, 2.11, "天津"]},
{"name": "山西", "value": [9201.0, 2.11, "山西"]},
{"name": "吉林", "value": [8668.0, 1.98, "吉林"]},
{"name": "重庆", "value": [7926.0, 1.81, "重庆"]},
{"name": "云南", "value": [7224.0, 1.65, "云南"]},
{"name": "新疆", "value": [5437.0, 1.24, "新疆"]},
{"name": "贵州", "value": [4602.0, 1.05, "贵州"]},
{"name": "甘肃", "value": [4121.0, 0.94, "甘肃"]},
{"name": "海南", "value": [2065.0, 0.47, "海南"]},
{"name": "宁夏", "value": [1690.0, 0.39, "宁夏"]},
{"name": "青海", "value": [1350.0, 0.31, "青海"]},
{"name": "西藏", "value": [507.0, 0.12, "西藏"]},
],
},
{
"time": "2011年",
"data": [
{"name": "广东", "value": [53210.0, 10.2, "广东"]},
{"name": "江苏", "value": [49110.0, 9.42, "江苏"]},
{"name": "山东", "value": [45362.0, 8.7, "山东"]},
{"name": "浙江", "value": [32319.0, 6.2, "浙江"]},
{"name": "河南", "value": [26931.0, 5.16, "河南"]},
{"name": "河北", "value": [24516.0, 4.7, "河北"]},
{"name": "辽宁", "value": [22227.0, 4.26, "辽宁"]},
{"name": "四川", "value": [21027.0, 4.03, "四川"]},
{"name": "湖南", "value": [19670.0, 3.77, "湖南"]},
{"name": "湖北", "value": [19632.0, 3.76, "湖北"]},
{"name": "上海", "value": [19196.0, 3.68, "上海"]},
{"name": "福建", "value": [17560.0, 3.37, "福建"]},
{"name": "北京", "value": [16252.0, 3.12, "北京"]},
{"name": "安徽", "value": [15301.0, 2.93, "安徽"]},
{"name": "内蒙古", "value": [14360.0, 2.75, "内蒙古"]},
{"name": "黑龙江", "value": [12582.0, 2.41, "黑龙江"]},
{"name": "陕西", "value": [12512.0, 2.4, "陕西"]},
{"name": "广西", "value": [11721.0, 2.25, "广西"]},
{"name": "江西", "value": [11703.0, 2.24, "江西"]},
{"name": "天津", "value": [11307.0, 2.17, "天津"]},
{"name": "山西", "value": [11238.0, 2.16, "山西"]},
{"name": "吉林", "value": [10569.0, 2.03, "吉林"]},
{"name": "重庆", "value": [10011.0, 1.92, "重庆"]},
{"name": "云南", "value": [8893.0, 1.71, "云南"]},
{"name": "新疆", "value": [6610.0, 1.27, "新疆"]},
{"name": "贵州", "value": [5702.0, 1.09, "贵州"]},
{"name": "甘肃", "value": [5020.0, 0.96, "甘肃"]},
{"name": "海南", "value": [2523.0, 0.48, "海南"]},
{"name": "宁夏", "value": [2102.0, 0.4, "宁夏"]},
{"name": "青海", "value": [1670.0, 0.32, "青海"]},
{"name": "西藏", "value": [606.0, 0.12, "西藏"]},
],
},
{
"time": "2012年",
"data": [
{"name": "广东", "value": [57068.0, 9.9, "广东"]},
{"name": "江苏", "value": [54058.0, 9.38, "江苏"]},
{"name": "山东", "value": [50013.0, 8.67, "山东"]},
{"name": "浙江", "value": [34665.0, 6.01, "浙江"]},
{"name": "河南", "value": [29599.0, 5.13, "河南"]},
{"name": "河北", "value": [26575.0, 4.61, "河北"]},
{"name": "辽宁", "value": [24846.0, 4.31, "辽宁"]},
{"name": "四川", "value": [23873.0, 4.14, "四川"]},
{"name": "湖北", "value": [22250.0, 3.86, "湖北"]},
{"name": "湖南", "value": [22154.0, 3.84, "湖南"]},
{"name": "上海", "value": [20182.0, 3.5, "上海"]},
{"name": "福建", "value": [19702.0, 3.42, "福建"]},
{"name": "北京", "value": [17879.0, 3.1, "北京"]},
{"name": "安徽", "value": [17212.0, 2.99, "安徽"]},
{"name": "内蒙古", "value": [15881.0, 2.75, "内蒙古"]},
{"name": "陕西", "value": [14454.0, 2.51, "陕西"]},
{"name": "黑龙江", "value": [13692.0, 2.37, "黑龙江"]},
{"name": "广西", "value": [13035.0, 2.26, "广西"]},
{"name": "江西", "value": [12949.0, 2.25, "江西"]},
{"name": "天津", "value": [12894.0, 2.24, "天津"]},
{"name": "山西", "value": [12113.0, 2.1, "山西"]},
{"name": "吉林", "value": [11939.0, 2.07, "吉林"]},
{"name": "重庆", "value": [11410.0, 1.98, "重庆"]},
{"name": "云南", "value": [10309.0, 1.79, "云南"]},
{"name": "新疆", "value": [7505.0, 1.3, "新疆"]},
{"name": "贵州", "value": [6852.0, 1.19, "贵州"]},
{"name": "甘肃", "value": [5650.0, 0.98, "甘肃"]},
{"name": "海南", "value": [2856.0, 0.5, "海南"]},
{"name": "宁夏", "value": [2341.0, 0.41, "宁夏"]},
{"name": "青海", "value": [1894.0, 0.33, "青海"]},
{"name": "西藏", "value": [701.0, 0.12, "西藏"]},
],
},
{
"time": "2013年",
"data": [
{"name": "广东", "value": [62475.0, 9.85, "广东"]},
{"name": "江苏", "value": [59753.0, 9.42, "江苏"]},
{"name": "山东", "value": [55230.0, 8.71, "山东"]},
{"name": "浙江", "value": [37757.0, 5.95, "浙江"]},
{"name": "河南", "value": [32191.0, 5.07, "河南"]},
{"name": "河北", "value": [28443.0, 4.48, "河北"]},
{"name": "辽宁", "value": [27213.0, 4.29, "辽宁"]},
{"name": "四川", "value": [26392.0, 4.16, "四川"]},
{"name": "湖北", "value": [24792.0, 3.91, "湖北"]},
{"name": "湖南", "value": [24622.0, 3.88, "湖南"]},
{"name": "福建", "value": [21868.0, 3.45, "福建"]},
{"name": "上海", "value": [21818.0, 3.44, "上海"]},
{"name": "北京", "value": [19801.0, 3.12, "北京"]},
{"name": "安徽", "value": [19229.0, 3.03, "安徽"]},
{"name": "内蒙古", "value": [16917.0, 2.67, "内蒙古"]},
{"name": "陕西", "value": [16205.0, 2.55, "陕西"]},
{"name": "黑龙江", "value": [14455.0, 2.28, "黑龙江"]},
{"name": "广西", "value": [14450.0, 2.28, "广西"]},
{"name": "天津", "value": [14442.0, 2.28, "天津"]},
{"name": "江西", "value": [14410.0, 2.27, "江西"]},
{"name": "吉林", "value": [13046.0, 2.06, "吉林"]},
{"name": "重庆", "value": [12783.0, 2.02, "重庆"]},
{"name": "山西", "value": [12665.0, 2.0, "山西"]},
{"name": "云南", "value": [11832.0, 1.87, "云南"]},
{"name": "新疆", "value": [8444.0, 1.33, "新疆"]},
{"name": "贵州", "value": [8087.0, 1.27, "贵州"]},
{"name": "甘肃", "value": [6331.0, 1.0, "甘肃"]},
{"name": "海南", "value": [3178.0, 0.5, "海南"]},
{"name": "宁夏", "value": [2578.0, 0.41, "宁夏"]},
{"name": "青海", "value": [2122.0, 0.33, "青海"]},
{"name": "西藏", "value": [816.0, 0.13, "西藏"]},
],
},
{
"time": "2014年",
"data": [
{"name": "广东", "value": [67810.0, 9.91, "广东"]},
{"name": "江苏", "value": [65088.0, 9.51, "江苏"]},
{"name": "山东", "value": [59427.0, 8.68, "山东"]},
{"name": "浙江", "value": [40173.0, 5.87, "浙江"]},
{"name": "河南", "value": [34938.0, 5.11, "河南"]},
{"name": "河北", "value": [29421.0, 4.3, "河北"]},
{"name": "辽宁", "value": [28627.0, 4.18, "辽宁"]},
{"name": "四川", "value": [28537.0, 4.17, "四川"]},
{"name": "湖北", "value": [27379.0, 4.0, "湖北"]},
{"name": "湖南", "value": [27037.0, 3.95, "湖南"]},
{"name": "福建", "value": [24056.0, 3.52, "福建"]},
{"name": "上海", "value": [23568.0, 3.44, "上海"]},
{"name": "北京", "value": [21331.0, 3.12, "北京"]},
{"name": "安徽", "value": [20849.0, 3.05, "安徽"]},
{"name": "内蒙古", "value": [17770.0, 2.6, "内蒙古"]},
{"name": "陕西", "value": [17690.0, 2.58, "陕西"]},
{"name": "天津", "value": [15727.0, 2.3, "天津"]},
{"name": "江西", "value": [15715.0, 2.3, "江西"]},
{"name": "广西", "value": [15673.0, 2.29, "广西"]},
{"name": "黑龙江", "value": [15039.0, 2.2, "黑龙江"]},
{"name": "重庆", "value": [14263.0, 2.08, "重庆"]},
{"name": "吉林", "value": [13803.0, 2.02, "吉林"]},
{"name": "云南", "value": [12815.0, 1.87, "云南"]},
{"name": "山西", "value": [12761.0, 1.86, "山西"]},
{"name": "新疆", "value": [9273.0, 1.36, "新疆"]},
{"name": "贵州", "value": [9266.0, 1.35, "贵州"]},
{"name": "甘肃", "value": [6837.0, 1.0, "甘肃"]},
{"name": "海南", "value": [3501.0, 0.51, "海南"]},
{"name": "宁夏", "value": [2752.0, 0.4, "宁夏"]},
{"name": "青海", "value": [2303.0, 0.34, "青海"]},
{"name": "西藏", "value": [921.0, 0.13, "西藏"]},
],
},
{
"time": "2015年",
"data": [
{"name": "广东", "value": [72813.0, 10.07, "广东"]},
{"name": "江苏", "value": [70116.0, 9.7, "江苏"]},
{"name": "山东", "value": [63002.0, 8.72, "山东"]},
{"name": "浙江", "value": [42886.0, 5.93, "浙江"]},
{"name": "河南", "value": [37002.0, 5.12, "河南"]},
{"name": "四川", "value": [30053.0, 4.16, "四川"]},
{"name": "河北", "value": [29806.0, 4.12, "河北"]},
{"name": "湖北", "value": [29550.0, 4.09, "湖北"]},
{"name": "湖南", "value": [28902.0, 4.0, "湖南"]},
{"name": "辽宁", "value": [28669.0, 3.97, "辽宁"]},
{"name": "福建", "value": [25980.0, 3.59, "福建"]},
{"name": "上海", "value": [25123.0, 3.48, "上海"]},
{"name": "北京", "value": [23015.0, 3.18, "北京"]},
{"name": "安徽", "value": [22006.0, 3.04, "安徽"]},
{"name": "陕西", "value": [18022.0, 2.49, "陕西"]},
{"name": "内蒙古", "value": [17832.0, 2.47, "内蒙古"]},
{"name": "广西", "value": [16803.0, 2.32, "广西"]},
{"name": "江西", "value": [16724.0, 2.31, "江西"]},
{"name": "天津", "value": [16538.0, 2.29, "天津"]},
{"name": "重庆", "value": [15717.0, 2.17, "重庆"]},
{"name": "黑龙江", "value": [15084.0, 2.09, "黑龙江"]},
{"name": "吉林", "value": [14063.0, 1.95, "吉林"]},
{"name": "云南", "value": [13619.0, 1.88, "云南"]},
{"name": "山西", "value": [12766.0, 1.77, "山西"]},
{"name": "贵州", "value": [10503.0, 1.45, "贵州"]},
{"name": "新疆", "value": [9325.0, 1.29, "新疆"]},
{"name": "甘肃", "value": [6790.0, 0.94, "甘肃"]},
{"name": "海南", "value": [3703.0, 0.51, "海南"]},
{"name": "宁夏", "value": [2912.0, 0.4, "宁夏"]},
{"name": "青海", "value": [2417.0, 0.33, "青海"]},
{"name": "西藏", "value": [1026.0, 0.14, "西藏"]},
],
},
{
"time": "2016年",
"data": [
{"name": "广东", "value": [80855.0, 10.37, "广东"]},
{"name": "江苏", "value": [77388.0, 9.92, "江苏"]},
{"name": "山东", "value": [68024.0, 8.72, "山东"]},
{"name": "浙江", "value": [47251.0, 6.06, "浙江"]},
{"name": "河南", "value": [40472.0, 5.19, "河南"]},
{"name": "四川", "value": [32935.0, 4.22, "四川"]},
{"name": "湖北", "value": [32665.0, 4.19, "湖北"]},
{"name": "河北", "value": [32070.0, 4.11, "河北"]},
{"name": "湖南", "value": [31551.0, 4.04, "湖南"]},
{"name": "福建", "value": [28811.0, 3.69, "福建"]},
{"name": "上海", "value": [28179.0, 3.61, "上海"]},
{"name": "北京", "value": [25669.0, 3.29, "北京"]},
{"name": "安徽", "value": [24408.0, 3.13, "安徽"]},
{"name": "辽宁", "value": [22247.0, 2.85, "辽宁"]},
{"name": "陕西", "value": [19400.0, 2.49, "陕西"]},
{"name": "江西", "value": [18499.0, 2.37, "江西"]},
{"name": "广西", "value": [18318.0, 2.35, "广西"]},
{"name": "内蒙古", "value": [18128.0, 2.32, "内蒙古"]},
{"name": "天津", "value": [17885.0, 2.29, "天津"]},
{"name": "重庆", "value": [17741.0, 2.27, "重庆"]},
{"name": "黑龙江", "value": [15386.0, 1.97, "黑龙江"]},
{"name": "云南", "value": [14788.0, 1.9, "云南"]},
{"name": "吉林", "value": [14777.0, 1.89, "吉林"]},
{"name": "山西", "value": [13050.0, 1.67, "山西"]},
{"name": "贵州", "value": [11777.0, 1.51, "贵州"]},
{"name": "新疆", "value": [9650.0, 1.24, "新疆"]},
{"name": "甘肃", "value": [7200.0, 0.92, "甘肃"]},
{"name": "海南", "value": [4053.0, 0.52, "海南"]},
{"name": "宁夏", "value": [3169.0, 0.41, "宁夏"]},
{"name": "青海", "value": [2572.0, 0.33, "青海"]},
{"name": "西藏", "value": [1151.0, 0.15, "西藏"]},
],
},
{
"time": "2017年",
"data": [
{"name": "广东", "value": [89705.0, 10.59, "广东"]},
{"name": "江苏", "value": [85870.0, 10.14, "江苏"]},
{"name": "山东", "value": [72634.0, 8.57, "山东"]},
{"name": "浙江", "value": [51768.0, 6.11, "浙江"]},
{"name": "河南", "value": [44553.0, 5.26, "河南"]},
{"name": "四川", "value": [36980.0, 4.37, "四川"]},
{"name": "湖北", "value": [35478.0, 4.19, "湖北"]},
{"name": "河北", "value": [34016.0, 4.02, "河北"]},
{"name": "湖南", "value": [33903.0, 4.0, "湖南"]},
{"name": "福建", "value": [32182.0, 3.8, "福建"]},
{"name": "上海", "value": [30633.0, 3.62, "上海"]},
{"name": "北京", "value": [28015.0, 3.31, "北京"]},
{"name": "安徽", "value": [27018.0, 3.19, "安徽"]},
{"name": "辽宁", "value": [23409.0, 2.76, "辽宁"]},
{"name": "陕西", "value": [21899.0, 2.59, "陕西"]},
{"name": "江西", "value": [20006.0, 2.36, "江西"]},
{"name": "重庆", "value": [19425.0, 2.29, "重庆"]},
{"name": "天津", "value": [18549.0, 2.19, "天津"]},
{"name": "广西", "value": [18523.0, 2.19, "广西"]},
{"name": "云南", "value": [16376.0, 1.93, "云南"]},
{"name": "内蒙古", "value": [16096.0, 1.9, "内蒙古"]},
{"name": "黑龙江", "value": [15903.0, 1.88, "黑龙江"]},
{"name": "山西", "value": [15528.0, 1.83, "山西"]},
{"name": "吉林", "value": [14945.0, 1.76, "吉林"]},
{"name": "贵州", "value": [13541.0, 1.6, "贵州"]},
{"name": "新疆", "value": [10882.0, 1.28, "新疆"]},
{"name": "甘肃", "value": [7460.0, 0.88, "甘肃"]},
{"name": "海南", "value": [4463.0, 0.53, "海南"]},
{"name": "宁夏", "value": [3444.0, 0.41, "宁夏"]},
{"name": "青海", "value": [2625.0, 0.31, "青海"]},
{"name": "西藏", "value": [1311.0, 0.15, "西藏"]},
],
},
{
"time": "2018年",
"data": [
{"name": "广东", "value": [97278.0, 10.63, "广东"]},
{"name": "江苏", "value": [92595.0, 10.12, "江苏"]},
{"name": "山东", "value": [76470.0, 8.36, "山东"]},
{"name": "浙江", "value": [56197.0, 6.14, "浙江"]},
{"name": "河南", "value": [48056.0, 5.25, "河南"]},
{"name": "四川", "value": [40678.0, 4.45, "四川"]},
{"name": "湖北", "value": [39367.0, 4.3, "湖北"]},
{"name": "湖南", "value": [36426.0, 3.98, "湖南"]},
{"name": "河北", "value": [36010.0, 3.94, "河北"]},
{"name": "福建", "value": [35804.0, 3.91, "福建"]},
{"name": "上海", "value": [32680.0, 3.57, "上海"]},
{"name": "北京", "value": [30320.0, 3.31, "北京"]},
{"name": "安徽", "value": [30007.0, 3.28, "安徽"]},
{"name": "辽宁", "value": [25315.0, 2.77, "辽宁"]},
{"name": "陕西", "value": [24438.0, 2.67, "陕西"]},
{"name": "江西", "value": [21985.0, 2.4, "江西"]},
{"name": "重庆", "value": [20363.0, 2.23, "重庆"]},
{"name": "广西", "value": [20353.0, 2.23, "广西"]},
{"name": "天津", "value": [18810.0, 2.06, "天津"]},
{"name": "云南", "value": [17881.0, 1.95, "云南"]},
{"name": "内蒙古", "value": [17289.0, 1.89, "内蒙古"]},
{"name": "山西", "value": [16818.0, 1.84, "山西"]},
{"name": "黑龙江", "value": [16362.0, 1.79, "黑龙江"]},
{"name": "吉林", "value": [15075.0, 1.65, "吉林"]},
{"name": "贵州", "value": [14806.0, 1.62, "贵州"]},
{"name": "新疆", "value": [12199.0, 1.33, "新疆"]},
{"name": "甘肃", "value": [8246.0, 0.9, "甘肃"]},
{"name": "海南", "value": [4832.0, 0.53, "海南"]},
{"name": "宁夏", "value": [3705.0, 0.41, "宁夏"]},
{"name": "青海", "value": [2865.0, 0.31, "青海"]},
{"name": "西藏", "value": [1478.0, 0.16, "西藏"]},
],
},
]
time_list = [str(d) + "年" for d in range(1993, 2019)]
total_num = [
3.4,
4.5,
5.8,
6.8,
7.6,
8.3,
8.8,
9.9,
10.9,
12.1,
14,
16.8,
19.9,
23.3,
28,
33.3,
36.5,
43.7,
52.1,
57.7,
63.4,
68.4,
72.3,
78,
84.7,
91.5,
]
maxNum = 97300
minNum = 30
def get_year_chart(year: str):
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == year
][0]
min_data, max_data = (minNum, maxNum)
data_mark: List = []
i = 0
for x in time_list:
if x == year:
data_mark.append(total_num[i])
else:
data_mark.append("")
i = i + 1
map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
zoom=1,
center=[119.5, 34.5],
is_map_symbol_show=False,
itemstyle_opts={
"normal": {"areaColor": "#323c48", "borderColor": "#404a59"},
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="" + str(year) + "全国分地区GPD情况(单位:亿) 数据来源:国家统计局",
subtitle="",
pos_left="center",
pos_top="top",
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(255,255,255, 0.9)"
),
),
tooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="30",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)
line_chart = (
Line()
.add_xaxis(time_list)
.add_yaxis("", total_num)
.add_yaxis(
"",
data_mark,
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国GDP总量1993-2018年(单位:万亿)", pos_left="72%", pos_top="5%"
)
)
)
bar_x_data = [x[0] for x in map_data]
bar_y_data = [{"name": x[0], "value": x[1][0]} for x in map_data]
bar = (
Bar()
.add_xaxis(xaxis_data=bar_x_data)
.add_yaxis(
series_name="",
y_axis=bar_y_data,
label_opts=opts.LabelOpts(
is_show=True, position="right", formatter="{b} : {c}"
),
)
.reversal_axis()
.set_global_opts(
xaxis_opts=opts.AxisOpts(
max_=maxNum, axislabel_opts=opts.LabelOpts(is_show=False)
),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
tooltip_opts=opts.TooltipOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="top",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)
pie_data = [[x[0], x[1][0]] for x in map_data]
pie = (
Pie()
.add(
series_name="",
data_pair=pie_data,
radius=["15%", "35%"],
center=["80%", "82%"],
itemstyle_opts=opts.ItemStyleOpts(
border_width=1, border_color="rgba(0,0,0,0.3)"
),
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
grid_chart = (
Grid()
.add(
bar,
grid_opts=opts.GridOpts(
pos_left="10", pos_right="45%", pos_top="50%", pos_bottom="5"
),
)
.add(
line_chart,
grid_opts=opts.GridOpts(
pos_left="65%", pos_right="80", pos_top="10%", pos_bottom="50%"
),
)
.add(pie, grid_opts=opts.GridOpts(pos_left="45%", pos_top="60%"))
.add(map_chart, grid_opts=opts.GridOpts())
)
return grid_chart
if __name__ == "__main__":
timeline = Timeline(
init_opts=opts.InitOpts(width="1600px", height="900px", theme=ThemeType.DARK)
)
for y in time_list:
g = get_year_chart(year=y)
timeline.add(g, time_point=str(y))
timeline.add_schema(
orient="vertical",
is_auto_play=True,
is_inverse=True,
play_interval=5000,
pos_left="null",
pos_right="5",
pos_top="20",
pos_bottom="20",
width="60",
label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render("china_gdp_from_1993_to_2018.html")
?77.6 Map - China_gdp_from_1980
import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie
"""
Gallery 使用 pyecharts 1.0.0
参考地址: https://gallery.echartsjs.com/editor.html?c=xSkGI6zLmb
目前无法实现的功能:
1、
"""
data = [
{
"time": 1980,
"data": [
{"name": "台湾", "value": [633.76, 12.28, "台湾"]},
{"name": "香港", "value": [432.47, 8.38, "香港"]},
{"name": "江苏", "value": [319.8, 6.2, "江苏"]},
{"name": "上海", "value": [311.89, 6.05, "上海"]},
{"name": "山东", "value": [292.13, 5.66, "山东"]},
{"name": "辽宁", "value": [281, 5.45, "辽宁"]},
{"name": "广东", "value": [249.65, 4.84, "广东"]},
{"name": "四川", "value": [229.31, 4.44, "四川"]},
{"name": "河南", "value": [229.16, 4.44, "河南"]},
{"name": "黑龙江", "value": [221, 4.28, "黑龙江"]},
],
},
{
"time": 2000,
"data": [
{"name": "台湾", "value": [27435.15, 19.47, "台湾"]},
{"name": "香港", "value": [14201.59, 10.08, "香港"]},
{"name": "广东", "value": [10741.25, 7.62, "广东"]},
{"name": "江苏", "value": [8553.69, 6.07, "江苏"]},
{"name": "山东", "value": [8337.47, 5.92, "山东"]},
{"name": "浙江", "value": [6141.03, 4.36, "浙江"]},
{"name": "河南", "value": [5052.99, 3.59, "河南"]},
{"name": "河北", "value": [5043.96, 3.58, "河北"]},
{"name": "上海", "value": [4771.17, 3.39, "上海"]},
{"name": "辽宁", "value": [4669.1, 3.31, "辽宁"]},
],
},
{
"time": 2005,
"data": [
{"name": "台湾", "value": [30792.89, 12.52, "台湾"]},
{"name": "广东", "value": [22527.37, 9.16, "广东"]},
{"name": "江苏", "value": [18598.69, 7.56, "江苏"]},
{"name": "山东", "value": [18366.87, 7.47, "山东"]},
{"name": "香港", "value": [14869.68, 6.05, "香港"]},
{"name": "浙江", "value": [13417.68, 5.46, "浙江"]},
{"name": "河南", "value": [10587.42, 4.3, "河南"]},
{"name": "河北", "value": [10043.42, 4.08, "河北"]},
{"name": "上海", "value": [9247.66, 3.76, "上海"]},
{"name": "辽宁", "value": [8047.3, 3.27, "辽宁"]},
],
},
{
"time": 2010,
"data": [
{"name": "广东", "value": [46036.25, 9.49, "广东"]},
{"name": "江苏", "value": [41425.48, 8.54, "江苏"]},
{"name": "山东", "value": [39169.92, 8.08, "山东"]},
{"name": "台湾", "value": [30205.64, 6.23, "台湾"]},
{"name": "浙江", "value": [27747.65, 5.72, "浙江"]},
{"name": "河南", "value": [23092.36, 4.76, "河南"]},
{"name": "河北", "value": [20394.26, 4.21, "河北"]},
{"name": "辽宁", "value": [18457.3, 3.81, "辽宁"]},
{"name": "四川", "value": [17185.48, 3.54, "四川"]},
{"name": "上海", "value": [17165.98, 3.54, "上海"]},
],
},
{
"time": 2015,
"data": [
{"name": "广东", "value": [72812.55, 9.35, "广东"]},
{"name": "江苏", "value": [70116.38, 9, "江苏"]},
{"name": "山东", "value": [63002.3, 8.09, "山东"]},
{"name": "浙江", "value": [42886, 5.51, "浙江"]},
{"name": "河南", "value": [37010.25, 4.75, "河南"]},
{"name": "台湾", "value": [32604.52, 4.19, "台湾"]},
{"name": "四川", "value": [30103.1, 3.87, "四川"]},
{"name": "河北", "value": [29806.1, 3.83, "河北"]},
{"name": "湖北", "value": [29550.19, 3.8, "湖北"]},
{"name": "湖南", "value": [29047.2, 3.73, "湖南"]},
],
},
]
def get_year_chart(year: int):
map_data = [
[[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == year
][0]
min_data, max_data = (
min([d[1][0] for d in map_data]),
max([d[1][0] for d in map_data]),
)
map_chart = (
Map()
.add(
series_name="",
data_pair=map_data,
label_opts=opts.LabelOpts(is_show=False),
is_map_symbol_show=False,
itemstyle_opts={
"normal": {"areaColor": "#323c48", "borderColor": "#404a59"},
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="1980年以来中国各省GDP排名变化情况",
subtitle="GDP单位:亿元",
pos_left="center",
pos_top="top",
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(255,255,255, 0.9)"
),
),
tooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)
bar_x_data = [x[0] for x in map_data]
# 这里注释的部分会导致 label 和 value 与 饼图不一致
# 使用下面的 List[Dict] 就可以解决这个问题了。
# bar_y_data = [x[1][0] for x in map_data]
bar_y_data = [{"name": x[0], "value": x[1][0]} for x in map_data]
bar = (
Bar()
.add_xaxis(xaxis_data=bar_x_data)
.add_yaxis(
series_name="",
yaxis_index=1,
yaxis_data=bar_y_data,
label_opts=opts.LabelOpts(
is_show=True, position="right", formatter="{b}: {c}"
),
)
.reversal_axis()
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
tooltip_opts=opts.TooltipOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
rotation=JsCode("Math.PI / 4"),
bounding="raw",
right=110,
bottom=110,
z=100,
),
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(left="center", top="center", z=100),
graphic_shape_opts=opts.GraphicShapeOpts(width=400, height=50),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="rgba(0,0,0,0.3)"
),
),
opts.GraphicText(
graphic_item=opts.GraphicItem(left="center", top="center", z=100),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text=f"{str(year)} 年",
font="bold 26px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(fill="#fff"),
),
),
],
)
],
)
)
pie_data = [[x[0], x[1][0]] for x in map_data]
percent_sum = sum([x[1][1] for x in map_data])
rest_value = 0
for d in map_data:
rest_percent = 100.0
rest_percent = rest_percent - percent_sum
rest_value = d[1][0] * (rest_percent / d[1][1])
pie_data.append(["其他省份", rest_value])
pie = (
Pie()
.add(
series_name="",
data_pair=pie_data,
radius=["12%", "20%"],
center=["75%", "85%"],
itemstyle_opts=opts.ItemStyleOpts(
border_width=1, border_color="rgba(0,0,0,0.3)"
),
)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
grid_chart = (
Grid()
.add(
bar,
grid_opts=opts.GridOpts(
pos_left="10", pos_right="45%", pos_top="70%", pos_bottom="5"
),
)
.add(pie, grid_opts=opts.GridOpts())
.add(map_chart, grid_opts=opts.GridOpts())
)
return grid_chart
# Draw Timeline
time_list = [1980, 2000, 2005, 2010, 2015]
timeline = Timeline(
init_opts=opts.InitOpts(width="1200px", height="800px", theme=ThemeType.DARK)
)
for y in time_list:
g = get_year_chart(year=y)
timeline.add(g, time_point=str(y))
timeline.add_schema(
orient="vertical",
is_auto_play=True,
is_inverse=True,
play_interval=5000,
pos_left="null",
pos_right="5",
pos_top="20",
pos_bottom="20",
width="50",
label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render("china_gdp_from_1980.html")
?77.7 Map - Population_density_of_hongkong_v2
import ssl
import pyecharts.options as opts
from pyecharts.charts import Map
from pyecharts.datasets import register_url
"""
Gallery 使用 pyecharts 1.1.0 和 echarts-china-cities-js
参考地址: https://echarts.apache.org/examples/editor.html?c=map-HK
"""
ssl._create_default_https_context = ssl._create_unverified_context
# 与 pyecharts 注册,当画香港地图的时候,用 echarts-china-cities-js
register_url("https://echarts-maps.github.io/echarts-china-cities-js")
WIKI_LINK = (
"http://zh.wikipedia.org/wiki/"
"%E9%A6%99%E6%B8%AF%E8%A1%8C%E6%94%BF%E5%8D%80%E5%8A%83#cite_note-12"
)
MAP_DATA = [
["中西区", 20057.34],
["湾仔", 15477.48],
["东区", 31686.1],
["南区", 6992.6],
["油尖旺", 44045.49],
["深水埗", 40689.64],
["九龙城", 37659.78],
["黄大仙", 45180.97],
["观塘", 55204.26],
["葵青", 21900.9],
["荃湾", 4918.26],
["屯门", 5881.84],
["元朗", 4178.01],
["北区", 2227.92],
["大埔", 2180.98],
["沙田", 9172.94],
["西贡", 3368],
["离岛", 806.98],
]
NAME_MAP_DATA = {
# "key": "value"
# "name on the hong kong map": "name in the MAP DATA",
"中西区": "中西区",
"东区": "东区",
"离岛区": "离岛",
"九龙城区": "九龙城",
"葵青区": "葵青",
"观塘区": "观塘",
"北区": "北区",
"西贡区": "西贡",
"沙田区": "沙田",
"深水埗区": "深水埗",
"南区": "南区",
"大埔区": "大埔",
"荃湾区": "荃湾",
"屯门区": "屯门",
"湾仔区": "湾仔",
"黄大仙区": "黄大仙",
"油尖旺区": "油尖旺",
"元朗区": "元朗",
}
(
Map(init_opts=opts.InitOpts(width="1400px", height="800px"))
.add(
series_name="香港18区人口密度",
maptype="香港",
data_pair=MAP_DATA,
name_map=NAME_MAP_DATA,
is_map_symbol_show=False,
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="香港18区人口密度 (2011)",
subtitle="人口密度数据来自Wikipedia",
subtitle_link=WIKI_LINK,
),
tooltip_opts=opts.TooltipOpts(
trigger="item", formatter="{b}<br/>{c} (p / km2)"
),
visualmap_opts=opts.VisualMapOpts(
min_=800,
max_=50000,
range_text=["High", "Low"],
is_calculable=True,
range_color=["lightskyblue", "yellow", "orangered"],
),
)
.render("population_density_of_HongKong_v2.html")
)
?77.8 Map - Population_density_of_hongkong
import asyncio
from aiohttp import TCPConnector, ClientSession
import pyecharts.options as opts
from pyecharts.charts import Map
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=map-HK
"""
WIKI_LINK = (
"http://zh.wikipedia.org/wiki/"
"%E9%A6%99%E6%B8%AF%E8%A1%8C%E6%94%BF%E5%8D%80%E5%8A%83#cite_note-12"
)
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/geo/HK.json")
)
MAP_DATA = [
["中西区", 20057.34],
["湾仔", 15477.48],
["东区", 31686.1],
["南区", 6992.6],
["油尖旺", 44045.49],
["深水埗", 40689.64],
["九龙城", 37659.78],
["黄大仙", 45180.97],
["观塘", 55204.26],
["葵青", 21900.9],
["荃湾", 4918.26],
["屯门", 5881.84],
["元朗", 4178.01],
["北区", 2227.92],
["大埔", 2180.98],
["沙田", 9172.94],
["西贡", 3368],
["离岛", 806.98],
]
NAME_MAP_DATA = {
# "key": "value"
# "name on the hong kong map": "name in the MAP DATA",
"Central and Western": "中西区",
"Eastern": "东区",
"Islands": "离岛",
"Kowloon City": "九龙城",
"Kwai Tsing": "葵青",
"Kwun Tong": "观塘",
"North": "北区",
"Sai Kung": "西贡",
"Sha Tin": "沙田",
"Sham Shui Po": "深水埗",
"Southern": "南区",
"Tai Po": "大埔",
"Tsuen Wan": "荃湾",
"Tuen Mun": "屯门",
"Wan Chai": "湾仔",
"Wong Tai Sin": "黄大仙",
"Yau Tsim Mong": "油尖旺",
"Yuen Long": "元朗",
}
(
Map(init_opts=opts.InitOpts(width="1400px", height="800px"))
.add_js_funcs("echarts.registerMap('HK', {});".format(data))
.add(
series_name="香港18区人口密度",
maptype="HK",
data_pair=MAP_DATA,
name_map=NAME_MAP_DATA,
is_map_symbol_show=False,
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="香港18区人口密度 (2011)",
subtitle="人口密度数据来自Wikipedia",
subtitle_link=WIKI_LINK,
),
tooltip_opts=opts.TooltipOpts(
trigger="item", formatter="{b}<br/>{c} (p / km2)"
),
visualmap_opts=opts.VisualMapOpts(
min_=800,
max_=50000,
range_text=["High", "Low"],
is_calculable=True,
range_color=["lightskyblue", "yellow", "orangered"],
),
)
.render("population_density_of_HongKong.html")
)
77.9 Map - Map_china_citites
链接
图片违规
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add(
"商家A",
[list(z) for z in zip(Faker.guangdong_city, Faker.values())],
"china-cities",
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-中国地图(带城市)"),
visualmap_opts=opts.VisualMapOpts(),
)
.render("map_china_cities.html")
)
77.10 Map - Map_without_label
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Map-不显示Label"))
.render("map_without_label.html")
)
77.11 Map - Map_visualmap
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap(连续型)"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
78.BMap:百度地图(难)
- class pyecharts.charts.BMap
class BMap(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
# 是否忽略不存在的坐标,默认值为 False,即不忽略
is_ignore_nonexistent_coord: bool = False
)
- func pyecharts.charts.BMap.add_schema
def add_schema(
# 百度地图开发应用 appkey,请使用到百度地图的开发者自行到百度地图开发者中心
# 注册百度 ak。
baidu_ak: str,
# 当前视角的中心点,用经纬度表示
center: Optional[Sequence] = None,
# 当前视角的缩放比例。
zoom: Optional[Numeric] = None,
# 是否开启鼠标缩放和平移漫游。
is_roam: bool = True,
# 地图样式配置项
map_style: Optional[dict] = None,
)
- func pyecharts.charts.BMap.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: Sequence,
# Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
# from pyecharts.globals import GeoType
# GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
type_: str = "scatter",
# 是否选中图例
is_selected: bool = True,
# 标记图形形状
symbol: Optional[str] = None,
# 标记的大小
symbol_size: Numeric = 12,
# 系列 label 颜色
color: Optional[str] = None,
# 是否是多段线,在画 lines 图情况下
is_polyline: bool = False,
# 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
is_large: bool = False,
# 开启绘制优化的阈值。
large_threshold: Numeric = 2000,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 涟漪特效配置项,参考 `series_options.EffectOpts`
effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),
# 线样式配置项,参考 `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,
)
- func pyecharts.charts.BMap.add_control_panel
def add_control_panel(
# 地图的平移缩放控件
navigation_control_opts: Union[opts.BMapNavigationControlOpts, dict, None] = None,
# 缩略地图控件
overview_map_opts: Union[opts.BMapOverviewMapControlOpts, dict, None] = None,
# 比例尺控件
scale_control_opts: Union[opts.BMapScaleControlOpts, dict, None] = None,
# 切换地图类型的控件
maptype_control_opts: Union[opts.BMapTypeControlOpts, dict, None] = None,
# 版权控件,您可以在地图上添加自己的版权信息。
# 每一个版权信息需要包含如下内容:版权的唯一标识、版权内容和其适用的区域范围。
copyright_control_opts: Union[opts.BMapCopyrightTypeOpts, dict, None] = None,
# 地图定位的控件,使用 HTML5 浏览器定位功能
geo_location_control_opts: Union[opts.BMapGeoLocationControlOpts, dict, None] = None,
)
- BMapNavigationControlOpts:地图的平移缩放控件 class pyecharts.options.BMapNavigationControlOpts
class BMapNavigationControlOpts(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_TOP_LEFT,
# 控件的水平偏移值
offset_width: Numeric = 10,
# 控件的竖直偏移值
offset_height: Numeric = 10,
# 平移缩放控件的类型
# NAVIGATION_CONTROL_LARGE,标准的平移缩放控件(包括平移、缩放按钮和滑块,值为 0
# NAVIGATION_CONTROL_SMALL,仅包含平移和缩放按钮,值为 1
# NAVIGATION_CONTROL_PAN,仅包含平移按钮,值为 2
# NAVIGATION_CONTROL_ZOOM,仅包含缩放按钮,值为 3
type_: Numeric = BMapType.NAVIGATION_CONTROL_LARGE,
# 是否显示级别提示信息
is_show_zoom_info: bool = False,
# 控件是否集成定位功能
is_enable_geo_location: bool = False,
)
- BMapOverviewMapControlOpts:缩略地图控件 class pyecharts.options.BMapOverviewMapControlOpts
class BMapOverviewMapControlOpts(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_BOTTOM_RIGHT,
# 控件的水平偏移值
offset_width: Numeric = 10,
# 控件的竖直偏移值
offset_height: Numeric = 50,
# 缩略地图添加到地图后的开合状态,默认为 False 关闭
is_open: bool = False,
)
- BMapScaleControlOpts:比例尺控件 class pyecharts.options.BMapScaleControlOpts
class BMapScaleControlOpts(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_BOTTOM_RIGHT,
# 控件的水平偏移值
offset_width: Numeric = 10,
# 控件的竖直偏移值
offset_height: Numeric = 50,
)
- BMapTypeControl:切换地图类型的控件 class pyecharts.options.BMapTypeControl
class BMapTypeControl(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_TOP_RIGHT,
# 地图类型属性
# MAPTYPE_CONTROL_HORIZONTAL,按钮水平方式展示,默认采用此类型展示。值为 0
# MAPTYPE_CONTROL_DROPDOWN,按钮呈下拉列表方式展示,值为 1
# MAPTYPE_CONTROL_MAP,以图片方式展示类型控件,设置该类型后无法指定 maptypes 属性,值为 2
type_: Numeric = BMapType.MAPTYPE_CONTROL_HORIZONTAL,
)
- BMapCopyrightType:版权控件 class pyecharts.options.BMapCopyrightType
class BMapCopyrightType(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_BOTTOM_RIGHT,
# 控件的水平偏移值
offset_width: Numeric = 10,
# 控件的竖直偏移值
offset_height: Numeric = 50,
# Copyright 的文本内容, 可以放入 HTML 标签
copyright_: str = "",
)
- BMapGeoLocationControlOpts:地图定位的控件 class pyecharts.options.BMapGeoLocationControlOpts
class BMapGeoLocationControlOpts(
# 控件的停靠位置
# ANCHOR_TOP_LEFT,控件将定位到地图的左上角,值为 0
# ANCHOR_TOP_RIGHT,控件将定位到地图的右上角,值为 1
# ANCHOR_BOTTOM_LEFT,控件将定位到地图的左下角,值为 2
# ANCHOR_BOTTOM_RIGHT,控件将定位到地图的右下角,值为 3
position: Numeric = BMapType.ANCHOR_BOTTOM_RIGHT,
# 控件的水平偏移值
offset_width: Numeric = 10,
# 控件的竖直偏移值
offset_height: Numeric = 50,
# 是否显示定位信息面板。默认显示定位信息面板
is_show_address_bar: bool = True,
# 添加控件时是否进行定位。默认添加控件时不进行定位
is_enable_auto_location: bool = False,
)
78.1 Bmap - Air_quality_baidu_map
78.2 Bmap - Bmap_beijing_bus_routines
78.3 Bmap - Bmap_base
78.4 Bmap - Bmap_heatmap
78.5 Bmap - Bmap_custom
78.6 Bmap - Hiking_trail_in_hangzhou
79.Bar3D:3D柱状图
- class pyecharts.charts.Bar3D(Chart3D)
class Bar3D(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
79.1 Bar3d - Bar3d_punch_card
import pyecharts.options as opts
from pyecharts.charts import Bar3D
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=bar3d-punch-card&gl=1
目前无法实现的功能:
1、光照和阴影暂时无法设置
"""
hours = [
"12a",
"1a",
"2a",
"3a",
"4a",
"5a",
"6a",
"7a",
"8a",
"9a",
"10a",
"11a",
"12p",
"1p",
"2p",
"3p",
"4p",
"5p",
"6p",
"7p",
"8p",
"9p",
"10p",
"11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
data = [
[0, 0, 5],
[0, 1, 1],
[0, 2, 0],
[0, 3, 0],
[0, 4, 0],
[0, 5, 0],
[0, 6, 0],
[0, 7, 0],
[0, 8, 0],
[0, 9, 0],
[0, 10, 0],
[0, 11, 2],
[0, 12, 4],
[0, 13, 1],
[0, 14, 1],
[0, 15, 3],
[0, 16, 4],
[0, 17, 6],
[0, 18, 4],
[0, 19, 4],
[0, 20, 3],
[0, 21, 3],
[0, 22, 2],
[0, 23, 5],
[1, 0, 7],
[1, 1, 0],
[1, 2, 0],
[1, 3, 0],
[1, 4, 0],
[1, 5, 0],
[1, 6, 0],
[1, 7, 0],
[1, 8, 0],
[1, 9, 0],
[1, 10, 5],
[1, 11, 2],
[1, 12, 2],
[1, 13, 6],
[1, 14, 9],
[1, 15, 11],
[1, 16, 6],
[1, 17, 7],
[1, 18, 8],
[1, 19, 12],
[1, 20, 5],
[1, 21, 5],
[1, 22, 7],
[1, 23, 2],
[2, 0, 1],
[2, 1, 1],
[2, 2, 0],
[2, 3, 0],
[2, 4, 0],
[2, 5, 0],
[2, 6, 0],
[2, 7, 0],
[2, 8, 0],
[2, 9, 0],
[2, 10, 3],
[2, 11, 2],
[2, 12, 1],
[2, 13, 9],
[2, 14, 8],
[2, 15, 10],
[2, 16, 6],
[2, 17, 5],
[2, 18, 5],
[2, 19, 5],
[2, 20, 7],
[2, 21, 4],
[2, 22, 2],
[2, 23, 4],
[3, 0, 7],
[3, 1, 3],
[3, 2, 0],
[3, 3, 0],
[3, 4, 0],
[3, 5, 0],
[3, 6, 0],
[3, 7, 0],
[3, 8, 1],
[3, 9, 0],
[3, 10, 5],
[3, 11, 4],
[3, 12, 7],
[3, 13, 14],
[3, 14, 13],
[3, 15, 12],
[3, 16, 9],
[3, 17, 5],
[3, 18, 5],
[3, 19, 10],
[3, 20, 6],
[3, 21, 4],
[3, 22, 4],
[3, 23, 1],
[4, 0, 1],
[4, 1, 3],
[4, 2, 0],
[4, 3, 0],
[4, 4, 0],
[4, 5, 1],
[4, 6, 0],
[4, 7, 0],
[4, 8, 0],
[4, 9, 2],
[4, 10, 4],
[4, 11, 4],
[4, 12, 2],
[4, 13, 4],
[4, 14, 4],
[4, 15, 14],
[4, 16, 12],
[4, 17, 1],
[4, 18, 8],
[4, 19, 5],
[4, 20, 3],
[4, 21, 7],
[4, 22, 3],
[4, 23, 0],
[5, 0, 2],
[5, 1, 1],
[5, 2, 0],
[5, 3, 3],
[5, 4, 0],
[5, 5, 0],
[5, 6, 0],
[5, 7, 0],
[5, 8, 2],
[5, 9, 0],
[5, 10, 4],
[5, 11, 1],
[5, 12, 5],
[5, 13, 10],
[5, 14, 5],
[5, 15, 7],
[5, 16, 11],
[5, 17, 6],
[5, 18, 0],
[5, 19, 5],
[5, 20, 3],
[5, 21, 4],
[5, 22, 2],
[5, 23, 0],
[6, 0, 1],
[6, 1, 0],
[6, 2, 0],
[6, 3, 0],
[6, 4, 0],
[6, 5, 0],
[6, 6, 0],
[6, 7, 0],
[6, 8, 0],
[6, 9, 0],
[6, 10, 1],
[6, 11, 0],
[6, 12, 2],
[6, 13, 1],
[6, 14, 3],
[6, 15, 4],
[6, 16, 0],
[6, 17, 0],
[6, 18, 0],
[6, 19, 0],
[6, 20, 1],
[6, 21, 2],
[6, 22, 2],
[6, 23, 6],
]
data = [[d[1], d[0], d[2]] for d in data]
(
Bar3D(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add(
series_name="",
data=data,
xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),
yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=20,
range_color=[
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
],
)
)
.render("bar3d_punch_card.html")
)
79.2 Bar3d - Bar3d_base
import random
from pyecharts import options as opts
from pyecharts.charts import Bar3D
from pyecharts.faker import Faker
data = [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)]
c = (
Bar3D()
.add(
"",
[[d[1], d[0], d[2]] for d in data],
xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="category"),
yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="category"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=20),
title_opts=opts.TitleOpts(title="Bar3D-基本示例"),
)
.render("bar3d_base.html")
)
79.3 Bar3d - Bar3d_stack
import random
from pyecharts import options as opts
from pyecharts.charts import Bar3D
x_data = y_data = list(range(10))
def generate_data():
data = []
for j in range(10):
for k in range(10):
value = random.randint(0, 9)
data.append([j, k, value * 2 + 4])
return data
bar3d = Bar3D()
for _ in range(10):
bar3d.add(
"",
generate_data(),
shading="lambert",
xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value"),
yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
bar3d.set_global_opts(title_opts=opts.TitleOpts("Bar3D-堆叠柱状图示例"))
bar3d.set_series_opts(**{"stack": "stack"})
bar3d.render("bar3d_stack.html")
80.Line3D:3D折线图
class Line3D(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
80.1 Line3d - Line3d_autorotate
import math
from pyecharts import options as opts
from pyecharts.charts import Line3D
from pyecharts.faker import Faker
data = []
for t in range(0, 25000):
_t = t / 1000
x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
z = _t + 2.0 * math.sin(75 * _t)
data.append([x, y, z])
c = (
Line3D()
.add(
"",
data,
xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="value"),
yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="value"),
grid3d_opts=opts.Grid3DOpts(
width=100, depth=100, rotate_speed=150, is_rotate=True
),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=30, min_=0, range_color=Faker.visual_color
),
title_opts=opts.TitleOpts(title="Line3D-旋转的弹簧"),
)
.render("line3d_autorotate.html")
)
80.2 Line3d - Line3d_rectangular_projection
import math
import pyecharts.options as opts
from pyecharts.charts import Line3D
week_en = "Saturday Friday Thursday Wednesday Tuesday Monday Sunday".split()
clock = (
"12a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12p "
"1p 2p 3p 4p 5p 6p 7p 8p 9p 10p 11p".split()
)
data = []
for t in range(0, 25000):
_t = t / 1000
x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
z = _t + 2.0 * math.sin(75 * _t)
data.append([x, y, z])
(
Line3D()
.add(
"",
data,
xaxis3d_opts=opts.Axis3DOpts(data=clock, type_="value"),
yaxis3d_opts=opts.Axis3DOpts(data=week_en, type_="value"),
grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
dimension=2,
max_=30,
min_=0,
range_color=[
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
],
)
)
.render("line3d_rectangular_projection.html")
)
81.Scatter3D:3D散点图
- class pyecharts.charts.Scatter3D(Chart3D)
class Scatter3D(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
81.1 Scatter3d - Scatter3d
import asyncio
from aiohttp import TCPConnector, ClientSession
import pyecharts.options as opts
from pyecharts.charts import Scatter3D
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=scatter3d&gl=1&theme=dark
目前无法实现的功能:
1、暂时无法对 Grid3D 设置 轴线和轴坐标的 style (非白色背景下有问题)
"""
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/nutrients.json"
)
)
# 列名映射
field_indices = {
"calcium": 3,
"calories": 12,
"carbohydrate": 8,
"fat": 10,
"fiber": 5,
"group": 1,
"id": 16,
"monounsat": 14,
"name": 0,
"polyunsat": 15,
"potassium": 7,
"protein": 2,
"saturated": 13,
"sodium": 4,
"sugars": 9,
"vitaminc": 6,
"water": 11,
}
# 配置 config
config_xAxis3D = "protein"
config_yAxis3D = "fiber"
config_zAxis3D = "sodium"
config_color = "fiber"
config_symbolSize = "vitaminc"
# 构造数据
data = [
[
item[field_indices[config_xAxis3D]],
item[field_indices[config_yAxis3D]],
item[field_indices[config_zAxis3D]],
item[field_indices[config_color]],
item[field_indices[config_symbolSize]],
index,
]
for index, item in enumerate(data)
]
(
Scatter3D(
init_opts=opts.InitOpts(width="1440px", height="720px")
) # bg_color="black"
.add(
series_name="",
data=data,
xaxis3d_opts=opts.Axis3DOpts(
name=config_xAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
yaxis3d_opts=opts.Axis3DOpts(
name=config_yAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
zaxis3d_opts=opts.Axis3DOpts(
name=config_zAxis3D,
type_="value",
# textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
)
.set_global_opts(
visualmap_opts=[
opts.VisualMapOpts(
type_="color",
is_calculable=True,
dimension=3,
pos_top="10",
max_=79 / 2,
range_color=[
"#1710c0",
"#0b9df0",
"#00fea8",
"#00ff0d",
"#f5f811",
"#f09a09",
"#fe0300",
],
),
opts.VisualMapOpts(
type_="size",
is_calculable=True,
dimension=4,
pos_bottom="10",
max_=2.4 / 2,
range_size=[10, 40],
),
]
)
.render("scatter3d.html")
)
82.Surface3D:3D曲面图
- class pyecharts.charts.Surface3D(Chart3D)
class Surface3D(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
82.1 Surface3d - Surface_wave
import math
from typing import Union
import pyecharts.options as opts
from pyecharts.charts import Surface3D
"""
Gallery 使用 pyecharts 1.1.0
参考地址: https://echarts.apache.org/examples/editor.html?c=surface-wave&gl=1
目前无法实现的功能:
1、暂时无法设置光滑表面 wireframe
2、暂时无法把 visualmap 进行隐藏
"""
def float_range(start: int, end: int, step: Union[int, float], round_number: int = 2):
"""
浮点数 range
:param start: 起始值
:param end: 结束值
:param step: 步长
:param round_number: 精度
:return: 返回一个 list
"""
temp = []
while True:
if start < end:
temp.append(round(start, round_number))
start += step
else:
break
return temp
def surface3d_data():
for t0 in float_range(-3, 3, 0.05):
y = t0
for t1 in float_range(-3, 3, 0.05):
x = t1
z = math.sin(x ** 2 + y ** 2) * x / 3.14
yield [x, y, z]
(
Surface3D(init_opts=opts.InitOpts(width="1600px", height="800px"))
.add(
series_name="",
shading="color",
data=list(surface3d_data()),
xaxis3d_opts=opts.Axis3DOpts(type_="value"),
yaxis3d_opts=opts.Axis3DOpts(type_="value"),
grid3d_opts=opts.Grid3DOpts(width=100, height=40, depth=100),
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
dimension=2,
max_=1,
min_=-1,
range_color=[
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
],
)
)
.render("surface_wave.html")
)
83.Map3D - 三维地图
- class pyecharts.charts.Map3D(Chart3D)
class Map3D(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
- func pyecharts.charts.Map3D.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 数据项 (坐标点名称,坐标点值)
data_pair: types.Sequence,
# 叠加图的类型(目前只支持 Bar3D,Line3D,Lines3D,Scatter3D)
type_: ChartType = None,
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 是否选中图例
is_selected: bool = True,
# 是否显示标记图形
is_map_symbol_show: bool = True,
# 使用的 grid3D 组件的索引。默认使用第一个 grid3D 组件。
grid_3d_index: types.Numeric = 0,
# 坐标轴使用的 geo3D 组件的索引。默认使用第一个 geo3D 组件。
geo_3d_index: types.Numeric = 0,
# 坐标轴使用的 globe 组件的索引。默认使用第一个 globe 组件。
globe_index: types.Numeric = 0,
# 仅在 bar3D 下起作用
# 设置柱子的大小
bar_size: types.Optional[types.Numeric] = None,
# 仅在 bar3D 下起作用
# 柱子的倒角尺寸。支持设置为从 0 到 1 的值。默认为 0,即没有倒角。
bevel_size: types.Numeric = 0,
# 仅在 bar3D 下起作用
# 柱子倒角的光滑/圆润度,数值越大越光滑/圆润。
bevel_smoothness: types.Numeric = 2,
# 仅在 bar3D 下起作用
# 柱状图堆叠,相同 stack 值的柱状图系列数据会有叠加。
# 注意不同系列需要叠加的数据项在数组中的索引必须是一样的。
stack: types.Optional[str] = None,
# 仅在 bar3D 下起作用
# 最小柱子高度。
min_height: types.Numeric = 2,
# 仅在 Scatter3D 起作用;
# 散点的形状。默认为圆形。
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'path://' 将图标设置为任意的矢量路径。
# 这种方式相比于使用图片的方式,不用担心因为缩放而产生锯齿或模糊,而且可以设置为任意颜色。
# 路径图形会自适应调整为合适(如果是 symbol 的话就是 symbolSize)的大小。
symbol: str = "circle",
# 仅在 Scatter3D 起作用;
# 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,例如 [20, 10] 表示标记宽为20,高为10。
symbol_size: types.Union[types.Numeric, types.Sequence, types.JSFunc] = 10,
# 混合模式,目前支持'source-over','lighter'。
# 默认使用的'source-over'是通过 alpha 混合。
# 而'lighter'是叠加模式,该模式可以让数据集中的区域因为叠加而产生高亮的效果。
blend_mode: str = "source-over",
# 仅在 Lines3D 起作用
# 是否是多段线。
# 默认为 false,只能用于绘制只有两个端点的线段(表现为被赛尔曲线)。
# 如果该配置项为 true,则可以在 data.coords 中设置多于 2 个的顶点用来绘制多段线,在绘制路线轨迹的时候比较有用。
is_polyline: bool = False,
# 仅在 Lines3D 起作用
# 飞线的尾迹特效,参考 `series_options.Line3DEffectOpts`
effect: types.Lines3DEffect = None,
# 仅在 Line3D,Lines3D 起作用
# 飞线的线条样式,参考 `series_options.LineStyleOpts`
linestyle_opts: types.LineStyle = opts.LineStyleOpts(),
# 仅在 Scatter3D,Bar3D,Map3D 起作用
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: types.Label = opts.LabelOpts(),
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: types.Tooltip = None,
# 仅在 Scatter3D,Bar3D,Map3D 起作用
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: types.ItemStyle = None,
# 仅在 Scatter3D,Bar3D,Map3D 起作用
# 高亮标签配置项,参考 `series_options.LabelOpts`
emphasis_label_opts: types.Label = None,
# 仅在 Scatter3D,Bar3D,Map3D 起作用
# 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
emphasis_itemstyle_opts: types.ItemStyle = None,
# 三维地图中三维图形的着色效果。echarts-gl 中支持下面三种着色方式:
# color: 只显示颜色,不受光照等其它因素的影响。
# lambert: 通过经典的 lambert 着色表现光照带来的明暗。
# realistic: 真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
# ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。
shading: types.Optional[str] = None,
# 真实感材质相关的配置项,在 shading 为'realistic'时有效。
realistic_material_opts: types.Optional[types.Map3DRealisticMaterial] = None,
# lambert 材质相关的配置项,在 shading 为'lambert'时有效。
lambert_material_opts: types.Optional[types.Map3DLambertMaterial] = None,
# color 材质相关的配置项,在 shading 为'color'时有效。
color_material_opts: types.Optional[types.Map3DColorMaterial] = None,
# 组件所在的层。
zlevel: types.Numeric = -10,
# 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。
is_silent: bool = False,
# 是否开启动画。
is_animation: bool = True,
# 过渡动画的时长。
animation_duration_update: types.Numeric = 100,
# 过渡动画的缓动效果。
animation_easing_update: types.Numeric = "cubicOut",
):
- func pyecharts.charts.Map3D.add_schema
def add_schema(
# 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 名称
name: types.Optional[str] = None,
# 三维地理坐标系组件在三维场景中的宽度。
# 具体图示在此: https://www.echartsjs.com/zh/documents/asset/gl/img/geo-size.png
box_width: types.Optional[types.Numeric] = 100,
# 三维地理坐标系组件在三维场景中的高度。
# 组件高度。这个高度包含三维地图上的柱状图、散点图的高度。
box_height: types.Optional[types.Numeric] = 10,
# 三维地理坐标系组件在三维场景中的深度。
# 组件深度默认自动,保证三维组件的显示比例跟输入的 GeoJSON 的比例相同。
box_depth: types.Optional[types.Numeric] = None,
# 三维地图每个区域的高度。这个高度是模型的高度,小于 boxHeight。
# boxHeight - regionHeight 这一片区域会被用于三维柱状图,散点图等的展示。
region_height: types.Optional[types.Numeric] = 3,
# 环境贴图。支持纯色、渐变色、全景贴图的 url。
# 默认为 'auto',在配置有 light.ambientCubemap.texture 的时候会使用该纹理作为环境贴图。
# 否则则不显示环境贴图。
# 示例:
# // 配置为全景贴图
# environment: 'asset/starfield.jpg'
# // 配置为纯黑色的背景
# environment: '#000'
# // 配置为垂直渐变的背景
# environment: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
# offset: 0, color: '#00aaff' // 天空颜色
# }, {
# offset: 0.7, color: '#998866' // 地面颜色
# }, {
# offset: 1, color: '#998866' // 地面颜色
# }], false)
environment: types.Optional[types.JSFunc] = None,
# 是否显示地面。
# 地面可以让整个组件有个“摆放”的地方,从而使整个场景看起来更真实,更有模型感。
is_show_ground: bool = False,
# 地面颜色。
ground_color: str = "#aaa",
# instancing会将 GeoJSON 中所有的 geometry 合并成一个
# 在 GeoJSON 拥有特别多(上千)的 geometry 时可以有效提升绘制效率。
is_instancing: bool = False,
# Map3D 的 Label 设置
map3d_label: types.Map3DLabel = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: types.ItemStyle = None,
# 高亮标签配置项,参考 `series_options.LabelOpts`
emphasis_label_opts: types.Label = None,
# 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
emphasis_itemstyle_opts: types.ItemStyle = None,
# 三维地理坐标系组件中三维图形的着色效果。echarts-gl 中支持下面三种着色方式:
# color: 只显示颜色,不受光照等其它因素的影响。
# lambert: 通过经典的 lambert 着色表现光照带来的明暗。
# realistic: 真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
# ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。
shading: types.Optional[str] = None,
# 真实感材质相关的配置项,在 shading 为'realistic'时有效。
realistic_material_opts: types.Optional[types.Map3DRealisticMaterial] = None,
# lambert 材质相关的配置项,在 shading 为'lambert'时有效。
lambert_material_opts: types.Optional[types.Map3DLambertMaterial] = None,
# color 材质相关的配置项,在 shading 为'color'时有效。
color_material_opts: types.Optional[types.Map3DColorMaterial] = None,
# 光照相关的设置。在 shading 为 'color' 的时候无效。
# 光照的设置会影响到组件以及组件所在坐标系上的所有图表。
# 合理的光照设置能够让整个场景的明暗变得更丰富,更有层次。
light_opts: types.Optional[types.Map3DLight] = None,
# 后处理特效的相关配置。后处理特效可以为画面添加高光、景深、环境光遮蔽(SSAO)、调色等效果。可以让整个画面更富有质感。
post_effect_opts: types.Optional[types.Map3DPostEffect] = None,
# 是否开启分帧超采样。默认在开启 postEffect 后也会同步开启。
is_enable_super_sampling: types.Union[str, bool] = "auto",
# viewControl用于鼠标的旋转,缩放等视角控制。
view_control_opts: types.Optional[types.Map3DViewControl] = None,
# 组件所在的层。
zlevel: types.Optional[types.Numeric] = -10,
# 组件的视图离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: types.Union[types.Numeric, str] = "auto",
# 组件的视图离容器上侧的距离。
pos_top: types.Union[types.Numeric, str] = "auto",
# 组件的视图离容器右侧的距离。
pos_right: types.Union[types.Numeric, str] = "auto",
# 组件的视图离容器下侧的距离。
pos_bottom: types.Union[types.Numeric, str] = "auto",
# 组件的视图宽度。
pos_width: types.Union[types.Numeric, str] = "auto",
# 组件的视图高度。
pos_height: types.Union[types.Numeric, str] = "auto",
)
- class pyecharts.options.charts_options.Map3DLabelOpts
class Map3DLabelOpts(
# 是否显示标签。
is_show: bool = True,
# 标签距离图形的距离,在三维的散点图中这个距离是屏幕空间的像素值,其它图中这个距离是相对的三维距离。
distance: Numeric = None,
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 模板变量有:
# {a}:系列名。
# {b}:数据名。
# {c}:数据值。
formatter: Optional[JSFunc] = None,
# 标签的字体样式。
text_style: Union[TextStyleOpts, dict, None] = None,
)
- class pyecharts.options.charts_options.Map3DRealisticMaterialOpts
class Map3DRealisticMaterialOpts(
# 材质细节的纹理贴图。
detail_texture: Optional[JSFunc] = None,
# 材质细节纹理的平铺。默认为1,也就是拉伸填满。大于 1 的时候,数字表示纹理平铺重复的次数。
# 注: 使用平铺需要 detailTexture 的高宽是 2 的 n 次方。例如 512x512,如果是 200x200 的纹理无法使用平铺。
texture_tiling: Numeric = 1,
# 材质细节纹理的位移。
texture_offset: Numeric = 0,
# roughness 属性用于表示材质的粗糙度,0为完全光滑,1完全粗糙,中间的值则是介于这两者之间。
roughness: Numeric = 0.5,
# metalness属性用于表示材质是金属还是非金属,0为非金属,1为金属,中间的值则是介于这两者之间。
# 通常设成0和1就能满足大部分场景了。
metalness: Numeric = 0,
# 粗糙度调整,在使用粗糙度贴图的时候有用。可以对贴图整体的粗糙度进行调整。
# 默认为 0.5,0的时候为完全光滑,1的时候为完全粗糙。
roughness_adjust: Numeric = 0.5,
# 金属度调整,在使用金属度贴图的时候有用。可以对贴图整体的金属度进行调整。
# 默认为 0.5,0的时候为非金属,1的时候为金属。
metalness_adjust: Numeric = 0.5,
# 材质细节的法线贴图。
# 使用法线贴图可以在较少的顶点下依然表现出物体表面丰富的明暗细节。
normal_texture: Optional[JSFunc] = None,
)
- class pyecharts.options.charts_options.Map3DLambertMaterialOpts
class Map3DLambertMaterialOpts(
# 材质细节的纹理贴图。
detail_texture: Optional[JSFunc] = None,
# 材质细节纹理的平铺。默认为1,也就是拉伸填满。大于 1 的时候,数字表示纹理平铺重复的次数。
# 注: 使用平铺需要 detailTexture 的高宽是 2 的 n 次方。例如 512x512,如果是 200x200 的纹理无法使用平铺。
texture_tiling: Numeric = 1,
# 材质细节纹理的位移。
texture_offset: Numeric = 0,
)
- class pyecharts.options.charts_options.Map3DColorMaterialOpts
class Map3DColorMaterialOpts(
# 材质细节的纹理贴图。
detail_texture: Optional[JSFunc] = None,
# 材质细节纹理的平铺。默认为1,也就是拉伸填满。大于 1 的时候,数字表示纹理平铺重复的次数。
# 注: 使用平铺需要 detailTexture 的高宽是 2 的 n 次方。例如 512x512,如果是 200x200 的纹理无法使用平铺。
texture_tiling: Numeric = 1,
# 材质细节纹理的位移。
texture_offset: Numeric = 0,
)
- class pyecharts.options.charts_options.Map3DLightOpts
class Map3DLightOpts(
# 主光源的颜色。
main_color: str = "#fff",
# 主光源的强度。
main_intensity: Numeric = 1,
# 主光源是否投射阴影。默认为关闭。
# 开启阴影可以给场景带来更真实和有层次的光照效果。但是同时也会增加程序的运行开销。
is_main_shadow: bool = False,
# 阴影的质量。可选'low', 'medium', 'high', 'ultra'
main_shadow_quality: str = "medium",
# 主光源绕 x 轴,即上下旋转的角度。配合 beta 控制光源的方向。
# 图示: https://www.echartsjs.com/zh/documents/asset/gl/img/light-alpha-beta.png
main_alpha: Numeric = 40,
# 主光源绕 y 轴,即左右旋转的角度。
main_beta: Numeric = 40,
# 环境光的颜色。
ambient_color: str = "#fff",
# 环境光的强度。
ambient_intensity: Numeric = 0.2,
# 环境光贴图的 url,支持使用.hdr格式的 HDR 图片。
# 可以从 http://www.hdrlabs.com/sibl/archive.html 等网站获取 .hdr 的资源。
ambient_cubemap_texture: Optional[str] = None,
# 漫反射的强度。
ambient_cubemap_diffuse_intensity: Numeric = 0.5,
# 高光反射的强度。
ambient_cubemap_specular_intensity: Numeric = 0.5,
)
- class pyecharts.options.charts_options.Map3DPostEffectOpts
class Map3DPostEffectOpts(
# 是否开启后处理特效。默认关闭。
is_enable: bool = False,
# 是否开启光晕特效。
is_bloom_enable: bool = False,
# 光晕的强度,默认为 0.1
bloom_intensity: Numeric = 0.1,
# 是否开启景深。
is_depth_field_enable: bool = False,
# 初始的焦距,用户可以点击区域自动聚焦。
depth_field_focal_distance: Numeric = 50,
# 完全聚焦的区域范围,在此范围内的物体时完全清晰的,不会有模糊
depth_field_focal_range: Numeric = 20,
# 镜头的F值,值越小景深越浅。
depth_field_fstop: Numeric = 2.8,
# 焦外的模糊半径
depth_field_blur_radius: Numeric = 10,
# 是否开启环境光遮蔽。默认不开启。
is_ssao_enable: bool = False,
# 环境光遮蔽的质量。支持'low', 'medium', 'high', 'ultra'。
ssao_quality: str = "medium",
# 环境光遮蔽的采样半径。半径越大效果越自然,但是需要设置较高的'quality'。
ssao_radius: Numeric = 2,
# 环境光遮蔽的强度。值越大颜色越深。
ssao_intensity: Numeric = 1,
# 是否开启颜色纠正。
is_color_correction_enable: bool = False,
# 参考 Echarts 官方解释。
# 地址:https://www.echartsjs.com/zh/option-gl.html#geo3D.postEffect.colorCorrection.lookupTexture
color_correction_lookup_texture: Optional[JSFunc] = None,
# 画面的曝光。
color_correction_exposure: Numeric = 0,
# 画面的亮度。
color_correction_brightness: Numeric = 0,
# 画面的对比度。
color_correction_contrast: Numeric = 1,
# 画面的饱和度。
color_correction_saturation: Numeric = 1,
# 是否开启 FXAA。默认为不开启。
is_fxaa_enable: bool = False,
)
- class pyecharts.options.charts_options.Map3DViewControlOpts
class Map3DViewControlOpts(
# 投影方式,默认为透视投影'perspective',也支持设置为正交投影'orthographic'。
projection: str = "perspective",
# 是否开启视角绕物体的自动旋转查看。
auto_rotate: bool = False,
# 物体自转的方向。默认是 'cw' 也就是从上往下看是顺时针方向,也可以取 'ccw',既从上往下看为逆时针方向。
auto_rotate_direction: str = "cw",
# 物体自转的速度。单位为角度 / 秒,默认为10 ,也就是36秒转一圈。
auto_rotate_speed: Numeric = 10,
# 在鼠标静止操作后恢复自动旋转的时间间隔。在开启 autoRotate 后有效。
auto_rotate_after_still: Numeric = 3,
# 鼠标进行旋转,缩放等操作时的迟滞因子,在大于 0 的时候鼠标在停止操作后,视角仍会因为一定的惯性继续运动(旋转和缩放)。
damping: Numeric = 0.8,
# 旋转操作的灵敏度,值越大越灵敏。支持使用数组分别设置横向和纵向的旋转灵敏度。
# 默认为1。
# 设置为0后无法旋转。
# // 无法旋转
# rotateSensitivity: 0
# // 只能横向旋转
# rotateSensitivity: [1, 0]
# // 只能纵向旋转
# rotateSensitivity: [0, 1]
rotate_sensitivity: Union[Numeric, Sequence] = 1,
# 缩放操作的灵敏度,值越大越灵敏。默认为1。
# 设置为0后无法缩放。
zoom_sensitivity: Numeric = 1,
# 平移操作的灵敏度,值越大越灵敏。支持使用数组分别设置横向和纵向的平移灵敏度
# 默认为1。
# 设置为0后无法平移。
pan_sensitivity: Numeric = 1,
# 平移操作使用的鼠标按键,支持:
# 'left' 鼠标左键(默认)
# 'middle' 鼠标中键
# 'right' 鼠标右键
# 注意:如果设置为鼠标右键则会阻止默认的右键菜单。
pan_mouse_button: str = "left",
# 旋转操作使用的鼠标按键,支持:
# 'left' 鼠标左键(默认)
# 'middle' 鼠标中键
# 'right' 鼠标右键
# 注意:如果设置为鼠标右键则会阻止默认的右键菜单。
rotate_mouse_button: str = "middle",
# 默认视角距离主体的距离,对于 globe 来说是距离地球表面的距离
# 对于 grid3D 和 geo3D 等其它组件来说是距离中心原点的距离。
# 在 projection 为'perspective'的时候有效。
distance: Numeric = 100,
# 视角通过鼠标控制能拉近到主体的最小距离。在 projection 为'perspective'的时候有效。
min_distance: Numeric = 40,
# 视角通过鼠标控制能拉远到主体的最大距离。在 projection 为'perspective'的时候有效。
max_distance: Numeric = 400,
# 正交投影的大小。在 projection 为'orthographic'的时候有效。
orthographic_size: Numeric = 100,
# 正交投影缩放的最大值。在 projection 为'orthographic'的时候有效。
min_orthographic_size: Numeric = 20,
# 正交投影缩放的最小值。在 projection 为'orthographic'的时候有效。
max_orthographic_size: Numeric = 400,
# 视角绕 x 轴,即上下旋转的角度。配合 beta 可以控制视角的方向。
alpha: Numeric = 40,
# 视角绕 y 轴,即左右旋转的角度。
beta: Numeric = 0,
# 视角中心点,旋转也会围绕这个中心点旋转,默认为[0,0,0]。
center: Optional[Sequence] = None,
# 上下旋转的最小 alpha 值。即视角能旋转到达最上面的角度。
min_alpha: Numeric = 5,
# 上下旋转的最大 alpha 值。即视角能旋转到达最下面的角度。
max_alpha: Numeric = 90,
# 左右旋转的最小 beta 值。即视角能旋转到达最左的角度。
min_beta: Numeric = -80,
# 左右旋转的最大 beta 值。即视角能旋转到达最右的角度。
max_beta: Numeric = 80,
# 是否开启动画。
animation: bool = True,
# 过渡动画的时长。
animation_duration_update: Numeric = 1000,
# 过渡动画的缓动效果。
animation_easing_update: str = "cubicInOut",
)
83.1 Map3d - Map3d_with_lines3d
from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
example_data = [
[[119.107078, 36.70925, 1000], [116.587245, 35.415393, 1000]],
[[117.000923, 36.675807], [120.355173, 36.082982]],
[[118.047648, 36.814939], [118.66471, 37.434564]],
[[121.391382, 37.539297], [119.107078, 36.70925]],
[[116.587245, 35.415393], [122.116394, 37.509691]],
[[119.461208, 35.428588], [118.326443, 35.065282]],
[[116.307428, 37.453968], [115.469381, 35.246531]],
]
c = (
Map3D()
.add_schema(
maptype="山东",
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(5,101,123)",
opacity=1,
border_width=0.8,
border_color="rgb(62,215,213)",
),
light_opts=opts.Map3DLightOpts(
main_color="#fff",
main_intensity=1.2,
is_main_shadow=False,
main_alpha=55,
main_beta=10,
ambient_intensity=0.3,
),
view_control_opts=opts.Map3DViewControlOpts(center=[-10, 0, 10]),
post_effect_opts=opts.Map3DPostEffectOpts(is_enable=False),
)
.add(
series_name="",
data_pair=example_data,
type_=ChartType.LINES3D,
effect=opts.Lines3DEffectOpts(
is_show=True,
period=4,
trail_width=3,
trail_length=0.5,
trail_color="#f00",
trail_opacity=1,
),
linestyle_opts=opts.LineStyleOpts(is_show=False, color="#fff", opacity=0),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Map3D-Lines3D"))
.render("map3d_with_lines3d.html")
)
83.2 Map3d - Map3d_with_scatter3d
from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode
example_data = [
("黑龙江", [127.9688, 45.368, 100]),
("内蒙古", [110.3467, 41.4899, 100]),
("吉林", [125.8154, 44.2584, 100]),
("辽宁", [123.1238, 42.1216, 100]),
("河北", [114.4995, 38.1006, 100]),
("天津", [117.4219, 39.4189, 100]),
("山西", [112.3352, 37.9413, 100]),
("陕西", [109.1162, 34.2004, 100]),
("甘肃", [103.5901, 36.3043, 100]),
("宁夏", [106.3586, 38.1775, 100]),
("青海", [101.4038, 36.8207, 100]),
("新疆", [87.9236, 43.5883, 100]),
("西藏", [91.11, 29.97, 100]),
("四川", [103.9526, 30.7617, 100]),
("重庆", [108.384366, 30.439702, 100]),
("山东", [117.1582, 36.8701, 100]),
("河南", [113.4668, 34.6234, 100]),
("江苏", [118.8062, 31.9208, 100]),
("安徽", [117.29, 32.0581, 100]),
("湖北", [114.3896, 30.6628, 100]),
("浙江", [119.5313, 29.8773, 100]),
("福建", [119.4543, 25.9222, 100]),
("江西", [116.0046, 28.6633, 100]),
("湖南", [113.0823, 28.2568, 100]),
("贵州", [106.6992, 26.7682, 100]),
("广西", [108.479, 23.1152, 100]),
("海南", [110.3893, 19.8516, 100]),
("上海", [121.4648, 31.2891, 100]),
]
c = (
Map3D()
.add_schema(
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(5,101,123)",
opacity=1,
border_width=0.8,
border_color="rgb(62,215,213)",
),
map3d_label=opts.Map3DLabelOpts(
is_show=False,
formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
),
emphasis_label_opts=opts.LabelOpts(
is_show=False,
color="#fff",
font_size=10,
background_color="rgba(0,23,11,0)",
),
light_opts=opts.Map3DLightOpts(
main_color="#fff",
main_intensity=1.2,
main_shadow_quality="high",
is_main_shadow=False,
main_beta=10,
ambient_intensity=0.3,
),
)
.add(
series_name="Scatter3D",
data_pair=example_data,
type_=ChartType.SCATTER3D,
bar_size=1,
shading="lambert",
label_opts=opts.LabelOpts(
is_show=False,
formatter=JsCode("function(data){return data.name + ' ' + data.value[2];}"),
),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Map3D-Scatter3D"))
.render("map3d_with_scatter3d.html")
)
83.3 Map3d - Map3d_with_bar3d
from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode
example_data = [
("黑龙江", [127.9688, 45.368, 100]),
("内蒙古", [110.3467, 41.4899, 300]),
("吉林", [125.8154, 44.2584, 300]),
("辽宁", [123.1238, 42.1216, 300]),
("河北", [114.4995, 38.1006, 300]),
("天津", [117.4219, 39.4189, 300]),
("山西", [112.3352, 37.9413, 300]),
("陕西", [109.1162, 34.2004, 300]),
("甘肃", [103.5901, 36.3043, 300]),
("宁夏", [106.3586, 38.1775, 300]),
("青海", [101.4038, 36.8207, 300]),
("新疆", [87.9236, 43.5883, 300]),
("西藏", [91.11, 29.97, 300]),
("四川", [103.9526, 30.7617, 300]),
("重庆", [108.384366, 30.439702, 300]),
("山东", [117.1582, 36.8701, 300]),
("河南", [113.4668, 34.6234, 300]),
("江苏", [118.8062, 31.9208, 300]),
("安徽", [117.29, 32.0581, 300]),
("湖北", [114.3896, 30.6628, 300]),
("浙江", [119.5313, 29.8773, 300]),
("福建", [119.4543, 25.9222, 300]),
("江西", [116.0046, 28.6633, 300]),
("湖南", [113.0823, 28.2568, 300]),
("贵州", [106.6992, 26.7682, 300]),
("广西", [108.479, 23.1152, 300]),
("海南", [110.3893, 19.8516, 300]),
("上海", [121.4648, 31.2891, 1300]),
]
c = (
Map3D()
.add_schema(
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(5,101,123)",
opacity=1,
border_width=0.8,
border_color="rgb(62,215,213)",
),
map3d_label=opts.Map3DLabelOpts(
is_show=False,
formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
),
emphasis_label_opts=opts.LabelOpts(
is_show=False,
color="#fff",
font_size=10,
background_color="rgba(0,23,11,0)",
),
light_opts=opts.Map3DLightOpts(
main_color="#fff",
main_intensity=1.2,
main_shadow_quality="high",
is_main_shadow=False,
main_beta=10,
ambient_intensity=0.3,
),
)
.add(
series_name="bar3D",
data_pair=example_data,
type_=ChartType.BAR3D,
bar_size=1,
shading="lambert",
label_opts=opts.LabelOpts(
is_show=False,
formatter=JsCode("function(data){return data.name + ' ' + data.value[2];}"),
),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Map3D-Bar3D"))
.render("map3d_with_bar3d.html")
)
83.4 Map3d - Map3d_china_base
from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
c = (
Map3D()
.add_schema(
itemstyle_opts=opts.ItemStyleOpts(
color="rgb(5,101,123)",
opacity=1,
border_width=0.8,
border_color="rgb(62,215,213)",
),
map3d_label=opts.Map3DLabelOpts(
is_show=True,
text_style=opts.TextStyleOpts(
color="#fff", font_size=16, background_color="rgba(0,0,0,0)"
),
),
emphasis_label_opts=opts.LabelOpts(is_show=True),
light_opts=opts.Map3DLightOpts(
main_color="#fff",
main_intensity=1.2,
is_main_shadow=False,
main_alpha=55,
main_beta=10,
ambient_intensity=0.3,
),
)
.add(series_name="", data_pair="", maptype=ChartType.MAP3D)
.set_global_opts(
title_opts=opts.TitleOpts(title="全国行政区划地图-Base"),
visualmap_opts=opts.VisualMapOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
.render("map3d_china_base.html")
)
84.Component 通用配置项
class ComponentTitleOpts(
# 主标题,支持 \n 换行
title: str = "",
# 副标题,支持 \n 换行
subtitle: str = "",
# 主标题 CSS 样式
title_style: Optional[dict] = None,
# 副标题 CSS 样式
subtitle_style: Optional[dict] = None,
)
85.Table:表格
- class pyecharts.components.Table
class Table(
# HTML 标题
page_title: str = CurrentConfig.PAGE_TITLE,
# 远程 HOST,默认为 "https://assets.pyecharts.org/assets/"
js_host: str = "",
)
- func pyecharts.components.Table.add
def add(
# 表格 headers
headers: Sequence,
# 表格数据
rows: Sequence,
# 表格样式属性
attributes: Optional[dict] = None
)
- func pyecharts.components.Table.set_global_opts
def set_global_opts(
# 标题配置项,参考 `ComponentTitleOpts`
title_opts: Union[ComponentTitleOpts, dict, None] = None
)
85.1 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")
85.2 Season实践:Table之CSS设定
def Table_base():
table = Table()
headers = ["City name", "Area", "Population", "Annual Rainfall"]
#headers = ["City name", "Area", "Population"]
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,
{'border':'1px','width':'50%','bgcolor':'white','style':'font-size: 8px;color:blue;text-align:center;'})
table.set_global_opts(
title_opts=ComponentTitleOpts(title="Table-基本示例", subtitle="我是副标题支持换行哦")
)
#table.render("table_base.html")
return table
86.Image:图像
- class pyecharts.components.Image
class Image(
# HTML 标题
page_title: str = CurrentConfig.PAGE_TITLE,
# 远程 HOST,默认为 "https://assets.pyecharts.org/assets/"
js_host: str = "",
)
- func pyecharts.components.Image.add
def add(
# 图像 src
src: str,
# <img> 标签 CSS 样式
style_opts: Optional[dict] = None
)
- func pyecharts.components.Image.set_global_opts
def set_global_opts(
# 标题配置项,参考 `ComponentTitleOpts`
title_opts: Union[ComponentTitleOpts, dict, None] = None
)
86.1 Image - Image_base
from pyecharts.components import Image
from pyecharts.options import ComponentTitleOpts
image = Image()
img_src = (
"https://user-images.githubusercontent.com/19553554/"
"71825144-2d568180-30d6-11ea-8ee0-63c849cfd934.png"
)
image.add(
src=img_src,
style_opts={"width": "200px", "height": "200px", "style": "margin-top: 20px"},
)
image.set_global_opts(
title_opts=ComponentTitleOpts(title="Image-基本示例", subtitle="我是副标题支持换行哦")
)
image.render("image_base.html")