diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..bd17dc9a3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,5 @@ +### 提 issue 注意事项 +0. 先仔细阅读文档中是否有关于您需要解决的问题的解决方法 +1. 提 issue 前请先搜搜看以往的 issue 有没有解决了您的问题 +2. 如若是不能正常使用的问题,请贴上详细的 pyecharts 版本,使用系统以及 Python 版本 +3. 最好详细描述问题,必要时加上**代码+贴图** \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..137bf0f50 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,6 @@ +### 提 PR 注意事项 +0. 同步到 dev 分支的最新版本 +1. 代码尽量保持与项目统一风格,尽量按照 PEP8 规范写代码,必要时附上注释 +2. 如需要时请添加单元测试,也请确保所有测试能够通过 +3. 将 PR 推送至远程的 dev 分支,master 分支只负责发布新版本。请在提交信息中描述关于该 PR 的详细信息,需要时加上截图。 +4. 若是对文档进行修改,请确保数字,字母与中文之间两边均有一空格,如你所看到的整篇文档一样 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 146f1d7fd..ab970db9c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,7 @@ __pycache__/ .idea # Distribution / packaging .Python -/json/ -/js/ -/images_/ +test/render.html env/ build/ develop-eggs/ @@ -90,3 +88,4 @@ ENV/ # Rope project settings .ropeproject +*~ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..7bd3e3000 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "pyecharts/templates/js"] + path = pyecharts/templates/js + url = https://github.com/chfw/jupyter-echarts.git + branch = master diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..b9dbee57c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: python +notifications: + email: + recipients: + - chenjiandongx@qq.com + on_success: always # default: change + on_failure: always # default: always +python: + - 3.6 + - 3.5 + - 3.4 + - 2.7 +before_install: + - pip install -r test/requirements.txt +script: + - make tests +after_success: + - cd test + - codecov + diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..8864d4a39 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..6a3ecbb73 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,5 @@ +include README.md +include changelog.md +include pyecharts/templates/*.html +include pyecharts/templates/js/echarts/*.js +include pyecharts/templates/js/echarts/registry.json diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..f5df8ea52 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +all: tests + +tests: + bash test.sh diff --git a/README.md b/README.md index 0ffdd02fc..e56b542cb 100644 --- a/README.md +++ b/README.md @@ -1 +1,88 @@ -// TODO \ No newline at end of file +# pyecharts + +pyecharts is a library to generate charts using Echarts. It simply provides the interface between Echarts and Python. + +[![Build Status](https://travis-ci.org/chenjiandongx/pyecharts.svg?branch=master)](https://travis-ci.org/chenjiandongx/pyecharts) [![codecov](https://codecov.io/gh/chenjiandongx/pyecharts/branch/master/graph/badge.svg)](https://codecov.io/gh/chenjiandongx/pyecharts) [![PyPI version](https://badge.fury.io/py/pyecharts.svg)](https://badge.fury.io/py/pyecharts) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +## Introduction +[Echarts](https://github.com/ecomfe/echarts) is an open source library from Baidu for data visualization in javascript. It has awesome demo pages so I started to look out for an interface library so that I could use it in Python. I ended up with [echarts-python](https://github.com/yufeiminds/echarts-python) on github but it lacks of documentation and was not updated for a while. Just like many other Python projects, I started my own project, pyecharts, referencing echarts-python and another library [pygal](https://github.com/Kozea/pygal). + +## Installation +pyecharts works on Python2 and Python3. For more information please refer to [changelog.md](https://github.com/chenjiandongx/pyecharts/blob/master/changelog.md) + +### Jupyter-Notebook +Make sure you hava installed jupyter-notebook enviroment if you want to show your charts on notebook. +How to install it? +``` +$ pip install notebook +``` +### pyecharts +You can install it via pip +``` +$ pip install pyecharts +``` + +or clone it and install it +``` +$ git clone --recursive https://github.com/chenjiandongx/pyecharts.git +$ cd pyecharts +$ python setup.py install +``` + +## Basic Usage +```python +from pyecharts import Bar + +attr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] +v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] +bar = Bar("Bar chart", "precipitation and evaporation one year") +bar.add("precipitation", attr, v1, mark_line=["average"], mark_point=["max", "min"]) +bar.add("evaporation", attr, v2, mark_line=["average"], mark_point=["max", "min"]) +bar.render() +``` + +It will create a file named render.html in the root directory, open file with your borwser. + +![usage-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/usage-0.gif) + + +## Working with pandas & numpy + +![pandas_numpy](https://github.com/chenjiandongx/pyecharts/blob/master/images/pandas-numpy.png) + + +## working with Flask & Django +Flask + +![flask-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/flask-0.gif) + +Django + +![django-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/django-0.gif) + +* 中文文档 + * [pyecharts + Flask](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/doc_flask.md) + * [pyecharts + Django](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/doc_django.md) +* English + * [pyecharts + Flask](https://github.com/chenjiandongx/pyecharts/blob/master/docs/en-us/doc_flask.md) + * [pyecharts + Django](https://github.com/chenjiandongx/pyecharts/blob/master/docs/en-us/doc_django.md) + + +## Documentation +* [中文文档](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md) +* [English](https://github.com/chenjiandongx/pyecharts/blob/master/docs/en-us/documentation.md) + + +## Test +```shell +$ cd test +$ nosetests --with-coverage --cover-package pyecharts --cover-package test +``` + +## Author +pyecharts is developed and maintained by chenjiandongx ([chenjiandongx@qq.com](chenjiandongx@qq.com)) + +## License +pyecharts is released under the MIT License. See LICENSE for more information. + diff --git a/changelog.md b/changelog.md new file mode 100644 index 000000000..31e43fa07 --- /dev/null +++ b/changelog.md @@ -0,0 +1,226 @@ +# Version Log + +* ### version 0.2.7(Dev) + * TODO + +* ### version 0.2.6 - 2017.10.14(Current) + + #### Added + * 为 [文档](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md) 新增 [使用技巧](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#使用技巧) 介绍 + * [issue#194](https://github.com/chenjiandongx/pyecharts/issues/194) 新增 `is_map_symbol_show` 参数,用于控制 Map 图 [红点的显示](https://www.oschina.net/question/1416804_245423) + * [issue#192](https://github.com/chenjiandongx/pyecharts/issues/192) 新增 `label_emphasis_pos`, `label_emphasis_textsize`, `label_emphasis_textcolor` 参数,用于解决 Geo 图 tooltip 不能只显示城市名和数值的问题 + * [issue#132](https://github.com/chenjiandongx/pyecharts/issues/132) 新增图形类型树图 + * [issue#181](https://github.com/chenjiandongx/pyecharts/issues/181) 为 Geo 图新增 `is_roam` 参数解决不能缩放和移动的问题 + * [issue#199](https://github.com/chenjiandongx/pyecharts/issues/199) 为 markLine 新增 `mark_line_symbolsize` 和 `mark_line_valuedim` 参数,解决不能指定维度以及标记大小不能调整的问题 + * [issue#200](https://github.com/chenjiandongx/pyecharts/issues/200) 为 xyAxis 通用配置项新增 `is_xaxis_show` 和 `is_yaxis_show` 参数,(控制是否显示 x 轴或 y 轴)解决设计可编辑文本的问题 + * [issue#201](https://github.com/chenjiandongx/pyecharts/issues/201) 为 Bar 图新增 `bar_category_gap` 参数,提供绘制直方图的方案 + * [issue#208](https://github.com/chenjiandongx/pyecharts/issues/208) 为 dataZoom 通用配置项 `datazoom_type` 新增类型 'both'(同时拥有 'slider' 以及 'inside') + * [issue#208](https://github.com/chenjiandongx/pyecharts/issues/208) 为 HeatMap 图新增 **日历热力图** + + #### Changed + * 将 label 通用配置项的 `is_emphasis` 参数更改为 `is_label_emphasis` + * show_config() 修改用 JSON 显示 + + #### Fixed + * [issue#195](https://github.com/chenjiandongx/pyecharts/issues/195) 修复 HeatMap 图配置 x、y 轴属性无效的问题 + +* ### version 0.2.5 - 2017.9.28 + + #### Added + * [issue#173](https://github.com/chenjiandongx/pyecharts/issues/173) 为 xyAxis 通用配置项新增 `is_xaxis_boundarygap` 和 `is_yaxis_boundartgap` 参数 + * [issue#22](https://github.com/chenjiandongx/pyecharts/issues/22) 为散点图新增 `extra_data` 参数,可以为数据新增除 x y 轴外的其他维度 + * 为 markPoint 新增自定义标记点功能 + * 为 visualMap 新增 `visual_dimension` 参数,可以指定 visualmap 映射到哪个数据维度 + * 为 Map 图新增 [212个国家和地区](https://github.com/chfw/echarts-countries-js#featuring-citiesor-for-single-download) + * 部分解决 Overlap 和 Grid 不能一起使用的问题(当 Overlap 为多 x 轴或多 y 轴的时候坐标轴索引仍会出现问题) + +* ### version 0.2.4 - 2017.9.8 + + #### Added + * [issue#148](https://github.com/chenjiandongx/pyecharts/issues/148) 为 Radar.config() 新增 `legend_text_size` 参数 + * [issue#148](https://github.com/chenjiandongx/pyecharts/issues/148) 为 Legend 通用配置项新增 `legend_text_color` 和 `legend_text_font` 参数 + * [issue#156](https://github.com/chenjiandongx/pyecharts/issues/156) 为 xyAxis 通用配置项新增 `xaxis_force_interval` 和 `yaxis_force_interval` 参数 + * 为 Visualmap 通用配置项新增 `is_piecewise` 和 `visual_split_number` 参数 + * [issue#160](https://github.com/chenjiandongx/pyecharts/issues/160) 为 Base 类新增 `page_title` 参数,初始化类实例的时候可指定生成的 html 文件 `` 标签的值。自定义类 Grid/Overlap/Timeline/Page 以第一个添加的实例的 `page_title` 参数为准。 + * [issue#165](https://github.com/chenjiandongx/pyecharts/issues/165) 为 Radar 图新增 `label` 通用配置项,现可以展示 `label` 文字标签,但是建议在数据量少的时候使用(比如数据量为 1 的时候) + + #### Changed + * 压缩 js 文件体积,总体体积减少约 0.3MB + + #### Fixed + * [issue#158](https://github.com/chenjiandongx/pyecharts/issues/158) 修复 Grid/Timeline/Overlap 在 Page 中不能正常使用的 bug + +* ### version 0.2.3 - 2017.9.1 + + #### Fixed + * [issue#143](https://github.com/chenjiandongx/pyecharts/issues/143) [issue#146](https://github.com/chenjiandongx/pyecharts/issues/146) 修复默认状态下 Graph 不显示连线的 bug + * [issue#145](https://github.com/chenjiandongx/pyecharts/issues/145) 修复 dataZoom 无法正常使用的 bug + +* ### version 0.2.2 - 2017.8.31 + #### Added + * Map 图和 Geo 图增加 [363个二线城市地图](https://github.com/chfw/echarts-china-cities-js#featuring-citiesor-for-single-download) + * Map 图新增 label 模块,现可以利用标签显示地区名称 + * Geo 图新增 3000+ 城市地区经纬度信息,现已基本覆盖全国各个地区 + * Geo 图新增 `geo_cities_coords` 参数,用户可以为自己所选地图提供地区经纬度坐标(这将会覆盖原来预存的城市坐标信息),即完全按照用户提供的坐标来定位。 + * 新增图形种类 ThemeRiver(主题河流图) + * 新增 `is_more_utils` 参数,在 `add()` 中设置该标志位为 True 则会提供更多的实用工具按钮(建议在 Line, Kilne, Bar 等直角坐标图形中设置)。默认只提供『数据视图』和『下载』按钮。 + * [issue#138](https://github.com/chenjiandongx/pyecharts/issues/138) 新增 `is_xaxis_inverse`, `is_yaxis_inverse`, `xaxis_pos`, `yaxis_pos` 参数,提供倒映直角坐标系功能 + * [issue#140](https://github.com/chenjiandongx/pyecharts/issues/140) 为每种图形(包括 Overlap, Grid, Timeline)都提供 Public 的 `options` 属性,返回实例的 `self._option` + + #### Fixed + * [issue#133](https://github.com/chenjiandongx/pyecharts/issues/133) 回退 Echarts 版本,从 v3.7.0 回退至原先的 v3.6.2,解决标签不能正常显示的 bug + +* ### version 0.2.1 - 2017.8.25 + + #### Added + * [issue#127](https://github.com/chenjiandongx/pyecharts/issues/127) 新增数据图切换按钮(只针对部分图有效) + + #### Fixed + * [issue#130](https://github.com/chenjiandongx/pyecharts/issues/130) 更改 freeze_js,更正文件路径表示方法 + * 修复直角坐标系的标签显示问题 + + +* ### version 0.2.0 - 2017.8.25 + + #### Added + * [issue#118](https://github.com/chenjiandongx/pyecharts/issues/118) 新增 `datazoom_xaxis_index`, `datazoom_yaxis_index`,可使 datazoom 组件同时控制多个 x y 轴。 + * 新增 jupyter-notebook 中的 js host 参数,用户可自行决定使用本地后者网络 js 文件,确保转移 notebook 时图形可正常显示 + * 新增图形种类 Boxplot(箱形图) + * [issue#120](https://github.com/chenjiandongx/pyecharts/issues/120) 新增图形种类 Sankey(桑基图) + + #### Changed + * 更新 Flask&Django 模板,加载文件的体积大大减小,出图速度更快。 + * 更新 echarts 到 3.7.0 + + #### Fixed + * 修复 Page 类于其他自定义类共用出现问题的 bug + + +* ### version 0.1.9.7 - 2017.8.20 + + #### Fixed + * [issue#113](https://github.com/chenjiandongx/pyecharts/issues/113) 修复 requirements.txt 中 jupyter-pip 版本过旧问题 + * [issue#109](https://github.com/chenjiandongx/pyecharts/issues/109) 修复地图不能正常显示的问题 + + +* ### version 0.1.9.6 - 2017.8.19 + + #### Added + * [issue#95](https://github.com/chenjiandongx/pyecharts/issues/95) Overlap 类中新增 `xaxis_index`, `is_add_xaxis`, `yaxis_index`, `is_add_yaxis` 参数,现支持多 Y 轴或多 X 轴 + * Page 类现在也支持在 jupyter-notebook 中显示了,直接调用 Page() 实例即可。 + * Graph 图中新增 `graph_edge_symbol`, `graph_edge_symbolsize` 参数 + * [issue#94](https://github.com/chenjiandongx/pyecharts/issues/94) 提供 pyecharts-snapshot 用于将生成的图片保存为 png 或 pdf 文件,仅静态图片生效。(3D 图和动态图不生效) + * [issue#98](https://github.com/chenjiandongx/pyecharts/issues/98) 通用配置项中新增 tooltip 模块 + + #### Changed + * jupyter-notebook 和本地 render() 现在均采用动态加入 js 依赖文件的方法,生成文件体积大大缩小。 + * 更改通用配置项中的 label 的参数 `formatter` 为 `label_formatter` + * 更改 `clockwise` 参数为 `is_clockwise` + * 更改 Graph 图中的 `repulsion`, `gravity`, `edge_length`, `layout` 参数为 `graph_repulsion`, `graph_gravity`, `graph_edge_length`, `graph_layout` + + +* ### version 0.1.9.5 - 2017.8.16 + + #### Added + * 为 xyAxis 模块新增下列参数 + `xaxis_interval`, `xaxis_name_size`, `xaxis_name_gap`, `xaxis_margin`, `is_xaxislabel_align` + `yaxis_interval`, `yaxis_name_size`, `yaxis_name_gap`, `yaxis_margin`, `is_yaxislabel_align` + * [issue#86](https://github.com/chenjiandongx/pyecharts/issues/86) 为 3D 图新增参数用于配置坐标轴选项(参见通用配置项中的 axis3D) + * 修改自定义模块的接口,现自定义模块有以下 4 个类,具体用法参见文档 + * Grid 类:并行显示多张图 + * Overlap 类:结合不同类型图表叠加画在同张图上 + * Page 类:同一网页按顺序展示多图 + * Timeline 类:提供时间线轮播多张图 + * 新增 Timeline 功能,支持轮播多张图表 + + #### Changed + * jupyter notebook 现在也为离线模式,从本地加载项目所需 js 文件。至此 pyecharts 彻底实现本地化运行。速度更快,不再受网速影响。 + + #### Removed + * 删除冗余 js 文件,压缩项目体积。 + * 废弃 xAxis,yAxis 中的 `interval`, `xy_font_size`, `namegap` 参数。 + + +* ### version 0.1.9.4 - 2017.8.10 + + #### Added + * [issue#76](https://github.com/chenjiandongx/pyecharts/issues/76) 新增 Page 类,现能同时在一个 html 页面内按顺序展示多个图形。(参见用户自定义) + + #### Changed + * 更改 Image 依赖模块为 pillow + + +* ### version 0.1.9.3 - 2017.8.10 + + #### Added + * [issue#72](https://github.com/chenjiandongx/pyecharts/issues/72) [issue#41](https://github.com/chenjiandongx/pyecharts/issues/41) 新增 `xaxis_type`, `yaxis_type` 参数,可通过设置该参数指定直角坐标系数轴类型。(参见 Line,Scattre 图) + * [issue#09](https://github.com/chenjiandongx/pyecharts/issues/9) 集成 Flask + Django + + #### Removed + * 废弃 `npcast()`, `pdcast()` 方法,新版本已经在内部封装了处理逻辑,具体参见文档的 pandas&numpy 示例 + + +* ### version 0.1.9.2 - 2017.8.6 + + #### Added + * [issue#52](https://github.com/chenjiandongx/pyecharts/issues/52) 新增 `xaxis_rotate`, `yaxis_rotate` 参数,可通过设置该参数解决强制显示所有坐标轴标签时因过于密集重叠的问题。参见(Bar 图) + * 新增 `xaxis_min`, `xaxis_max`. `yaxis_min`, `yaxis_max` 参数,可设置坐标轴上的最大最小值,针对数值轴有效。 + + #### Changed + * [issue#67](https://github.com/chenjiandongx/pyecharts/issues/67) `render()` 方法现在为离线模式,实现本地生成 .html 文件,加载速度更快。 + + #### Fixed + * [issue#61](https://github.com/chenjiandongx/pyecharts/issues/61) 解决 3D 图形不能在 jupyter notebook 上正常显示的问题。 + + #### Removed + * 废弃 `render_notebook()` 方法,现可直接调用图形实例显示在 jupyter notebook 上。 + + +* ### version 0.1.9.1 - 2017.7.31 + + #### Added + * 加入 Travis-CI 自动化测试。 + * [issue#46](https://github.com/chenjiandongx/pyecharts/issues/46) legend 增加 `legend_selectedmode` 参数,图例可以设置为单例或者多例。(参见 Radar 图) + * visualmap 组件增加 `visual_type` 和 `visual_range_size` 参数。现在支持映射到颜色和图形大小两种方式。(参见 Scatter 图) + + +* ### version 0.1.9 - 2017.7.30 + + #### Added + * [issue#28](https://github.com/chenjiandongx/pyecharts/issues/28) datazoom 中增加了将组件效果显示在 y 坐标轴中的功能。(参见 KLine 图) + * 新增对 Pandas 和 Numpy 数据的简单处理。解决直接传入 Pandas 和 Numpy 数据类型出错的问题。(参见开始使用) + * 新增 Bar3D, Line3D, Scatter3D 三种 3D 立体图。 + + #### Fixed + * [issue#34](https://github.com/chenjiandongx/pyecharts/issues/34) 解决在 macos 下安装出错的问题。 + + +* ### version 0.1.8 - 2017.7.28 + + #### Added + * [issue#05](https://github.com/chenjiandongx/pyecharts/issues/5) 新增在 Jupyter Notebook 中展示图表功能。感谢 [@ygw365](https://github.com/ygw365) 提供这部分的代码模板 和 [@muxuezi](https://github.com/muxuezi) 协助对代码进行改进! + * 新增对自定义地图的使用说明 + + +* ### version 0.1.7 - 2017.7.26 + + #### Added + * 增加并行显示图表功能 + + +* ### version 0.1.6 - 2017.7.24 + + #### Added + * 新增了热力图 + + +* ### version 0.1.5 - 2017.7.22 + + #### Added + * 新增了 K 线图 + + +* ### version 0.1.4 - 2017.7.20 + + #### Added + * 第一个稳定版本 diff --git a/docs/django-demo/myechartsite/db.sqlite3 b/docs/django-demo/myechartsite/db.sqlite3 new file mode 100644 index 000000000..b9d314acd Binary files /dev/null and b/docs/django-demo/myechartsite/db.sqlite3 differ diff --git a/docs/django-demo/myechartsite/manage.py b/docs/django-demo/myechartsite/manage.py new file mode 100644 index 000000000..d0a7ee41a --- /dev/null +++ b/docs/django-demo/myechartsite/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myechartsite.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/docs/django-demo/myechartsite/myechartsite/__init__.py b/docs/django-demo/myechartsite/myechartsite/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/docs/django-demo/myechartsite/myechartsite/settings.py b/docs/django-demo/myechartsite/myechartsite/settings.py new file mode 100644 index 000000000..b91fc8964 --- /dev/null +++ b/docs/django-demo/myechartsite/myechartsite/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for myechartsite project. + +Generated by 'django-admin startproject' using Django 1.11.4. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '(7#718+&t4o5)9xyxg4=_s%f*uahywt%w3hos7fon9crxl)5^d' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'myfirstvis' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'myechartsite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'myechartsite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/docs/django-demo/myechartsite/myechartsite/urls.py b/docs/django-demo/myechartsite/myechartsite/urls.py new file mode 100644 index 000000000..c0282ff70 --- /dev/null +++ b/docs/django-demo/myechartsite/myechartsite/urls.py @@ -0,0 +1,23 @@ +"""myechartsite URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from django.contrib import admin + + +urlpatterns = [ + url(r'^admin/', admin.site.urls), + url(r'myfirstvis/', include("myfirstvis.urls")) +] diff --git a/docs/django-demo/myechartsite/myechartsite/wsgi.py b/docs/django-demo/myechartsite/myechartsite/wsgi.py new file mode 100644 index 000000000..286aa15fd --- /dev/null +++ b/docs/django-demo/myechartsite/myechartsite/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for myechartsite project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myechartsite.settings") + +application = get_wsgi_application() diff --git a/docs/django-demo/myechartsite/myfirstvis/__init__.py b/docs/django-demo/myechartsite/myfirstvis/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/docs/django-demo/myechartsite/myfirstvis/admin.py b/docs/django-demo/myechartsite/myfirstvis/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/docs/django-demo/myechartsite/myfirstvis/apps.py b/docs/django-demo/myechartsite/myfirstvis/apps.py new file mode 100644 index 000000000..4186bcb4a --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MyfirstvisConfig(AppConfig): + name = 'myfirstvis' diff --git a/docs/django-demo/myechartsite/myfirstvis/migrations/__init__.py b/docs/django-demo/myechartsite/myfirstvis/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/docs/django-demo/myechartsite/myfirstvis/models.py b/docs/django-demo/myechartsite/myfirstvis/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/docs/django-demo/myechartsite/myfirstvis/templates/myfirstvis/pyecharts.html b/docs/django-demo/myechartsite/myfirstvis/templates/myfirstvis/pyecharts.html new file mode 100644 index 000000000..f9d50c581 --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/templates/myfirstvis/pyecharts.html @@ -0,0 +1,17 @@ +<!-- myfirstvis/templates/pyecharts.html --> +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <title>Proudly presented by PycCharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + diff --git a/docs/django-demo/myechartsite/myfirstvis/tests.py b/docs/django-demo/myechartsite/myfirstvis/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/docs/django-demo/myechartsite/myfirstvis/urls.py b/docs/django-demo/myechartsite/myfirstvis/urls.py new file mode 100644 index 000000000..a3780aa21 --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^$', views.index, name='index'), +] diff --git a/docs/django-demo/myechartsite/myfirstvis/views.py b/docs/django-demo/myechartsite/myfirstvis/views.py new file mode 100644 index 000000000..46e7d9650 --- /dev/null +++ b/docs/django-demo/myechartsite/myfirstvis/views.py @@ -0,0 +1,37 @@ +from __future__ import unicode_literals +import math + +from django.http import HttpResponse +from django.template import loader +from pyecharts import Line3D + +from pyecharts.constants import DEFAULT_HOST + + +def index(request): + template = loader.get_template('myfirstvis/pyecharts.html') + l3d = line3d() + context = dict( + myechart=l3d.render_embed(), + host=DEFAULT_HOST, + script_list=l3d.get_js_dependencies() + ) + return HttpResponse(template.render(context, request)) + + +def line3d(): + _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]) + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + line3d = Line3D("3D line plot demo", width=1200, height=600) + line3d.add("", _data, is_visualmap=True, + visual_range_color=range_color, visual_range=[0, 30], + is_grid3D_rotate=True, grid3D_rotate_speed=180) + return line3d diff --git a/docs/en-us/doc_django.md b/docs/en-us/doc_django.md new file mode 100644 index 000000000..f3e661f1e --- /dev/null +++ b/docs/en-us/doc_django.md @@ -0,0 +1,192 @@ +# pyecharts integration with django + +We are following the official django [tutorials](https://docs.djangoproject.com/en/1.11/intro/tutorial01/) here. We expect you are familar with django and have +gone through the tutorial at least. + + +## Step 0: Let's create a virtual environment and install pyecharts + +```shell +$ virtualenv --no-site-packages pyecharts-env +$ source pyecharts-env/bin/activate +$ pip install django==1.11.4 +$ pip install pyecharts +``` + +Although current dependencies of pyecharts include django, the tutorial is written on top django version **1.11.4**. + + +## Step 1: create a mini django site and the actual visualization app + +```shell +$ django-admin startproject myechartsite +``` + +And start an app + +```shell +$ python manage.py startapp myfirstvis +$ ls +db.sqlite3 manage.py myechartsite myfirstvis +``` + +Then register the app in `myechartsite/settings.py`: + +``` +# myechartsite/settings.py +... +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'myfirstvis' # <--- +] +... +``` + +And then let's create the urls.py which provides the url route to the request handler. +And we will create the request handler views.py in step 3. + +```python +myfirstvis/urls.py +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^$', views.index, name='index'), +] +``` + +And insert the 'myfirstvis.urls' into `myechartsite/urls.py` + +```python +myechartsite/urls.py +from django.conf.urls import include, url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), + url(r'^myfirstvis/', include('myfirstvis.urls')) # <--- +] +``` + +## Step 2: Now let's write up the view function + +Then copy the following code and save as `myfirstvis/views.py` + + +```python +from __future__ import unicode_literals +import math + +from django.http import HttpResponse +from django.template import loader +from pyecharts import Line3D + +from pyecharts.constants import DEFAULT_HOST + + +def index(request): + template = loader.get_template('myfirstvis/pyecharts.html') + l3d = line3d() + context = dict( + myechart=l3d.render_embed(), + host=DEFAULT_HOST, + script_list=l3d.get_js_dependencies() + ) + return HttpResponse(template.render(context, request)) + + +def line3d(): + _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]) + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + line3d = Line3D("3D line plot demo", width=1200, height=600) + line3d.add("", _data, is_visualmap=True, + visual_range_color=range_color, visual_range=[0, 30], + is_grid3D_rotate=True, grid3D_rotate_speed=180) + return line3d +``` + +`script_list` is a list of echarts libraries that are required for the chart rendering on the page. +The number of libraries varies according to the dependency requirements of the charts +to be rendered. + +`host` refers to the host for echarts libraries. The default host is +http://chfw.github.io/jupyter-echarts/echarts. You can change them if you wish. And if you do so, +please clone https://github.com/chfw/jupyter-echarts. Then, place `echarts` folder onto your own server. + + +## Step 3: Now let's create a template + +Previous steps follow the [tutorial part 1](https://docs.djangoproject.com/en/1.11/intro/tutorial01/). Now let's jump to [tutorial part 3](https://docs.djangoproject.com/en/1.11/intro/tutorial03/). + +Please create a templates directory and save the following file into it. + +```shell +$ mkdir templates/myfirstvis -p +``` + +Please note the absolute path is: `/myfirstvis/templates/myfirstvis`. Here +is the template file. + + +```html + + + + + + + Proudly presented by PycCharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + +``` + +## Step 4: Run it + +Then let's bring up the django site: + +```shell +$ cd myechartsite +$ python manage.py runserver + +You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. +Run 'python manage.py migrate' to apply them. + +August 08, 2017 - 05:48:38 +Django version 1.11.4, using settings 'myechartsite.settings' +Starting development server at http://127.0.0.1:8000/ +Quit the server with CONTROL-C. +``` + +Please visit http://localhost:8000/myfirstvis/ for your first visualization via pyecharts. Here is your first 3D visualization: + +![django-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/django-0.gif) + + +## Conclusion + +As you can see, it is just a few steps to create a visual charts using pyecharts. Django tutorials has 7 parts and we only need 1st and 3rd parts to +make the visualisation. + +For your reference, please find the example code in `pyecharts/document` folder. \ No newline at end of file diff --git a/docs/en-us/doc_flask.md b/docs/en-us/doc_flask.md new file mode 100644 index 000000000..9024ec96e --- /dev/null +++ b/docs/en-us/doc_flask.md @@ -0,0 +1,112 @@ +# pyecharts integration with Flask + +## Step 0: let's create a mini flask project + +Please create new directory for the new project + +```shell +$ mkdir flask-echarts +$ cd flask-echarts +$ mkdir templates +``` + +## Step 1: render your chart using chart_instance.render_embed() + +Please save the following python file as server.py under your project root directory. + +```python +import random +from pyecharts import Scatter3D +from pyecharts.constants import DEFAULT_HOST +from flask import Flask, render_template + + +app = Flask(__name__) + + +@app.route("/") +def hello(): + s3d = scatter3d() + return render_template('pyecharts.html', + myechart=s3d.render_embed(), + host=DEFAULT_HOST, + script_list=s3d.get_js_dependencies()) + + +def scatter3d(): + data = [generate_3d_random_point() for _ in range(80)] + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + scatter3D = Scatter3D("3D scattering plot demo", width=1200, height=600) + scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) + return scatter3D + + +def generate_3d_random_point(): + return [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] +``` + +`script_list` is a list of echarts libraries that are required for the chart rendering on the page. +The number of libraries varies according to the dependency requirements of the charts +to be rendered. + +`host` refers to the host for echarts libraries. The default host is +http://chfw.github.io/jupyter-echarts/echarts. You can change them if you wish. And if you do so, +please clone https://github.com/chfw/jupyter-echarts. Then, place `echarts` folder onto your own server. + +## Step 2: provide your own template + +Please save the following template as pyecharts.html in `templates` folder + +```html + + + + + + Proudly presented by ECharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + +``` + +## Step 3: run it + +Now you shall have these: + +```shell +$ ls +server.py templates +$ ls templates +pyecharts.html + + +```shell +$ pip install flask +$ export FLASK_APP=server.py +$ flask run +* Serving Flask app "server" +* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) +``` + +Here's what you will get: + +![flask-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/flask-0.gif) + + +## Conclusion + +It is extremely simple to include a pyexcharts instance in a Flask app. Please go +ahead and put your own charts in flask. + +For your reference, please find the example code in `pyecharts/document` folder. diff --git a/docs/en-us/doc_for_pyechart_developer.md b/docs/en-us/doc_for_pyechart_developer.md new file mode 100644 index 000000000..4f7db2b28 --- /dev/null +++ b/docs/en-us/doc_for_pyechart_developer.md @@ -0,0 +1,133 @@ +# Developer's Guide + +## Pull request instructions + +`dev` branch is for the development of each new releases. `master` branch is reserved for released code only. What it means for contributors is: +please checkout `dev` branch right after you have a clone of pyecharts. Then start your engineering effort. When you are ready, please submit a PR +against `dev` branch too. + +If your PR has code changes, please include unit tests. If possible, please attach a screenshot on your contribution. It helps everyone to see your contribution. + +## Why the folder `pyecharts/templates/js` is empty? + +It is because your git did not update the submodule. Please issue the following command: + +``` +git submodule update --init --recursive +``` + +## How to merge chengjiandongx/master? + +Whenever you do the upstreaming, you are required to do an additional step because we have gotten a submodule: + +``` +git submodule update +``` + + +## How to add more javascript libraries to pyecharts + +All javascript libraries are now managed in a [submodule](https://git-scm.com/docs/git-submodule) [jupyter-echarts](https://github.com/chfw/jupyter-echarts). It means +new javascript library shall go through `jupyter-echarts`. + +jupyter-echarts is a front-end project. If you are new to front-end engineering, please find the crash course for you in the end. + +### Step 1: add the library to jupyter-echarts + +Checkout the repository: + +``` +git clone https://github.com/chfw/jupyter-echarts.git +``` + +And then do + +``` +npm install --save your_javascript_library +``` + +Edit gulp.js + +``` +... +FILES = [ + './node_modules/echarts/dist/echarts.min.js', + './node_modules/echarts/map/js/china.js', + './node_modules/your_library/dist/min_version.js' <--- +... +FILE_MAP = [ +... + 'nick_name': 'min_version' // note, please do not put .js suffix +... +] +PROVINCE_PINYIN_MAP = [ +... + 'chinese location name': 'nick_name', // note nick_name is the same as previous one +... +] +``` + +Then run + +``` +$ gulp +``` + +The most important thing is to do git commit. You will need to commit it +to jupyter-echarts. If you do not have write access, please submit a PR. + +If your contribution become large, please reference: echarts-countries-js or +echarts-china-cities-js. + +### Step 2: update pyecharts + +Once your previous commit is accepted in jupyter-notebooks, you could then +checkout pyecharts:: + +``` +$ git clone --recursive https://github.com/chenjiandongx/pyecharts.git +$ cd pyecharts/pyecharts/templates/js +$ git pull +remote: Counting objects: 7, done. +remote: Compressing objects: 100% (2/2), done. +remote: Total 7 (delta 4), reused 7 (delta 4), pack-reused 0 +Unpacking objects: 100% (7/7), done. +From https://github.com/chfw/jupyter-echarts + af7184b..bb87949 master -> origin/master +Updating af7184b..bb87949 +Fast-forward + echarts/main.js | 2 +- + gulpfile.js | 2 +- + src/main.ts | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) +$ cd ../../../ +$ git commit -am "pull latest changes from jupyter-echarts +``` + +And then push your changes to pyecharts. + + +## Front end engineering for Pythonistas + +In front end engineering field, no one manually downloads a javascript/css file +and type the script tag into html file. To an extreme, no one writes html, css +nor javascript though they are writing web pages. All of those work are either +automated and transcompiled. + +[npm](https://docs.npmjs.com/getting-started/what-is-npm) is a node.js package manager and helps front end engineers to automate +the delivery of all javascript and css modules. In this category, there are +other similiar tools: [bower](https://bower.io), [jspm](https://jspm.io) etc. [gulp](https://gulpjs.com) is the `make` command in node.js +world and gulpfile.js is the `Makefile` for gulp. You will write all commands +in javascript. These tools helps the developer automate the delivery of +javascript and css files as you would use pip for python packages. + +So what do they write if no html, css nor javascript are written? They write +[pug file](https://pugjs.org/api/getting-started.html)/[HAML file](http://haml.info), [sass file](http://sass-lang.com) and [coffeescript](http://coffeescript.org)/[typescript](http://www.typescriptlang.org) files. Those files +are then trans-compiled into what you see as html, css and javascript. Nowadays, +writing a few webpage has become a software engineering acitvity. Object +oriented programming, code reuse, css attribute inheritance are the things +in front end engineer's head on daily basis. + +Above is a quick introduction to front end engineering. There are many excellent +projects, tools and developers in node.js universe, waiting for you to find and +meet. diff --git a/docs/en-us/documentation.md b/docs/en-us/documentation.md new file mode 100644 index 000000000..87d11b665 --- /dev/null +++ b/docs/en-us/documentation.md @@ -0,0 +1,2313 @@ +# pyecharts Documentation + +pyecharts is a library to generate charts using Echarts. It simply provides the interface between Echarts and Python. + +[![Build Status](https://travis-ci.org/chenjiandongx/pyecharts.svg?branch=master)](https://travis-ci.org/chenjiandongx/pyecharts) [![codecov](https://codecov.io/gh/chenjiandongx/pyecharts/branch/master/graph/badge.svg)](https://codecov.io/gh/chenjiandongx/pyecharts) [![PyPI version](https://badge.fury.io/py/pyecharts.svg)](https://badge.fury.io/py/pyecharts) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +* [First-steps](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#First-steps) +* [Global-options](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Global-options) + * xyAxis:x, y axis in cartesian coordinate system(Line, Bar, Scatter, EffectScatter, Kline) + * dataZoom:dataZoom components for zoom-in and zoom-out. With them, it is possible to magnify a small area, to see the overall picture or to stay away from scattered points(Line, Bar, Scatter, EffectScatter, Kline) + * legend:legend component has different symbol, colour and name, and provide the interactive clicking functions to show or hide its associated data series. + * label:text string on the chart, for marking the charts with sensible details, such as value, name. + * lineStyle:line style for Line, Polar, Radar, Graph, Parallel. + * grid3D:gird3D components in cartesian coordinate system(Bar3D, Line3D, Scatter3D) + * visualMap:It is a type of component for visual encoding, which maps the data to visual channels +* [Chart-types](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Chart-types) + * Bar + * Bar3D + * EffectScatter + * Funnel + * Gauge + * Geo + * Graph + * HeatMap + * Kline + * Line + * Line3D + * Liquid + * Map + * Parallel + * Pie + * Polar + * Radar + * Scatter + * Scatter3D + * WordCloud +* [Customize](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Customize) +* [Example](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Example) +* [About](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#About) + + +# First-steps +### Make sure you have installed the latest version pyecharts +Now, you are ready to make your first chart! +```python +from pyecharts import Bar + +bar = Bar("我的第一个图表", "这里是副标题") +bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90]) +bar.show_config() +bar.render() +``` +![guide-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/guide-0.png) + +**Tip:** You can click the download button on the right side to download the picture to your local disk. + +* ```add()``` + main method,add the data and set up various options of the chart +* ```show_config()``` + print and output all options of the chart +* ```render()``` + creat a file named render.html in the root directory defaultly,which supports path parameter and set the location the file save in,for instance render(r"e:\my_first_chart.html"),open file with your browser. + +### The usge pyecharts-snapshot extension +If you would to get png or pdf files instead of `render.html`, you can use [pyecharts-snapshot](https://github.com/chfw/pyecharts-snapshot)。However, node.js is required and can be downloaded from [https://nodejs.org/en/download/](https://nodejs.org/en/download/) + +1. Install phantomjs + `npm install -g phantomjs-prebuilt` +2. install pyecharts-snapshot + `pip install pyecharts-snapshot` +3. In your program, import pyecharts-snapshot + `from pyecharts_snapshot.main import make_a_snapshot` +4. Programmatical usage + `make_a_snapshot('render.html', 'snapshot.png')` + where the frist parameter is the output file(by default, render.html), and the second one is output file with file extension as png or pdf. + +For more details, please refer to [pyecharts-snapshot](https://github.com/chfw/pyecharts-snapshot) + + +### A note on Jupyter notebook + +For existing users, in order to play with the offline mode coming with 0.1.9.5, it is recommended that 1) the old version must be uninstalled. 2) Your existing notebooks must be refreshed and re-ran. 3) You must have installed **jupyter**. This restriction will be gone when jupyter-pip will release its next version. + +How the offline mode works is: all echarts javascript libraries are copied into nbextensions directory. The following command helps you find out whether pyecharts js components are installed or not + +```shell +$ jupyter nbextension list +Known nbextensions: + config dir: /Users/jaska/.jupyter/nbconfig + notebook section + echarts/main enabled + - Validating: OK +``` + +Rarely, you would enforce pyecharts to reload all echarts javascript libraries. However if you intend to do so, you can issue these commands: + +```shell +$ git clone https://github.com/chfw/jupyter-echarts.git +$ cd jupyter-echarts +$ jupyter nbextensions install echarts --user +``` +Upon next rendering, all javascript libraries will be copied again. + +And rarely again unless you are a developer of pyecharts, you choose to remove the extension: + +```shell +$ jupyter nbextensions uninstall echarts --user +``` + +#### jupyter-notebook export problem + +Since 0.1.9.7, pyecharts has gone into offline mode, drawing without internet connection. Now, the charts in exported note book cannot be display as they have been put outside +jupyter environment. + +So the solution is to add the following statement: + +```python +... +from pyecharts import online + +online() +... +``` +Above code will take javascripts from https://chfw.github.io/jupyter-echarts/echarts. If +you cannot connect to github, you could clone https://github.com/chfw/jupyter-echarts. Then, you put `echarts` folder onto your own server. Here is a simple command to achieve it: + +``` +$ cd jupyter-echarts/echarts +$ python -m http.server # for python 2, use python -m SimpleHTTPServer +Serving HTTP on 0.0.0.0 port 8000 ... +``` + +Then, add localhost into previous python code: + +```python +... +from pyecharts import online + +online(host="http://localhost:8000) +... +``` + +### Python2 Coding Problem +default code type is UTF-8, there's no problem in Python3, because Python3 have a good support in chinese. But in Python2, please use the following sentence to ensure avoiding wrong coding problem: +``` +#!/usr/bin/python +#coding=utf-8 +from __future__ import unicode_literals +``` +The first two sentences are telling your editor that it should use UTF-8 ([PEP-0263](https://www.python.org/dev/peps/pep-0263/)). And the last sentence is telling Python all the characters are UTF-8 ([unicode literals](http://python-future.org/unicode_literals.html)) + + +almost all the chart type drawed like this: +1. ```chart_name = Type()``` Initialise the concrete chart type. +2. ```add()``` Add data and options. +3. ```render()``` Creat .html file. + +```add()``` Data is two lists commonly(the same length),if your data is dictionary or dictionary with tuple,use ```cast()``` to convert. + +```python +@staticmethod +cast(seq) +``` Convert the sequence with the dictionary and tuple type into k_lst, v_lst. ``` +``` +1. Tuple Lists + [(A1, B1), (A2, B2), (A3, B3), (A4, B4)] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] +2. Dictionary Lists + [{A1: B1}, {A2: B2}, {A3: B3}, {A4: B4}] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] +3. Dictionaries + {A1: B1, A2: B2, A3: B3, A4: B4} -- > k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] + +In the context of Numpy and/or Pandas, ```pdcast(pddata)``` and ``` npcast(npdata)``` methods, provided in 0.19.2 are no log required. Please see the advanced example in README. + +If your DataFrame returns a transposed list(such as, [ [1], [2], [3] ]), you have to tranpose it by yourself (make it like [ 1, 2, 3 ] ). This transpose operation applies to Radar, Parallel, HeatMap. + +Series type +```python +from pyecharts import Bar +import pandas as pd + +pddata = pd.Series([1, 2, 3, 4], index=[1, 'b', 'c', 'd']) +vlst, ilst = Bar.pdcast(pddata) + +print(vlst) +>>> [1.0, 2.0, 3.0, 4.0] +print(ilst) +>>> ['1', 'b', 'c', 'd'] +``` + +DataFrame type +```python +from pyecharts import Bar +import pandas as pd + +pddt = pd.DataFrame([[1, 2, 3, 4], [2, 3, 4, 5], [4.1, 5.2, 6.3, 7.4]], index=["A", "B", "C"]) +vlst, ilst = Bar.pdcast(pddata) + +print(vlst) +>>> [[1.0, 2.0, 3.0, 4.0], [2.0, 3.0, 4.0, 5.0], [4.1, 5.2, 6.3, 7.4]] +print(ilst) +>>> ['A', 'B', 'C'] +``` + +npcast(),It accepts numpy.array type. +```python +@staticmethod +npcast(npdata) +``` handle the ndarray type in Numpy, return a list that ensures the correct type. Returns the nested list if there are multiple dimensions.``` +``` + +Numpy.array type +```python +from pyecharts import Bar +import numpy ad np + +npdata = np.array([[1, 2, 3, 4], [2, 4, 5.0, 6.3]]) +print(npdata) +>>> [[1.0, 2.0, 3.0, 4.0], [2.0, 4.0, 5.0, 6.3]] +``` + +**Of course you can use the cooler way,use Jupyter Notebook to show the chart.But what matplotlib have,so do pyecharts** + +like this + +![notebook-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/notebook-0.gif) + +and this + +![notebook-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/notebook-1.gif) + +more Jupyter notebook examples, please refer to [notebook-use-cases](https://github.com/chenjiandongx/pyecharts/blob/master/document/notebook-use-cases.ipynb)。you could download and run it on your notebook. + +**Tip:** The function was official added in 0.1.9.2 version,please update the newest version to use it. + +If you want use Jupyter Notebook to show your chart,just call Chart instance,compatible with Python2 and Python3's Jupyter Notebook environment at sametime.All the chart can display normaly,the same interaction experience to browser,there's no need to make a complex powerpoint!! + +The parameter a chart type initialize accept(the same to all the chart type). + +* title -> str + default -> '' + The main title text, supporting for \n for newlines. +* subtitle -> str + defalut -> '' + Subtitle text, supporting for \n for newlines. +* width -> int + defalut -> 800(px) + Canvas width +* height -> int + defalut -> 400(px) + Canvas height +* title_pos -> str/int + defalut => 'left' + Distance between grid component and the left side of the container.title_pos value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%';it can also be 'left', 'center', or 'right'. + If the title_pos value is set to be 'left', 'center', or 'right',then the component will be aligned automatically based on position. +* title_top -> str/int + default -> 'top' + Distance between grid component and the top side of the container.top value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%';it can also be 'top', 'middle', or 'bottom'. + If the left value is set to be 'top', 'middle', or 'bottom',then the component will be aligned automatically based on position. +* title_color -> str + defalut -> '#000' + main title text color. +* subtitle_color -> str + defalut -> '#aaa' + subtitle text color. +* title_text_size -> int + defalut -> 18 + main title font size +* subtitle_text_size -> int + defalut -> 12 + subtitle text color. +* background_color -> str + defalut -> '#fff' + Background color of title, which is transparent by default. + Color can be represented in RGB, for example 'rgb(128, 128, 128)'.RGBA can be used when you need alpha channel, for example 'rgba(128, 128, 128, 0.5)'. + You may also use hexadecimal format, for example '#ccc'. +* is_grid -> bool + defalut -> False + It specifies whether to use the grid component. Detail [Customize](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Customize) + +# Global-options +**Sitting general configuration in```add()```** + +xyAxis:x, y axis in cartesian coordinate system(Line, Bar, Scatter, EffectScatter, Kline) + +* is_convert -> bool + It specifies whether to convert xAxis and yAxis. +* xy_text_size -> int + axis name font size +* namegap -> int + Gap between axis name and axis line. +* x_axis -> list + xAxis data +* xaxis_name -> str + Name of xAxis +* xaxis_name_pos -> str + Location of xAxis name.It can be 'start','middle','end' +* xaxis_rotate -> int + Rotation degree of xaxis label, which is especially useful when there is no enough space for category axis.Rotation degree is from -90 to 90. +* xaxis_min -> int/float + The minimun value of xaxis. +* xaxis_max -> int/float + The maximun value of xaxis. +* xaxis_type -> str + Type of xaxis + * 'value': Numerical axis, suitable for continuous data. + * 'category': Category axis, suitable for discrete category data. Data should only be set via data for this type. + * 'time': Time axis, suitable for continuous time series data. As compared to value axis,it has a better formatting for time and a different tick calculation method. For example,it decides to use month, week, day or hour for tick based on the range of span. + * 'log': Log axis, suitable for log data. +* y_axis -> list + yAxis data +* yaxis_formatter -> str + Formatter of axis label, which supports string template and callback function.example: '{value} kg' +* yaxis_name -> str + Name of yAxis +* yaxis_name_pos -> str + Location of yAxis name.It can be 'start','middle','end' +* yaxis_rotate -> int + Rotation degree of xaxis label, which is especially useful when there is no enough space for category axis.Rotation degree is from -90 to 90. +* yaxis_min -> int/float + The minimun value of yaxis. +* yaxis_max -> int/float + The maximun value of yaxis. +* yaxis_type -> str + Type of yaxis + * 'value': Numerical axis, suitable for continuous data. + * 'category': Category axis, suitable for discrete category data. Data should only be set via data for this type. + * 'time': Time axis, suitable for continuous time series data. As compared to value axis,it has a better formatting for time and a different tick calculation method. For example,it decides to use month, week, day or hour for tick based on the range of span. + * 'log': Log axis, suitable for log data. +* interval -> int + The display interval of the axis scale label is valid in the category axis.By default, labels are displayed using labels that do not overlap the labels. + Set to 0 to force all labels to be displayed and label is one by one if setting as 1; If 2, it will be one label separates from each other, and so on. + + +dataZoom:dataZoom components for zoom-in and zoom-out. With them, it is possible to magnify a small area, to see the overall picture or to stay away from scattered points(Line, Bar, Scatter, EffectScatter, Kline) + +* is_datazoom_show -> bool + defalut -> False + It specifies whether to use the datazoom component. +* datazoom_type -> str + defalut -> 'slider' + datazoom type, 'slider', 'inside', or 'both' +* datazoom_range -> list + defalut -> [50, 100] + The range percentage of the window out of the data extent, in the range of 0 ~ 100. +* datazoom_orient -> str + Specify whether the layout of dataZoom component is horizontal or vertical.'horizontal' or 'vertical' + What's more,it indicates whether the horizontal axis or vertical axis is controlled,by default in catesian coordinate system. + + +legend:legend component has different symbol, colour and name, and provide the interactive clicking functions to show or hide its associated data series. + +* is_legend_show -> bool + defalut -> True + It specifies whether to show the legend component. +* legend_orient -> str + defalut -> 'horizontal' + The layout orientation of legend.It can be 'horizontal', 'vertical' +* legend_pos -> str + defalut -> 'center' + Distance between legend component and the left side of the container. + legend_pos value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'; + and it can also be 'left', 'center', or 'right'. +* legend_top -> str + defalut -> 'top' + Distance between legend component and the top side of the container. + legend_top value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'; + and it can also be 'top', 'middle', or 'bottom'. +* legend_selectedmode -> str/bool + State table of selected legend. 'single' or 'multiple'.or use False to disable it. + + +label:text string on the chart, for marking the charts with sensible details, such as value, name. + +* is_label_show -> bool + defalut -> False + It specifies whether to show laebl in normal status. +* is_emphasis -> bool + defalut -> False + It specifies whether to show laebl in emphasis status. +* label_pos -> str + defalut -> 'top' + Label position.It can be 'top', 'left', 'right', 'bottom', 'inside','outside' +* label_text_color -> str + defalut -> '#000' + Label text color. +* label_text_size -> int + defalut -> 12 + Label font size. +* is_random -> bool + defalut -> False + It specifies whether to random global color list. +* label_color -> list + Customize the label color. It will modify Global color list, and all chart legend colors can be config here. Such as Bar's columnar color, Line's line color, and so on. +* formatter -> list + Data label formatter,it can be 'series', 'name', 'value', 'precent' + +**Tip:** is_random random disorganize legend colour and list,it's kind of switch style? try it. + + +lineStyle:line style for Line, Polar, Radar, Graph, Parallel. + +* line_width -> int + default -> 1 + Line width. +* line_opacity -> float + default -> 1 + Opacity of the component. Supports value from 0 to 1, and the component will not be drawn when set to 0. +* line_curve -> float + default -> 0 + Edge curvature, which supports value from 0 to 1. The larger the value, the greater the curvature. -> Graph +* line_type -> str + Line type,it can be 'solid', 'dashed', 'dotted' + +grid3D:gird3D components in cartesian coordinate system(Bar3D, Line3D, Scatter3D) + +* grid_width -> int + Width of grid component. Adaptive by default. +* grid_height -> int + Height of grid component. Adaptive by default. +* grid_top -> int/str + Distance between grid component and the top side of the container. + grid_top value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'top', 'middle', or 'bottom'. + If the grid_top value is set to be 'top', 'middle', or 'bottom',then the component will be aligned automatically based on position. +* grid_bottom -> int/str + Distance between grid component and the bottom side of the container. + grid_bottom value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'. +* grid_left -> int/str + Distance between grid component and the left side of the container. + grid_left value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'left', 'center', or 'right'. + If the grid_left value is set to be 'left', 'center', or 'right',then the component will be aligned automatically based on position. +* grid_right -> int/str + Distance between grid component and the right side of the container. + grid_right value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'. + +visualMap:It is a type of component for visual encoding, which maps the data to visual channels. + +* visual_type -> str + visual map type, 'color' or 'size' + color: For visual channel color, array is used, like: ['#333', '#78ab23', 'blue'],which means a color ribbon is formed based on the three color stops,and dataValues will be mapped to the ribbon. + size: For visual channel size, array is used, like: [20, 50],which means a size ribbon is formed based on the two value stops, and dataValues will be mapped to the ribbon. +* visual_range -> list + pecify the min and max dataValue for the visualMap component. +* visual_text_color -> str + visualMap text color. +* visual_range_text -> list + The label text on both ends, such as ['High', 'Low'] +* visual_range_size -> list + For visual channel size, array is used, like: [20, 50]. +* visual_range_color -> list + For visual channel color, array is used, like: ['#333', '#78ab23', 'blue']. +* visual_orient -> str + How to layout the visualMap component, 'horizontal' or 'vertical'. +* visual_pos -> str + Distance between visualMap component and the left side of the container. + visual_pos value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'left', 'center', or 'right'. +* visual_top -> str + Distance between visualMap component and the top side of the container. + visual_top value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'top', 'middle', or 'bottom'. +* is_calculable -> bool + Whether show handles, which can be dragged to adjust "selected range". + + +# Chart-types + +## Bar +> Bar chart shows different data through the height of a bar,which is used in rectangular coordinate with at least 1 category axis. + +Bar.add() signatures +```python +add(name, x_axis, y_axis, is_stack=False, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + data of xAixs +* y_axis -> list + data of yAxis +* is_stack -> bool + defalut -> False + It specifies whether to stack category axis. + +```python +from pyecharts import Bar + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图数据堆叠示例") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True) +bar.render() +``` +![bar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-0.gif) +**Tip:** Global configuration item needs set in the last ```add()``` or the setting will lose efficacy. + +```python +from pyecharts import Bar + +bar = Bar("标记线和标记点示例") +bar.add("商家A", attr, v1, mark_point=["average"]) +bar.add("商家B", attr, v2, mark_line=["min", "max"]) +bar.render() +``` +![bar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-1.gif) + +* mark_point -> list + mark point data, it can be 'min', 'max', 'average' +* mark_line -> list + mark line data, it can be 'min', 'max', 'average' +* mark_point_symbol -> str + default -> 'pin' + mark symbol, it cna be 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' +* mark_point_symbolsize -> int + default -> 50 + mark symbol size +* mark_point_textcolor -> str + default -> '#fff' + mark point text color + +```python +from pyecharts import Bar + +bar = Bar("x 轴和 y 轴交换") +bar.add("商家A", attr, v1) +bar.add("商家B", attr, v2, is_convert=True) +bar.render() +``` +![bar-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-2.png) + +dataZoom effect,'slider' type +```python +import random + +attr = ["{}天".format(i) for i in range(30)] +v1 = [random.randint(1, 30) for _ in range(30)] +bar = Bar("Bar - datazoom - slider 示例") +bar.add("", attr, v1, is_label_show=True, is_datazoom_show=True) +bar.show_config() +bar.render() +``` +![bar-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-4.gif) + +'inside' type +```python +attr = ["{}天".format(i) for i in range(30)] +v1 = [random.randint(1, 30) for _ in range(30)] +bar = Bar("Bar - datazoom - inside 示例") +bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='inside', datazoom_range=[10, 25]) +bar.show_config() +bar.render() +``` +![bar-5](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-5.gif) + +**Tip:** Datazoom fits all plane rectangular coordinate system figure,that's(Line, Bar, Scatter, EffectScatter, Kline) +**Tip:** Through label_color to set column's colour,like ['#eee', '#000'],any type of chart's legend colour can revise by label_color . + + +## Bar3D +Bar3D.add() signatures +``` +add(name, x_axis, y_axis, data, grid3D_opacity=1, grid3D_shading='color', **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + xAxis data +* y_axis -> list + yAxis data +* data -> [[], []] + zAxis data, it is represented by a two-dimension array. +* grid3D_opacity -> float + default -> 1 + opacity of gird3D item +* grid3D_shading -> str + 3D graphics coloring effect + * 'color': Only show color, not affected by lighting and other factors. + * 'lambert': Through the classic lambert coloring to show the light and shade. + * 'realistic': Realistic rendering. + +```python +from pyecharts import Bar3D + +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_aixs = ["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]] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +bar3d.add("", x_axis, y_aixs, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3D_width=200, grid3D_depth=80) +bar3d.show_config() +bar3d.render() +``` +![bar3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-0.gif) + +``` grid3D_shading``` could make bar look more real +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_aixs, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3D_width=200, grid3D_depth=80, + grid3D_shading='lambert') +bar3d.show_config() +bar3d.render() +``` +![bar3D-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-1.gif) + +```is_grid3D_rotate``` could let it rotate automatically +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_aixs, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3D_width=200, grid3D_depth=80, + is_grid3D_rotate=True) +bar3d.show_config() +bar3d.render() +``` +![bar3D-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-2.gif) + +set ``` grid3D_rotate_speed``` to adjust the rotation speed +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_aixs, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3D_width=200, grid3D_depth=80, + is_grid3D_rotate=True, grid3D_rotate_speed=180) +bar3d.show_config() +bar3d.render() +``` +![bar3D-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-3.gif) + +**Tip:** more details aboutt gird3D,please refer to [Global-options](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Global-options) + + +## EffectScatter +> The scatter graph with ripple animation. The special animation effect can visually highlights some data. + +EffectScatter.add() signatures +```python +add(name, x_value, y_value, symbol_size=10, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + data of xAxis +* y_axis -> list + data of yAxis +* symbol_size -> int + default -> 10 + symbol size + +```python +from pyecharts import EffectScatter + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [25, 20, 15, 10, 60, 33] +es = EffectScatter("动态散点图示例") +es.add("effectScatter", v1, v2) +es.render() +``` +![effectscatter-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/effectscatter-0.gif) + +```python +es = EffectScatter("动态散点图各种图形示例") +es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin") +es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect") +es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect") +es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond") +es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow") +es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle") +es.render() +``` +![effectscatter-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/effectscatter-1.gif) + +* symbol -> str + symbol shape, it can be 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' +* effect_brushtype -> str + default -> 'stroke' + The brush type for ripples. options: 'stroke' and 'fill'. +* effect_scale -> float + default -> 2.5 + The maximum zooming scale of ripples in animation. +* effect_period -> float + default -> 4(s) + The duration of animation. + + +## Funnel +Funnel.add() signatures +```python +add(name, attr, value, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute + +```python +from pyecharts import Funnel + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +value = [20, 40, 60, 80, 100, 120] +funnel = Funnel("漏斗图示例") +funnel.add("商品", attr, value, is_label_show=True, label_pos="inside", label_text_color="#fff") +funnel.render() +``` +![funnel-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/funnel-0.gif) + +```python +funnel = Funnel("漏斗图示例", width=600, height=400, title_pos='center') +funnel.add("商品", attr, value, is_label_show=True, label_pos="outside", legend_orient='vertical', + legend_pos='left') +funnel.show_config() +funnel.render() +``` +![funnel-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/funnel-1.png) + + +## Gauge +Gauge.add() signatures +```python +add(name, attr, value, scale_range=None, angle_range=None, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute +* scale_range -> list + default -> [0, 100] + data range of guage +* angle_range -> list + default -> [225, -45] + angle range of guage.The direct right side of circle center is 0 degree,the right above it is 90 degree, the direct left side of it is 180 degree. + +```python +from pyecharts import Gauge + +gauge = Gauge("仪表盘示例") +gauge.add("业务指标", "完成率", 66.66) +gauge.show_config() +gauge.render() +``` +![gauge-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/gauge-0.png) + +```python +gauge = Gauge("仪表盘示例") +gauge.add("业务指标", "完成率", 166.66, angle_range=[180, 0], scale_range=[0, 200], is_legend_show=False) +gauge.show_config() +gauge.render() +``` +![gauge-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/gauge-1.png) + + +## Geo +> Geographic coorinate system component.Geographic coorinate system component is used to draw maps, which also supports scatter series, and line series. + +Geo.add() signatures +```python +add(name, attr, value, type="scatter", maptype='china', symbol_size=12, border_color="#111", + geo_normal_color="#323c48", geo_emphasis_color="#2a333d", **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute +* type -> str + default -> 'scatter' + chart type, it can be 'scatter', 'effectscatter', 'heatmap' +* maptype -> str + type of map, it only supports 'china' temporarily. +* symbol_size -> int + default -> 12 + symbol size +* border_color -> str + default -> '#111' + color of map border +* geo_normal_color -> str + default -> '#323c48' + The color of the map area in normal state +* geo_emphasis_color -> str + default -> '#2a333d' + The color of the map area in emphasis state + +Scatter type +```python +from pyecharts import Geo + +data = [ + ("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15), + ("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21), + ("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25), + ("文登", 25),("上海", 25),("攀枝花", 25),("威海", 25),("承德", 25),("厦门", 26), + ("汕尾", 26),("潮州", 26),("丹东", 27),("太仓", 27),("曲靖", 27),("烟台", 28), + ("福州", 29),("瓦房店", 30),("即墨", 30),("抚顺", 31),("玉溪", 31),("张家口", 31), + ("阳泉", 31),("莱州", 32),("湖州", 32),("汕头", 32),("昆山", 33),("宁波", 33), + ("湛江", 33),("揭阳", 34),("荣成", 34),("连云港", 35),("葫芦岛", 35),("常熟", 36), + ("东莞", 36),("河源", 36),("淮安", 36),("泰州", 36),("南宁", 37),("营口", 37), + ("惠州", 37),("江阴", 37),("蓬莱", 37),("韶关", 38),("嘉峪关", 38),("广州", 38), + ("延安", 38),("太原", 39),("清远", 39),("中山", 39),("昆明", 39),("寿光", 40), + ("盘锦", 40),("长治", 41),("深圳", 41),("珠海", 42),("宿迁", 43),("咸阳", 43), + ("铜川", 44),("平度", 44),("佛山", 44),("海口", 44),("江门", 45),("章丘", 45), + ("肇庆", 46),("大连", 47),("临汾", 47),("吴江", 47),("石嘴山", 49),("沈阳", 50), + ("苏州", 50),("茂名", 50),("嘉兴", 51),("长春", 51),("胶州", 52),("银川", 52), + ("张家港", 52),("三门峡", 53),("锦州", 54),("南昌", 54),("柳州", 54),("三亚", 54), + ("自贡", 56),("吉林", 56),("阳江", 57),("泸州", 57),("西宁", 57),("宜宾", 58), + ("呼和浩特", 58),("成都", 58),("大同", 58),("镇江", 59),("桂林", 59),("张家界", 59), + ("宜兴", 59),("北海", 60),("西安", 61),("金坛", 62),("东营", 62),("牡丹江", 63), + ("遵义", 63),("绍兴", 63),("扬州", 64),("常州", 64),("潍坊", 65),("重庆", 66), + ("台州", 67),("南京", 67),("滨州", 70),("贵阳", 71),("无锡", 71),("本溪", 71), + ("克拉玛依", 72),("渭南", 72),("马鞍山", 72),("宝鸡", 72),("焦作", 75),("句容", 75), + ("北京", 79),("徐州", 79),("衡水", 80),("包头", 80),("绵阳", 80),("乌鲁木齐", 84), + ("枣庄", 84),("杭州", 84),("淄博", 85),("鞍山", 86),("溧阳", 86),("库尔勒", 86), + ("安阳", 90),("开封", 90),("济南", 92),("德阳", 93),("温州", 95),("九江", 96), + ("邯郸", 98),("临安", 99),("兰州", 99),("沧州", 100),("临沂", 103),("南充", 104), + ("天津", 105),("富阳", 106),("泰安", 112),("诸暨", 112),("郑州", 113),("哈尔滨", 114), + ("聊城", 116),("芜湖", 117),("唐山", 119),("平顶山", 119),("邢台", 119),("德州", 120), + ("济宁", 120),("荆州", 127),("宜昌", 130),("义乌", 132),("丽水", 133),("洛阳", 134), + ("秦皇岛", 136),("株洲", 143),("石家庄", 147),("莱芜", 148),("常德", 152),("保定", 153), + ("湘潭", 154),("金华", 157),("岳阳", 169),("长沙", 175),("衢州", 177),("廊坊", 193), + ("菏泽", 194),("合肥", 229),("武汉", 273),("大庆", 279)] + +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", +width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff", symbol_size=15, is_visualmap=True) +geo.show_config() +geo.render() +``` +![geo-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-0.gif) + +visualMap:visualMap is a type of component for visual encoding, which maps the data to visual channels +* is_visualmap -> bool + It specifies whether to use the datazoom component. +* visual_range -> list + default -> [0, 100] + pecify the min and max dataValue for the visualMap component. +* visual_text_color -> list + visualMap text color. +* visual_range_text -> list + The label text on both ends, such as ['High', 'Low'] +* visual_range_color -> list + default -> ['#50a3ba', '#eac763', '#d94e5d'] + For visual channel color, array is used, like: ['#333', '#78ab23', 'blue'],which means a color ribbon is formed based on the three color stops,and dataValues will be mapped to the ribbon. + Specifically,the dataValue that equals to visualMap.min will be mapped onto '#333',the dataValue that equals to visualMap.max will be mapped onto 'blue',and other dataValues will be piecewisely interpolated to get the final color. +* visual_orient -> str + default -> 'vertical' + How to layout the visualMap component, 'horizontal' or 'vertical'. +* visual_pos -> str/int + default -> 'left' + Distance between visualMap component and the left side of the container. + visual_pos value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'left', 'center', or 'right'. +* visual_top -> str/int + default -> 'top' + Distance between visualMap component and the top side of the container. + visual_top value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'top', 'middle', or 'bottom'. +* is_calculable -> bool + default -> True + Whether show handles, which can be dragged to adjust "selected range". + +HeatMap type +```python +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, + background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color='#fff') +geo.show_config() +geo.render() +``` +![geo-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-0-1.gif) + +EffectScatter type +```python +from pyecharts import Geo + +data = [("海门", 9), ("鄂尔多斯", 12), ("招远", 12), ("舟山", 12), ("齐齐哈尔", 14), ("盐城", 15)] +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", + width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5) +geo.show_config() +geo.render() +``` +![geo-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-1.gif) + + +## Graph +> Graph is a diagram to represent nodes and the links connecting nodes. + +Graph.add() signatures +```python +add(name, nodes, links, categories=None, is_focusnode=True, is_roam=True, is_rotatelabel=False, + layout="force", edge_length=50, gravity=0.2, repulsion=50, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* nodes -> dict + Relational nodes data + * name:Name of data item. # required!! + * x:x value of node position. + * y:y value of node position. + * value:value of data item. + * category:Index of category which the data item belongs to. + * symbol:Symbol of node of this category.Includes 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' + * symbolSize:symbol size +* links -> dict + Relational data between nodes + * source:name of source node on edge # required!! + * target:name of target node on edge # required!! + * vaule:value of edge,It can be used in the force layout to map to the length of the edge +* categories -> list + Name of category, which is used to correspond with legend and the content of tooltip. +* is_focusnode -> bool + defalut -> True + Whether to focus/highlight the hover node and it's adjacencies. +* is_roam -> bool/str + default -> True + Whether to enable mouse zooming and translating. + If either zooming or translating is wanted,it can be set to 'scale' or 'move'. Otherwise, set it to be true to enable both. +* is_rotatelabel -> bool + default -> False + Whether to rotate the label automatically. +* layout -> str + Graph layout. + default -> 'force' + * none:No any layout, use x, y provided in node as the position of node. + * circular:Adopt circular layout, see the example Les Miserables. + * force:Adopt force-directed layout, see the example Force,the detail about configrations of layout are in graph.force +* edge_length -> int + default -> 50 + The distance between 2 nodes on edge. This distance is also affected by repulsion. + It can be an array to represent the range of edge length.In this case edge with larger value will be shorter, which means two nodes are closer. And edge with smaller value will be longer. +* gravity -> int/float + default -> 0.2 + The gravity factor enforcing nodes approach to the center.The nodes will be closer to the center as the value becomes larger. +* repulsion -> int + default -> 50 + The repulsion factor between nodes. The repulsion will be stronger and the distance between 2 nodes becomes further as this value becomes larger. + It can be an array to represent the range of repulsion. + In this case larger value have larger repulsion and smaller value will have smaller repulsion. + +```python +from pyecharts import Graph + +nodes = [{"name": "结点1", "symbolSize": 10}, + {"name": "结点2", "symbolSize": 20}, + {"name": "结点3", "symbolSize": 30}, + {"name": "结点4", "symbolSize": 40}, + {"name": "结点5", "symbolSize": 50}, + {"name": "结点6", "symbolSize": 40}, + {"name": "结点7", "symbolSize": 30}, + {"name": "结点8", "symbolSize": 20}] +links = [] +for i in nodes: + for j in nodes: + links.append({"source": i.get('name'), "target": j.get('name')}) +graph = Graph("关系图-力引导布局示例") +graph.add("", nodes, links, repulsion=8000) +graph.show_config() +graph.render() + +``` +![graph-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-0.png) + +```python +graph = Graph("关系图-环形布局示例") +graph.add("", nodes, links, is_label_show=True, repulsion=8000, layout='circular', label_text_color=None) +graph.show_config() +graph.render() +``` +![graph-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-1.png) + +```python +from pyecharts import Graph + +import json +with open("..\json\weibo.json", "r", encoding="utf-8") as f: + j = json.load(f) + nodes, links, categories, cont, mid, userl = j +graph = Graph("微博转发关系图", width=1200, height=600) +graph.add("", nodes, links, categories, label_pos="right", repulsion=50, is_legend_show=False, + line_curve=0.2, label_text_color=None) +graph.show_config() +graph.render() +``` +![graph-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-2.gif) + +**Tip:** **lineStyle** parameter is configurable + + +# HeatMap +> Heat map mainly use colors to represent values, which must be used along with visualMap component. +> It can be used in either rectangular coordinate or geographic coordinate.But the behaviour on them are quite different. Rectangular coordinate must have two catagories to use it. + +HeatMap.add() signatures +```python +add(name, x_axis, y_axis, data, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> str + data of xAxis, it must be catagory axis. +* y_axis -> str + data of yAxis, it must be catagory axis. +* data -> [[],[]] + data array of series, it is represented by a two-dimension array +* is_date_heatmap -> bool + default -> False + Whether it is a date heatmap +* date_range -> str/list + date range of date heatmap, "2016" is year 2016, ["2016-5-5", "2017-5-5"] is 2016/5/5-2017/5/5 + +```python +import random +from pyecharts import HeatMap + +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_aixs = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"] +data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] +heatmap = HeatMap() +heatmap.add("热力图直角坐标系", x_axis, y_aixs, data, is_visualmap=True, + visual_text_color="#000", visual_orient='horizontal') +heatmap.show_config() +heatmap.render() +``` +![heatmap-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/heatmap-0.gif) + +```python +import datetime +import random +from pyecharts import HeatMap + +begin = datetime.date(2017, 1, 1) +end = datetime.date(2017, 12, 31) +data = [[str(begin + datetime.timedelta(days=i)), + random.randint(0, 100)] for i in range((end - begin).days+1)] +heatmap = HeatMap("日历热力图示例") +heatmap.add("日历热力图", data, date_range=["2017"], is_visualmap=True, + is_legend_show=False, is_date_heatmap=True, visual_orient="horizontal", + visual_pos="center", visual_top="top") +heatmap.render() +``` +![heatmap-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/heatmap-1.gif) + +**Tip:** Thermodynamic chart have to cooperate with VisualMap in use. + + +## Kline +> Kline chart use red to imply increasing with red and decreasing with blue + +Kline.add() signatures +```python +add(name, x_axis, y_axis, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + data of xAxis +* y_axis -> [[], []] + data pf yAxis.Data should be the two-dimensional array shown as follow. + Every data item (each line in the example above) represents a box, which contains 4 values. They are: [open, close, lowest, highest] (namely: [opening value, closing value, lowest value, highest value]) +```python +from pyecharts import Kline + +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1) +kline.show_config() +kline.render() +``` +![kline-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-0.png) + +Kline + dataZoom +```python +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, mark_point=["max"], is_datazoom_show=True) +kline.show_config() +kline.render() +``` +![kline-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-1.gif) + + +## Line +> Broken line chart relates all the data points symbol by broken lines, +> which is used to show the trend of data changing.It could be used in both rectangular coordinate and polar coordinate. + +Line.add() signatures +```python +add(name, x_axis, y_axis, is_symbol_show=True, is_smooth=False, is_stack=False, + is_step=False, is_fill=False, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + data of xAxis +* y_axis -> list + data of yAxis +* is_symbol_show -> bool + default -> True + It specifies whether to show the symbol. +* is_smooth -> bool + default -> False + Whether to show as smooth curve. +* is_stack -> bool + default -> Flase + It specifies whether to stack category axis. +* is_step -> bool/str + default -> False + Whether to show as a step line.It can be true, false. Or 'start', 'middle', 'end'.Which will configure the turn point of step line. +* is_fill -> bool + default -> False + Whether to fill area. + +```python +from pyecharts import Line + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 10, 100] +v2 = [55, 60, 16, 20, 15, 80] +line = Line("折线图示例") +line.add("商家A", attr, v1, mark_point=["average"]) +line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"]) +line.show_config() +line.render() +``` +![line-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-0.gif) + +* mark_point -> list + mark point data, it can be 'min', 'max', 'average' +* mark_line -> list + mark line data, it can be 'min', 'max', 'average' +* mark_point_symbol -> str + default -> 'pin' + mark symbol, it cna be 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' +* mark_point_symbolsize -> int + default -> 50 + mark symbol size +* mark_point_textcolor -> str + default -> '#fff' + mark point text color + +Other Configurations Of Marker Point +```python +line = Line("折线图示例") +line.add("商家A", attr, v1, mark_point=["average", "max", "min"], + mark_point_symbol='diamond', mark_point_textcolor='#40ff27') +line.add("商家B", attr, v2, mark_point=["average", "max", "min"], + mark_point_symbol='arrow', mark_point_symbolsize=40) +line.show_config() +line.render() +``` +![line-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-0-1.png) + +```python +line = Line("折线图-数据堆叠示例") +line.add("商家A", attr, v1, is_stack=True, is_label_show=True) +line.add("商家B", attr, v2, is_stack=True, is_label_show=True) +line.show_config() +line.render() +``` +![line-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-1.gif) + +```python +line = Line("折线图-阶梯图示例") +line.add("商家A", attr, v1, is_step=True, is_label_show=True) +line.show_config() +line.render() +``` +![line-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-2.png) + +```python +line = Line("折线图-面积图示例") +line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None) +line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True) +line.show_config() +line.render() +``` +![line-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-3.png) + +* area_opacity -> float + Opacity of the component. Supports value from 0 to 1, and the component will not be drawn when set to 0. +* area_color -> str + Fill color. + +**Tip:** **lineStyle** Parameter is Configurable +**Tip:** Setting line colour by label_color,like ['#eee', '#000'],all type of chart can revise label colour by label_color. + + +# Line3D +Line3D.add() signatures +```python +add(name, data, grid3D_opacity=1, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* data -> [[], []] + data of line3D +* grid3D_opacity -> float + default -> 1 + opacity of gird3D item + +draw a spring +```python +from pyecharts import Line3D + +import math +_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]) +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +line3d = Line3D("3D 折线图示例", width=1200, height=600) +line3d.add("", _data, is_visualmap=True, visual_range_color=range_color, visual_range=[0, 30], + grid3D_rotate_sensitivity=5) +line3d.render() +``` +![line3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/line3D-0.gif) + +rotating spring +```python +from pyecharts import Line3D + +import math +_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]) +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +line3d = Line3D("3D 折线图示例", width=1200, height=600) +line3d.add("", _data, is_visualmap=True, visual_range_color=range_color, visual_range=[0, 30], + is_grid3D_rotate=True, grid3D_rotate_speed=180) +line3d.render() +``` +![line3D-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line3D-1.gif) + +**Tip:** more details aboutt gird3D,please refer to [Global-options](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Global-options) + +## Liquid +> Liquid chart is usually used to represent data in percentage. + +Liquid.add() signatures +```python +add(name, data, shape='circle', liquid_color=None, is_liquid_animation=True, + is_liquid_outline_show=True, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* data -> list + data of liquid,[0.6, 0.5, 0.4, 0.3] -> This creates a chart wit waves at position of 60%, 50%, 40%, and 30%. +* shape -> str + Shape of water fill chart.It can be one of the default symbols: 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' +* liquid_color -> list + default -> ['#294D99', '#156ACF', '#1598ED', '#45BDFF'] + To set colors for liquid fill chart series, set color to be an array of colors. +* is_liquid_animation -> bool + default -> True + Whether disable animation. +* is_liquid_outline_show -> bool + default -> True + whether hide the outline + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6]) +liquid.show_config() +liquid.render() +``` +![liquid-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-0.gif) + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False) +liquid.show_config() +liquid.render() +``` +![liquid-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-1.gif) + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape='diamond') +liquid.show_config() +liquid.render() +``` +![liquid-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-2.png) + +## Map +> Map is maily used in the visulization of geographic area data,which can be used with visualMap component to visualize the datas such as population distribution density in diffrent areas. + +Map.add() signatures +```python +add(name, attr, value, is_roam=True, maptype='china', **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute +* is_roam -> bool/str + default -> True + Whether to enable mouse zooming and translating.If either zooming or translating is wanted,it can be set to 'scale' or 'move'. Otherwise, set it to be true to enable both. +* maptype -> str + type of map, it supports chinese geographical names, such as "安徽, 澳门, 北京, 重庆, 福建, 福建, 甘肃, 广东,广西, 广州, 海南, 河北, 黑龙江, 河南, 湖北, 湖南, 江苏, 江西, 吉林, 辽宁, 内蒙古, 宁夏, 青海, 山东, 上海, 陕西, 四川, 台湾, 天津, 香港, 新疆, 西藏, 云南, 浙江" and [363 provincial cities](https://github.com/chfw/echarts-china-cities-js#featuring-citiesor-for-single-download). + +```python +from pyecharts import Map + +value = [155, 10, 66, 78] +attr = ["福建", "山东", "北京", "上海"] +map = Map("全国地图示例", width=1200, height=600) +map.add("", attr, value, maptype='china') +map.show_config() +map.render() +``` +![map-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-0.gif) + +```python +from pyecharts import Map + +value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6] +attr = ["福建", "山东", "北京", "上海", "甘肃", "新疆", "河南", "广西", "西藏"] +map = Map("Map 结合 VisualMap 示例", width=1200, height=600) +map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000') +map.show_config() +map.render() +``` +![map-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-1.gif) + +**Tip:** Settings can combine with visualMap component. + +```python +from pyecharts import Map + +value = [20, 190, 253, 77, 65] +attr = ['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市'] +map = Map("广东地图示例", width=1200, height=600) +map.add("", attr, value, maptype='广东', is_visualmap=True, visual_text_color='#000') +map.show_config() +map.render() +``` +![map-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-2.gif) + +### About Customized Map +Because map contain large area,this program can't cover all the map,but don't worry about it.Echarts officially provide your own custom map [echart-map](http://echarts.baidu.com/download-map.html),this function allow you make map that you need,just download in JS file form. + +open file pyecharts/temple.py under the installation directory,add the same line under the corresponding of _temple variable. + `````` +correspond under Jupyter Notebook add the same lineunder _mapindex variable. +```"北京": "beijing: '//oog4yfyu0.bkt.clouddn.com/beijing'"``` +Then use customized map in the program!The way import Js decide by yourself,only if it can be found by the program! + + +## Parallel +> Parallel Coordinates is a common way of visualizing high-dimensional geometry and analyzing multivariate data. + +Parallel.add() signatures +```python +add(name, data, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* data -> [[],[]] + data array of series, it is represented by a two-dimension array. + +Parallel.config() signatures +```python +config(schema=None, c_schema=None) +``` +* schema + Dimension index of coordinate axis. + a axis name list, like ['apple', 'orange', 'watermelon'] +* c_schema + User customize coordinate axis for parallel coordinate. + * dim -> int + Dimension index of coordinate axis. + * name > str + Name of axis. + * type -> str + Type of axis + value:Numerical axis, suitable for continuous data. + category:Category axis, suitable for discrete category data.Data should only be set via data for this type. + * min -> int + The minimun value of axis. + * max -> int + The maximum value of axis. + * inverse - bool + default -> False + Whether axis is inversed. + * nameLocation -> str + Location of axis name. it can be 'start', 'middle', 'end'. + +```python +from pyecharts import Parallel + +schema = ["data", "AQI", "PM2.5", "PM10", "CO", "NO2"] +data = [ + [1, 91, 45, 125, 0.82, 34], + [2, 65, 27, 78, 0.86, 45,], + [3, 83, 60, 84, 1.09, 73], + [4, 109, 81, 121, 1.28, 68], + [5, 106, 77, 114, 1.07, 55], + [6, 109, 81, 121, 1.28, 68], + [7, 106, 77, 114, 1.07, 55], + [8, 89, 65, 78, 0.86, 51, 26], + [9, 53, 33, 47, 0.64, 50, 17], + [10, 80, 55, 80, 1.01, 75, 24], + [11, 117, 81, 124, 1.03, 45] +] +parallel = Parallel("平行坐标系-默认指示器") +parallel.config(schema) +parallel.add("parallel", data, is_random=True) +parallel.show_config() +parallel.render() +``` +![parallel-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/parallel-0.png) + +```python +from pyecharts import Parallel + +c_schema = [ + {"dim": 0, "name": "data"}, + {"dim": 1, "name": "AQI"}, + {"dim": 2, "name": "PM2.5"}, + {"dim": 3, "name": "PM10"}, + {"dim": 4, "name": "CO"}, + {"dim": 5, "name": "NO2"}, + {"dim": 6, "name": "CO2"}, + {"dim": 7, "name": "等级", + "type": "category", "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']} +] +data = [ + [1, 91, 45, 125, 0.82, 34, 23, "良"], + [2, 65, 27, 78, 0.86, 45, 29, "良"], + [3, 83, 60, 84, 1.09, 73, 27, "良"], + [4, 109, 81, 121, 1.28, 68, 51, "轻度污染"], + [5, 106, 77, 114, 1.07, 55, 51, "轻度污染"], + [6, 109, 81, 121, 1.28, 68, 51, "轻度污染"], + [7, 106, 77, 114, 1.07, 55, 51, "轻度污染"], + [8, 89, 65, 78, 0.86, 51, 26, "良"], + [9, 53, 33, 47, 0.64, 50, 17, "良"], + [10, 80, 55, 80, 1.01, 75, 24, "良"], + [11, 117, 81, 124, 1.03, 45, 24, "轻度污染"], + [12, 99, 71, 142, 1.1, 62, 42, "良"], + [13, 95, 69, 130, 1.28, 74, 50, "良"], + [14, 116, 87, 131, 1.47, 84, 40, "轻度污染"] +] +parallel = Parallel("平行坐标系-用户自定义指示器") +parallel.config(c_schema=c_schema) +parallel.add("parallel", data) +parallel.show_config() +parallel.render() +``` +![parallel-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/parallel-1.png) + +**Tip:** **lineStyle** Parameter is Configurable + + +## Pie +> The pie chart is mainly used for showing proportion of different categories.Each arc length represents the proportion of data quantity. + +Pie.add() signatures +```python +add(name, attr, value, radius=None, center=None, rosetype=None, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute +* radius -> list + default -> [0, 75] + Radius of Pie chart, the first of which is inner radius, and the second is outer radius. + Percentage is supported. When set in percentage,it's relative to the smaller size between height and width of the container. +* center -> list + default -> [50, 50] + Center position of Pie chart, the first of which is the horizontal position,and the second is the vertical position. + Percentage is supported. When set in percentage, the item is relative to the container width,and the second item to the height. +* rosetype -> str + default -> 'radius' + Whether to show as Nightingale chart, which distinguishs data through radius. There are 2 optional modes: + * radius:Use central angle to show the percentage of data, radius to show data size. + * area:All the sectors will share the same central angle, the data size is shown only through radiuses. + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图示例") +pie.add("", attr, v1, is_label_show=True) +pie.show_config() +pie.render() +``` +![pie-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-0.gif) + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图-圆环图示例", title_pos='center') +pie.add("", attr, v1, radius=[40, 75], label_text_color=None, is_label_show=True, + legend_orient='vertical', legend_pos='left') +pie.show_config() +pie.render() +``` +![pie-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-1.png) + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +v2 = [19, 21, 32, 20, 20, 33] +pie = Pie("饼图-玫瑰图示例", title_pos='center', width=900) +pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius') +pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype='area', + is_legend_show=False, is_label_show=True) +pie.show_config() +pie.render() +``` +![pie-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-2.png) + + +## Polar +> Polar coordinate can be used in scatter and line chart. Every polar coordinate has an angleAxis and a radiusAxis. + +Polar.add() signatures +```python +add(name, data, angle_data=None, radius_data=None, type='line', symbol_size=4, start_angle=90, + rotate_step=0, boundary_gap=True, clockwise=True, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* data -> [[],[]] + data of polar, [Polar radius, Polar angle,it is represented by a two-dimension array. +* angle_data -> list + Category data for angle, available in type: 'category' axis. +* radius_data -> list + Category data for radius, available in type: 'category' axis. +* type -> str + default -> 'line' + chart type,it can be 'scatter', 'effectScatter', 'barAngle', 'barRadius' +* symbol_size -> int + default -> 4 + symbol size +* start_angle -> int + default -> 90 + Starting angle of axis.standing for top position of center.0 degree stands for right position of center. +* rotate_step -> int + default -> 0 + Rotation degree of axis label, which is especially useful when there is no enough space for category axis. + Rotation degree is from -90 to 90. +* boundary_gap -> bool + default -> True + The boundary gap on both sides of a coordinate axis. + The setting and behavior of category axes and non-category axes are different. + The boundaryGap of category axis can be set to either true or false. + Default value is set to be true, in which case axisTick is served only as a separation line,and labels and data appear only in the center part of two axis ticks, which is called band. +* clockwise -> bool + default -> True + Whether the positive position of axis is in clockwise. True for clockwise by default. +* is_stack -> bool + It specifies whether to stack category axis. +* axis_range -> list + default -> [None, None] + axis scale range +* is_angleaxis_show -> bool + default -> True + whether show angle axis. +* is_radiusaxis_show -> bool + default -> True + whether show radius axis. + +```python +from pyecharts import Polar + +import random +data = [(i, random.randint(1, 100)) for i in range(101)] +polar = Polar("极坐标系-散点图示例") +polar.add("", data, boundary_gap=False, type='scatter', is_splitline_show=False, + area_color=None, is_axisline_show=True) +polar.show_config() +polar.render() +``` +![polar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-0.png) + +* is_splitline_show -> bool + default -> True + It specifies whether to show split line. +* is_axisline_show -> bool + default -> True + It specifies whether to show axis line. +* area_opacity -> float + Opacity of the component. Supports value from 0 to 1, and the component will not be drawn when set to 0. +* area_color -> str + Fill color. + +**Tip:** **lineStyle** Parameter is Configurable + +```python +from pyecharts import Polar + +import random +data_1 = [(10, random.randint(1, 100)) for i in range(300)] +data_2 = [(11, random.randint(1, 100)) for i in range(300)] +polar = Polar("极坐标系-散点图示例", width=1200, height=600) +polar.add("", data_1, type='scatter') +polar.add("", data_2, type='scatter') +polar.show_config() +polar.render() +``` +![polar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-1.png) + +```python +from pyecharts import Polar + +import random +data = [(i, random.randint(1, 100)) for i in range(10)] +polar = Polar("极坐标系-动态散点图示例", width=1200, height=600) +polar.add("", data, type='effectScatter', effect_scale=10, effect_period=5) +polar.show_config() +polar.render() +``` +![polar-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-2.gif) + +```python +from pyecharts import Polar + +radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) +polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True) +polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True) +polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True) +polar.show_config() +polar.render() +``` +![polar-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-3.gif) + +```python +from pyecharts import Polar + +radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) +polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barAngle', is_stack=True) +polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barAngle', is_stack=True) +polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barAngle', is_stack=True) +polar.show_config() +polar.render() +``` +![polar-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-4.png) + + +## Radar +> Radar chart is mainly used to show multi-variable data,such as the analysis of a football player's varied attributes. It relies radar component. + +Radar.add() signatures +```python +add(name, value, item_color=None, **kwargs) +``` +* name -> list + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* value -> [[],[]] + data array of series, it is represented by a two-dimension array. +* item_color -> str + Specify a single legend color + +Radar.config() signatures +```python +config(schema=None, c_schema=None, shape="", rader_text_color="#000", **kwargs): +``` +* schema -> list + The default radar map indicator, used to specify multiple dimensions in the radar map,will process the data into a dictionary of {name: xx, value: xx} +* c_schema -> dict + Indicator of radar chart, which is used to assign multiple variables(dimensions) in radar chart. + * name: Indicator's name. + * min: The maximum value of indicator. It is an optional configuration, but we recommend to set it manually. + * max: The maximum value of indicator. It is an optional configuration, but we recommend to set it manually. +* shape -> str + Radar render type, in which 'polygon' and 'circle' are supported. +* rader_text_color -> str + default -> '#000' + Radar chart data item font color + +```python +from pyecharts import Radar + +schema = [ + ("销售", 6500), ("管理", 16000), ("信息技术", 30000), ("客服", 38000), ("研发", 52000), ("市场", 25000)] +v1 = [[4300, 10000, 28000, 35000, 50000, 19000]] +v2 = [[5000, 14000, 28000, 31000, 42000, 21000]] +radar = Radar() +radar.config(schema) +radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True) +radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False) +radar.show_config() +radar.render() +``` +![radar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/radar-0.gif) + +* is_area_show -> bool + It specifies whether to show split area. +* area_opacity -> float + Opacity of the component. Supports value from 0 to 1, and the component will not be drawn when set to 0. +* area_color -> str + Fill color. +* is_splitline_show -> bool + default -> True + It specifies whether to show split line. +* is_axisline_show -> bool + default -> True + It specifies whether to show axis line. + +**Tip:** **lineStyle** Parameter is Configurable + +```python +value_bj = [ + [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2], + [56, 7, 63, 0.3, 14, 5, 3], [33, 7, 29, 0.33, 16, 6, 4], + [42, 24, 44, 0.76, 40, 16, 5], [82, 58, 90, 1.77, 68, 33, 6], + [74, 49, 77, 1.46, 48, 27, 7], [78, 55, 80, 1.29, 59, 29, 8], + [267, 216, 280, 4.8, 108, 64, 9], [185, 127, 216, 2.52, 61, 27, 10], + [39, 19, 38, 0.57, 31, 15, 11], [41, 11, 40, 0.43, 21, 7, 12], + [64, 38, 74, 1.04, 46, 22, 13], [108, 79, 120, 1.7, 75, 41, 14], + [108, 63, 116, 1.48, 44, 26, 15], [33, 6, 29, 0.34, 13, 5, 16], + [94, 66, 110, 1.54, 62, 31, 17], [186, 142, 192, 3.88, 93, 79, 18], + [57, 31, 54, 0.96, 32, 14, 19], [22, 8, 17, 0.48, 23, 10, 20], + [39, 15, 36, 0.61, 29, 13, 21], [94, 69, 114, 2.08, 73, 39, 22], + [99, 73, 110, 2.43, 76, 48, 23], [31, 12, 30, 0.5, 32, 16, 24], + [42, 27, 43, 1, 53, 22, 25], [154, 117, 157, 3.05, 92, 58, 26], + [234, 185, 230, 4.09, 123, 69, 27],[160, 120, 186, 2.77, 91, 50, 28], + [134, 96, 165, 2.76, 83, 41, 29], [52, 24, 60, 1.03, 50, 21, 30], +] +value_sh = [ + [91, 45, 125, 0.82, 34, 23, 1], [65, 27, 78, 0.86, 45, 29, 2], + [83, 60, 84, 1.09, 73, 27, 3], [109, 81, 121, 1.28, 68, 51, 4], + [106, 77, 114, 1.07, 55, 51, 5], [109, 81, 121, 1.28, 68, 51, 6], + [106, 77, 114, 1.07, 55, 51, 7], [89, 65, 78, 0.86, 51, 26, 8], + [53, 33, 47, 0.64, 50, 17, 9], [80, 55, 80, 1.01, 75, 24, 10], + [117, 81, 124, 1.03, 45, 24, 11], [99, 71, 142, 1.1, 62, 42, 12], + [95, 69, 130, 1.28, 74, 50, 13], [116, 87, 131, 1.47, 84, 40, 14], + [108, 80, 121, 1.3, 85, 37, 15], [134, 83, 167, 1.16, 57, 43, 16], + [79, 43, 107, 1.05, 59, 37, 17], [71, 46, 89, 0.86, 64, 25, 18], + [97, 71, 113, 1.17, 88, 31, 19], [84, 57, 91, 0.85, 55, 31, 20], + [87, 63, 101, 0.9, 56, 41, 21], [104, 77, 119, 1.09, 73, 48, 22], + [87, 62, 100, 1, 72, 28, 23], [168, 128, 172, 1.49, 97, 56, 24], + [65, 45, 51, 0.74, 39, 17, 25], [39, 24, 38, 0.61, 47, 17, 26], + [39, 24, 39, 0.59, 50, 19, 27], [93, 68, 96, 1.05, 79, 29, 28], + [188, 143, 197, 1.66, 99, 51, 29], [174, 131, 174, 1.55, 108, 50, 30], +] +c_schema= [{"name": "AQI", "max": 300, "min": 5}, + {"name": "PM2.5", "max": 250, "min": 20}, + {"name": "PM10", "max": 300, "min": 5}, + {"name": "CO", "max": 5}, + {"name": "NO2", "max": 200}, + {"name": "SO2", "max": 100}] +radar = Radar() +radar.config(c_schema=c_schema, shape='circle') +radar.add("北京", value_bj, item_color="#f9713c", symbol=None) +radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None) +radar.show_config() +radar.render() +``` +![radar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/radar-1.gif) + +**Tip:** symblo=None make marked graphic hiden(small circle) + + +## Scatter +> The scatter chart in rectangular coordinate could be used to present the relation between x and y. +> If data have multiple dimensions, the values of the other dimensions can be visualized through symbol with various sizes and colors, which becomes a bubble chart. These can be done by using with visualMap component. + +Scatter.add() signatures +```python +add(name, x_axis, y_axis, symbol_size=10, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* x_axis -> list + data of xAxis +* y_axis -> list + data of yAxis +* symbol_size -> int + default -> 10 + symbol size + +```python +from pyecharts import Scatter + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [10, 20, 30, 40, 50, 60] +scatter = Scatter("散点图示例") +scatter.add("A", v1, v2) +scatter.add("B", v1[::-1], v2) +scatter.show_config() +scatter.render() +``` +![scatter-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0.png) + +Scatter also built-in draw method. +```python +draw(path, color=None) +``` +convert pixels on the image into array ,when colour is (255,255,255)only retain non white pixels' coordinate information. output two k_lst, v_lst list can just as the data item of scatter plot. + +``` +* path -> str + path of Image that want to draw +* color -> str + select a color to exclude, (225, 225, 225) means Keep only white pixel information. + +First of all ,you need to prepare a picture,like + +![pyecharts-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/pyecharts-0.png) + +```python +from pyecharts import Scatter + +scatter = Scatter("散点图示例") +v1, v2 = scatter.draw("../images/pyecharts-0.png") +scatter.add("pyecharts", v1, v2, is_random=True) +scatter.show_config() +scatter.render() +``` +![pyecharts-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/pyecharts-1.png) + + +# Scatter3D +Scatter3D.add() signatures +```python +add(name, data, grid3D_opacity=1, **kwargs) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* data -> [[], []] + data of line3D +* grid3D_opacity -> float + default -> 1 + opacity of gird3D item + +```python +from pyecharts import Scatter3D + +import random +data = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)] for _ in range(80)] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) +scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) +scatter3D.render() +``` +![scatter3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter3D-0.gif) + +**Tip:** more details aboutt gird3D,please refer to [Global-options](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/documentation.md#Global-options) + +## WordCloud +WordCloud.add() signatures +```python +add(name, attr, value, shape="circle", word_gap=20, word_size_range=None, rotate_step=45) +``` +* name -> str + Series name used for displaying in tooltip and filtering with legend,or updaing data and configuration with setOption. +* attr -> list + name of attribute +* value -> list + value of attribute +* shape -> list + shape of wordcloud.It can be 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' +* word_gap -> int + default -> 20 + Gap of word.size of the grid in pixels for marking the availability of the canvas,the larger the grid size, the bigger the gap between words. +* word_size_range -> list + default -> [12, 60] + Text size range which the value in data will be mapped to. +* rotate_step -> int + default -> 45 + Text rotation range and step in degree. Text will be rotated randomly in range [-90, 90]. + +```python +from pyecharts import WordCloud + +name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', + 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', + 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', + 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break'] +value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, + 550, 462, 366, 360, 282, 273, 265] +wordcloud = WordCloud(width=1300, height=620) +wordcloud.add("", name, value, word_size_range=[20, 100]) +wordcloud.show_config() +wordcloud.render() +``` +![wordcloud-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/wordcloud-0.png) + +```python +wordcloud = WordCloud(width=1300, height=620) +wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond') +wordcloud.show_config() +wordcloud.render() +``` +![wordcloud-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/wordcloud-1.png) + +**Tip:** if and only if shape is default'circle' the rotate_step parameter will take effect. + + +# User Custom + +## Combination different types of chart and draw they on same picture. +User Can Combination Custom Line/Bar/Kline, Scatter/EffectScatter chart,draw different types of chart on one image.Using the first chart as basement,data after that will draw on the first chart. +Need use the method ```get_series()``` and ```custom()```. + +```python +get_series() +""" Get chart's series data """ +``` +```python +custom(series) +''' Add to custom chart type ''' +``` +* series -> dict + add to chart type series data + +irst use ```get_series()``` to get the data,then use ```custom()``` combine the charts together + +Line + Bar +```python +from pyecharts import Bar, Line + +attr = ['A', 'B', 'C', 'D', 'E', 'F'] +v1 = [10, 20, 30, 40, 50, 60] +v2 = [15, 25, 35, 45, 55, 65] +v3 = [38, 28, 58, 48, 78, 68] +bar = Bar("Line - Bar 示例") +bar.add("bar", attr, v1) +line = Line() +line.add("line", v2, v3) +bar.custom(line.get_series()) +bar.show_config() +bar.render() +``` +![custom-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/custom-0.gif) + +Specific procedure are as follows: +1. initialize the chart,add normal configuration item. +2. call the first chart's custom(type.get_series()) method and one by one. +3. call the first chart's render() method. + +**Tip:** ```bar.custom(line.get_series())``` this one have to be careful,use the first one chart as basement.remember do not write ```bar.custom(bar.get_series())``` or the program will get into endless self call state,infinite recursion,finally may cause your computer to crash. + +Scatter + EffectScatter +```python +from pyecharts import Scatter, EffectScatter + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [30, 30, 30, 30, 30, 30] +v3 = [50, 50, 50, 50, 50, 50] +v4 = [10, 10, 10, 10, 10, 10] +es = EffectScatter("Scatter - EffectScatter 示例") +es.add("es", v1, v2) +scatter = Scatter() +scatter.add("scatter", v1, v3) +es.custom(scatter.get_series()) +es_1 = EffectScatter() +es_1.add("es_1", v1, v4, symbol='pin', effect_scale=5) +es.custom(es_1.get_series()) +es.show_config() +es.render() +``` +![custom-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/custom-1.gif) + +Kline + Line +```python +import random +from pyecharts import Line, Kline + +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +attr = ["2017/7/{}".format(i + 1) for i in range(31)] +kline = Kline("Kline - Line 示例") +kline.add("日K", attr, v1) +line_1 = Line() +line_1.add("line-1", attr, [random.randint(2400, 2500) for _ in range(31)]) +line_2 = Line() +line_2.add("line-2", attr, [random.randint(2400, 2500) for _ in range(31)]) +kline.custom(line_1.get_series()) +kline.custom(line_2.get_series()) +kline.show_config() +kline.render() +``` +![custom-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/custom-2.png) + +## Combination different types of chart and draw on multiple picture,the chart parallel disply. +User Can Combination Custom Line/Bar/Kline/Scatter/EffectScatter/Pie/HeatMap chart,draw different types of chart on multiple image.Using the first chart as basement +Need use the method ```get_series()``` and ```grid()```. + +```python +get_series() +""" get chart's series data """ +``` +```python +grid(series,grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right) +''' Concurrently show charts ''' +``` +* series -> dict + other chart series data +* grid_width -> str/int + Width of grid component. Adaptive by default. +* grid_height -> str/int + Height of grid component. Adaptive by default. +* grid_top -> str/int + Distance between grid component and the top side of the container. + grid_top value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'top', 'middle', or 'bottom'. + If the grid_top value is set to be 'top', 'middle', or 'bottom',then the component will be aligned automatically based on position. +* grid_bottom -> str/int + Distance between grid component and the bottom side of the container. + grid_bottom value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'. +* grid_left -> str/int + Distance between grid component and the left side of the container. + grid_left value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%';and it can also be 'left', 'center', or 'right'. + If the grid_left value is set to be 'left', 'center', or 'right',then the component will be aligned automatically based on position. +* grid_right -> str/int + Distance between grid component and the right side of the container. + grid_right value can be instant pixel value like 20;it can also be percentage value relative to container width like '20%'. + +irst use ```get_series()``` get data,then use ```grid()``` combine the charts + +up and down type,Bar + Line +```python +from pyecharts import Bar, Line + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", height=720, is_grid=True) +bar.add("商家A", attr, v1, is_stack=True, grid_bottom="60%") +bar.add("商家B", attr, v2, is_stack=True, grid_bottom="60%") +line = Line("折线图示例", title_top="50%") +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_top="50%") +bar.grid(line.get_series(), grid_top="60%") +bar.show_config() +bar.render() +``` +![grid-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-0.gif) + +**once more Tip:** ```bar.grid(line.get_series(), grid_top="60%")``` do not write ```bar.grid(bar.get_series())``` or get into edless recursion + +The specific process is as follows: +1. Make is_grid=True when the first chart initialize,declare using grid assembly. +2. The first form's add() method have to make grid_* parameter,it has to be done,because grid_* default value is None,and won't add to configuration item.Appoint one at least. +3. Initialize other type(so do the same type),not need appoint grid_* parameter. +4. Call the first chart's grid() method and add one by one,and set grid_* parameter,it has to be done,at least one. +5. Call the first chart's render() method. + +left and right type,Scatter + EffectScatter +```python +from pyecharts import Scatter, EffectScatter + +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +scatter = Scatter(width=1200, is_grid=True) +scatter.add("散点图示例", v1, v2, grid_left="60%", legend_pos="70%") +es = EffectScatter() +es.add("动态散点图示例", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], + effect_scale=6, legend_pos="20%") +scatter.grid(es.get_series(), grid_right="60%") +scatter.show_config() +scatter.render() +``` +![grid-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-1.gif) + +up,down,left and right type,Bar + Line + Scatter + EffectScatter +```python +from pyecharts import Bar, Line, Scatter, EffectScatter + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", height=720, width=1200, title_pos="65%", is_grid=True) +bar.add("商家A", attr, v1, is_stack=True, grid_bottom="60%", grid_left="60%") +bar.add("商家B", attr, v2, is_stack=True, grid_bottom="60%", grid_left="60%", legend_pos="80%") +line = Line("折线图示例") +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%") +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") +scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") +es = EffectScatter("动态散点图示例", title_top="50%") +es.add("es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, + legend_top="50%", legend_pos="20%") +bar.grid(line.get_series(), grid_bottom="60%", grid_right="60%") +bar.grid(scatter.get_series(), grid_top="60%", grid_left="60%") +bar.grid(es.get_series(), grid_top="60%", grid_right="60%") +bar.show_config() +bar.render() +``` +![grid-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-2.gif) + +Line + Pie +```python +from pyecharts import Line, Pie + +line = Line("折线图示例", width=1200, is_grid=True) +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], + mark_line=["average"], grid_right="65%") +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%") +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图示例", title_pos="45%") +pie.add("", attr, v1, radius=[30, 55], legend_pos="65%", legend_orient='vertical') +line.grid(pie.get_series(), grid_left="60%") +line.show_config() +line.render() +``` +![grid-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-3.png) + +Line + Kline +```python +from pyecharts import Line, Kline + +line = Line("折线图示例", width=1200, is_grid=True) +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], + mark_line=["average"], grid_right="60%") +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%", grid_right="60%") +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +value = [20, 40, 60, 80, 100, 120] +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例", title_pos="60%") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, legend_pos="80%") +line.grid(kline.get_series(), grid_left="55%") +line.show_config() +line.render() +``` +![grid-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-4.png) + +HeatMap + Bar +```python +import random + +from pyecharts import HeatMap, Bar + +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_aixs = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"] +data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] +heatmap = HeatMap("热力图示例", height=700, is_grid=True) +heatmap.add("热力图直角坐标系", x_axis, y_aixs, data, is_visualmap=True, visual_top="45%", + visual_text_color="#000", visual_orient='horizontal', grid_bottom="60%") +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", title_top="52%") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True, legend_top="50%") +heatmap.grid(bar.get_series(), grid_top="60%") +heatmap.show_config() +heatmap.render() +``` +![grid-5](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-5.gif) +Bar will influenced by HeatMap,it's funy. + +# Multiple charts in one html page + +You will need use `Page` class and its api is simple, call `add()` charts to and then call `render()` in +the end. However, wordcloud and liquid charts cannot be mixed in. + + +Here is an example code:: + +```python +#coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Bar, Scatter3D +from pyecharts import Page + + +page = Page() # step 1 + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图数据堆叠示例") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True) +page.add(bar) # step 2 + +# scatter3D_0 +import random +data = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)] for _ in range(80)] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) +scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) +page.add(scatter3D) # step 2 + +page.render() # step 3 +``` + +After executing above code, you will find two charts in render.html: + +![multiple-charts-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/multiple-charts-0.gif) + +# Flask and Django Integration Documentation + +* [pyecharts + Flask](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/doc_flask.md) +* [pyecharts + Django](https://github.com/chenjiandongx/pyecharts/blob/master/document/en-us/doc_django.md) + + +# More Examples + +* More examples refer to [example.md](https://github.com/chenjiandongx/pyecharts/blob/master/example.md) +* Welcome to provide more examples. + +# About The Project + +* Enjoy pyecharts! +* If you have any question or want to improve this repository, welcome to create an issue or pull requests . +* If you want to discuss with me alone, use the emali -> chenjiandongx@qq.com +* Show solicitude for [changelog.md](https://github.com/chenjiandongx/pyecharts/blob/master/changelog.md) diff --git a/docs/flask-examples/server.py b/docs/flask-examples/server.py new file mode 100644 index 000000000..6bee18790 --- /dev/null +++ b/docs/flask-examples/server.py @@ -0,0 +1,32 @@ +import random +from pyecharts import Scatter3D +from pyecharts.constants import DEFAULT_HOST +from flask import Flask, render_template + + +app = Flask(__name__) + + +@app.route("/") +def hello(): + s3d = scatter3d() + return render_template('pyecharts.html', + myechart=s3d.render_embed(), + host=DEFAULT_HOST, + script_list=s3d.get_js_dependencies()) + + +def scatter3d(): + data = [generate_3d_random_point() for _ in range(80)] + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + scatter3D = Scatter3D("3D scattering plot demo", width=1200, height=600) + scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) + return scatter3D + + +def generate_3d_random_point(): + return [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] diff --git a/docs/flask-examples/templates/pyecharts.html b/docs/flask-examples/templates/pyecharts.html new file mode 100644 index 000000000..0aa589381 --- /dev/null +++ b/docs/flask-examples/templates/pyecharts.html @@ -0,0 +1,16 @@ + + + + + + Proudly presented by ECharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + diff --git a/docs/notebook-user-cases.zip b/docs/notebook-user-cases.zip new file mode 100644 index 000000000..398895ecb Binary files /dev/null and b/docs/notebook-user-cases.zip differ diff --git a/docs/zh-cn/doc_django.md b/docs/zh-cn/doc_django.md new file mode 100644 index 000000000..98f7b9e44 --- /dev/null +++ b/docs/zh-cn/doc_django.md @@ -0,0 +1,201 @@ +# pyecharts + Django 使用指南 +> 本指南按照 Django [官方教程](https://docs.djangoproject.com/en/1.11/intro/tutorial01/),通过完成一个 Django 小项目来说明如何在 Django 中使用 pyecharts。如果对 Django 还不太熟悉的开发者,可仔细阅读官方提供的最新文档。 + + +## Step 0: 使用新的 virtualenv 环境 +建议开发者使用 1.11.4 版本的 Django + +```shell +$ virtualenv --no-site-packages pyecharts-env +$ source pyecharts-env/bin/activate +$ pip install django==1.11.4 +$ pip install pyecharts +``` + + +## Step 1: 新建一个 django 项目 + +```shell +$ django-admin startproject myechartsite +``` + +创建一个应用程序 + +```shell +$ python manage.py startapp myfirstvis +$ ls +db.sqlite3 manage.py myechartsite myfirstvis +``` + +在 `myechartsite/settings.py` 中注册应用程序 + +```python +# myechartsite/settings.py +... +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'myfirstvis' # <--- +] +... +``` + + +我们先编辑 urls.py.这文件在 Django 里的功能是把前段的 HTTP 需求和后台服务函数挂钩。在 Step3,我们再引入后端服务函数 + +```python +# myfirstvis/urls.py +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^$', views.index, name='index'), +] +``` + +在 `myechartsite/urls.py` 中新增 'myfirstvis.urls' + +```python +myechartsite/urls.py +from django.conf.urls import include, url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), + url(r'myfirstvis/', include('myfirstvis.urls')) # <--- +] +``` + + +## Step 2: 处理视图功能部分 + +将下列代码保存到 `myfirstvis/views.py` 中。 + +```python +from __future__ import unicode_literals +import math + +from django.http import HttpResponse +from django.template import loader +from pyecharts import Line3D + +from pyecharts.constants import DEFAULT_HOST + + +def index(request): + template = loader.get_template('myfirstvis/pyecharts.html') + l3d = line3d() + context = dict( + myechart=l3d.render_embed(), + host=DEFAULT_HOST, + script_list=l3d.get_js_dependencies() + ) + return HttpResponse(template.render(context, request)) + + +def line3d(): + _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]) + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + line3d = Line3D("3D line plot demo", width=1200, height=600) + line3d.add("", _data, is_visualmap=True, + visual_range_color=range_color, visual_range=[0, 30], + is_grid3D_rotate=True, grid3D_rotate_speed=180) + return line3d +``` + +`script_list` 是 Page() 类渲染网页所需要依赖的 echarts js 库,依赖的库的数量取决于所要渲染的图形种类。 + +`host` 是 echarts js 库的地址,默认的地址为 http://chfw.github.io/jupyter-echarts/echarts 当然,如果你愿意你也可以改变这个地址,先克隆 https://github.com/chfw/jupyter-echarts 然后将 `echarts` 文件夹挂载在你自己的服务器上即可。 + + +## Step 3: 为项目提供自己的模板 + +前面的步骤是按照 [tutorial part 1](https://docs.djangoproject.com/en/1.11/intro/tutorial01/),接下来我们跳到 [tutorial part 3](https://docs.djangoproject.com/en/1.11/intro/tutorial03/) + + +Linux/macos 系统 +```shell +$ mkdir templates/myfirstvis -p +``` + +Windows 系统 +在 myfirstvis 目录下,新建 templates/myfirstvis 子目录 + +myfirstvis 目录 +``` +─ myfirstvis + ├── admin.py + ├── apps.py + ├── __init__.py + ├── migrations + │   ├── __init__.py + ├── models.py + ├── templates + │   └── myfirstvis + │   └── pyecharts.html + ├── tests.py + ├── urls.py + └── views.py +``` +将下面 html 模板代码保存为 pyecharts.html,请确保 pyecharts.html 文件的绝对路径为 `/myfirstvis/templates/myfirstvis` + + +```html + + + + + + + Proudly presented by PycCharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + +``` + + +## Step 4: 运行项目 + +```shell +$ cd myechartsite +$ python manage.py runserver + +You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. +Run 'python manage.py migrate' to apply them. + +August 08, 2017 - 05:48:38 +Django version 1.11.4, using settings 'myechartsite.settings' +Starting development server at http://127.0.0.1:8000/ +Quit the server with CONTROL-C. +``` + +访问 [http://localhost:8000/myfirstvis/](http://localhost:8000/myfirstvis/),你就可以看到酷炫的 3D 图了 + +![django-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/django-0.gif) + + +## 小结 + +看到了吧,只需要简单的几步就可以使用 pyecharts 创建可视化的图表。Django 官方教程需要七步的这里我们三步就搞定了。 + +具体文档可以参考 pyecharts/document 文件夹。 diff --git a/docs/zh-cn/doc_flask.md b/docs/zh-cn/doc_flask.md new file mode 100644 index 000000000..378371e80 --- /dev/null +++ b/docs/zh-cn/doc_flask.md @@ -0,0 +1,113 @@ +# pyecharts + Flask 使用指南 +> 本指南会以一个小的 Flask 项目为例,说明如何在 Flask 中使用 pyecharts。请确保你已经安装 Flask,还没安装请执行 ```pip install flask``` 或其他方式安装。 + +## Step 0: 首先新建一个 Flask 项目 + +* Linux/macos 系统 +```shell +$ mkdir flask-echarts +$ cd flask-echarts +$ mkdir templates +``` + +* Windows 系统 +新建一个 flask-echarts 文件夹,在其下新建 templates 子文件夹。 + +## Step 1: 为项目提供自己的模板 + +将下面 html 模板代码保存为 pyecharts.html 文件并移至上一步新建的 templates 文件夹中。 + +```html + + + + + + Proudly presented by ECharts + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {{myechart|safe}} + + + +``` + +## Step 2: 调用 chart_instance.render_embed() 方法渲染图表 + +请将下面的代码保存为 server.py 文件并移至项目的根目录下。 + +```python +import random +from pyecharts import Scatter3D +from pyecharts.constants import DEFAULT_HOST +from flask import Flask, render_template + + +app = Flask(__name__) + + +@app.route("/") +def hello(): + s3d = scatter3d() + return render_template('pyecharts.html', + myechart=s3d.render_embed(), + host=DEFAULT_HOST, + script_list=s3d.get_js_dependencies()) + + +def scatter3d(): + data = [generate_3d_random_point() for _ in range(80)] + range_color = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] + scatter3D = Scatter3D("3D scattering plot demo", width=1200, height=600) + scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) + return scatter3D + + +def generate_3d_random_point(): + return [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] +``` +`script_list` 是 Page() 类渲染网页所需要依赖的 echarts js 库,依赖的库的数量取决于所要渲染的图形种类。 + +`host` 是 echarts js 库的地址,默认的地址为 http://chfw.github.io/jupyter-echarts/echarts 当然,如果你愿意你也可以改变这个地址,先克隆 https://github.com/chfw/jupyter-echarts 然后将 `echarts` 文件夹挂载在你自己的服务器上即可。 + +此时 flask-echarts 目录下为 +``` +├── server.py +└── templates + └── pyecharts.html +``` + + +## Step 3: 运行项目 + +Linux/macos 系统 +```shell +$ export FLASK_APP=server.py +$ flask run +* Serving Flask app "server" +* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) +``` + +Windows 系统 +```shell +$ set FLASK_APP=server.py +$ flask run +* Serving Flask app "server" +* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) +``` + +效果 + +![flask-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/flask-0.gif) + +## 小结 + +可以看到,在 Flask app 中加入 pyecharts 图表只需要简单的几个步骤而已,欢迎尝试更多的图表类型。具体文档可以参考 ```pyecharts/document``` 文件夹。 diff --git a/docs/zh-cn/doc_for_pyecharts_developer.md b/docs/zh-cn/doc_for_pyecharts_developer.md new file mode 100644 index 000000000..c2a5e72b5 --- /dev/null +++ b/docs/zh-cn/doc_for_pyecharts_developer.md @@ -0,0 +1,75 @@ +# pyecharts 开发者指南 + +## 如何在 pyecharts 中安装更多的 Javascript 库 +现在 pyecharts 所有的 js 库均已托管在 [submodule](https://git-scm.com/docs/git-submodule) [jupyter-echarts](https://github.com/chfw/jupyter-echarts). 也就是说现在所有 js 库的更新都要经过 jupyter-echarts。 + +jupyter-echarts 是一个前端项目,如果你对前端这方面还不太熟悉的话,建议找相关的教程学习一下。 + +## step 1:向 jupyter-echarts 中新增你的内容 + +克隆远程仓库 + +``` +git clone https://github.com/chfw/jupyter-echarts.git +``` + +然后执行 + +``` +npm install --save your_javascript_library +``` + +编辑 gulp.js 文件 + +``` +... +FILES = [ + './node_modules/echarts/dist/echarts.min.js', + './node_modules/echarts/map/js/china.js', + './node_modules/your_library/dist/min_version.js' <--- +``` + +最后运行 + +``` +$ gulp +``` + +最重要的是提交更新内容,你需要将它同步至 jupyter-echarts,如果没有权限的话,那就提交一个 PR 吧。 + + +## step 2:更新 pyecharts + +一旦你的提交被 jupyter-echarts 所接受,你就可以更新 pyecharts 了。 +``` +$ git clone --recursive https://github.com/chenjiandongx/pyecharts.git +$ cd pyecharts/pyecharts/templates/js +$ git pull +remote: Counting objects: 7, done. +remote: Compressing objects: 100% (2/2), done. +remote: Total 7 (delta 4), reused 7 (delta 4), pack-reused 0 +Unpacking objects: 100% (7/7), done. +From https://github.com/chfw/jupyter-echarts + af7184b..bb87949 master -> origin/master +Updating af7184b..bb87949 +Fast-forward + echarts/main.js | 2 +- + gulpfile.js | 2 +- + src/main.ts | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) +$ cd ../../../ +$ git commit -am "pull latest changes from jupyter-echarts +``` + +最后将你的更新推送至 pyecharts + + +## 前端编程与 Python + +在前端编程领域,没有人会去手动下载和更新 js/css 文件。[npm](https://docs.npmjs.com/getting-started/what-is-npm) 是一个 node.js 的包管理助手,用于帮助前端编程人员去自动化管理 js/css 模块。 + +当然,还有其他优秀的类似的工具 如 [bower](https://bower.io), [jspm](https://jspm.io) 等等。[gulp](https://gulpjs.com) 是 node.js 中的 `make` 命令,gulpfile.js 是 gulp 的 `Makefile`,你将会使用 js 来编写这些命令。这些优秀的工具可以帮助你自动化管理 js/css 模块,就像 Python 世界的 `pip` 工具。 + +那现在的前端编程主要在码些什么呢?答案就是 [pug file](https://pugjs.org/api/getting-started.html)/[HAML file](http://haml.info), [sass file](http://sass-lang.com) 和 [coffeescript](http://coffeescript.org)/[typescript](http://www.typescriptlang.org) ,编写这些文件经编译后就会成为 html/css/js 文件了,现在编写网页变成是一个软件工程师干的活了。而面向对象编程,代码复用以及设计 css 属性接口这些事才是前端编程人员的日常工作。 + +以上是对前端编程的一个简介,node.js 世界有很多很棒的项目,工具以及开发者。期待你去挖掘和发现更多精彩的东西! \ No newline at end of file diff --git a/docs/zh-cn/documentation.md b/docs/zh-cn/documentation.md new file mode 100644 index 000000000..4150fd506 --- /dev/null +++ b/docs/zh-cn/documentation.md @@ -0,0 +1,3288 @@ +# pyecharts 文档 + +pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。 + +[![Build Status](https://travis-ci.org/chenjiandongx/pyecharts.svg?branch=master)](https://travis-ci.org/chenjiandongx/pyecharts) [![codecov](https://codecov.io/gh/chenjiandongx/pyecharts/branch/master/graph/badge.svg)](https://codecov.io/gh/chenjiandongx/pyecharts) [![PyPI version](https://badge.fury.io/py/pyecharts.svg)](https://badge.fury.io/py/pyecharts) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + + +* [开始使用](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#开始使用) +* [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) + * xyAxis:直角坐标系中的 x、y 轴(Line、Bar、Scatter、EffectScatter、Kline) + * dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot) + * legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。 + * label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。 + * lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel) + * grid3D:3D笛卡尔坐标系组配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D) + * axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D) + * visualMap:是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道) + * markLine&markPoint:图形标记组件,用于标记指定的特殊数据,又标记线和标记点两种。(Bar、Line、Kline) + * tooltip:提示框组件,用于移动或点击鼠标时弹出数据内容 + +* [图表详细](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#图表详细) + * Bar(柱状图/条形图) + * Bar3D(3D 柱状图) + * Boxplot(箱形图) + * EffectScatter(带有涟漪特效动画的散点图) + * Funnel(漏斗图) + * Gauge(仪表盘) + * Geo(地理坐标系) + * Graph(关系图) + * HeatMap(热力图) + * Kline(K线图) + * Line(折线/面积图) + * Line3D(3D 折线图) + * Liquid(水球图) + * Map(地图) + * Parallel(平行坐标系) + * Pie(饼图) + * Polar(极坐标系) + * Radar(雷达图) + * Sankey(桑基图) + * Scatter(散点图) + * Scatter3D(3D 散点图) + * ThemeRiver(主题河流图) + * TreeMap(树图) + * WordCloud(词云图) +* [用户自定义](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#用户自定义) + * Grid 类:并行显示多张图 + * Overlap 类:结合不同类型图表叠加画在同张图上 + * Page 类:同一网页按顺序展示多图 + * Timeline 类:提供时间线轮播多张图 +* [使用技巧](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#使用技巧) +* [集成Flask&Django](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#集成Flask&Django) +* [更多示例](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#更多示例) +* [关于项目](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#关于项目) + + +# 开始使用 +### 确认你已安装了最新版本的 pyecharts +> `print(pyecharts.__version__)` 可查看当前 pyecharts 版本,更多版本信息请查看 [changelog.md](https://github.com/chenjiandongx/pyecharts/blob/master/changelog.md) + +首先开始来绘制你的第一个图表 +```python +from pyecharts import Bar + +bar = Bar("我的第一个图表", "这里是副标题") +bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90]) +bar.show_config() +bar.render() +``` +![guide-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/guide-0.png) + +**Note:** 可以按右边的下载按钮将图片下载到本地,如果想要提供更多实用工具按钮,请在 `add()` 中设置 `is_more_utils` 为 True + +* ```add()``` + 主要方法,用于添加图表的数据和设置各种配置项 +* ```show_config()``` + 打印输出图表的所有配置项 +* ```render()``` + 默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:\my_first_chart.html"),文件用浏览器打开。 + +### 使用 pyecharts-snapshot 插件 +如果想直接将图片保存为 png 或者 pdf 格式的文件,可以使用 [pyecharts-snapshot](https://github.com/chfw/pyecharts-snapshot)。使用该插件请确保你的系统上已经安装了 node.js 环境,如果没有,请到这里下载 [https://nodejs.org/en/download/](https://nodejs.org/en/download/) + +1. 安装 phantomjs + `npm install -g phantomjs-prebuilt` +2. 安装 pyecharts-snapshot + `pip install pyecharts-snapshot` +3. 引入 pyecharts-snapshot + `from pyecharts_snapshot.main import make_a_snapshot` +4. 调用方法 + `make_a_snapshot('render.html', 'snapshot.png')` + make_a_snapshot() 第一个参数为生成的 .html 文件,第二个参数为要保存的文件,可以为 png/pdf + +更多内容请移步至 [pyecharts-snapshot](https://github.com/chfw/pyecharts-snapshot) + + +### Jupyter notebook 小贴士 +对本库的现有用户来说,0.1.9.5 版本的离线模式要求: +1)老版本已完全卸载 +2)您现有的 notebook 文档需要刷新并重新运行。 + +离线模式工作原理:pyecharts 自动把 echarts 脚本文件装在了 jupyter nbextensions 文件夹下面。以下代码可以告诉你 pyecharts 网页脚本是否装到了 Jupyter 里面: + + +```shell +$ jupyter nbextension list +Known nbextensions: + config dir: /Users/jaska/.jupyter/nbconfig + notebook section + echarts/main enabled + - Validating: OK +``` + +在特殊的情况下,如果你想要 pyecharts 更新所有的脚本文件的话,你可以运行下面的命令: + +```shell +$ git clone https://github.com/chfw/jupyter-echarts.git +$ cd jupyter-echarts +$ jupyter nbextension install echarts --user +``` +在下一个画图动作的时候,您的脚本文件会被更新。 + +下面这个删除命令估计只有参与 pyecharts 开发者才会用到 + +```shell +$ jupyter nbextension uninstall echarts --user +``` + +#### jupyter-notebook 输出问题 + +自 0.1.9.7 起,pyecharts 已经进入全部离线模式,也就是没有网络,也能画图。jupyter notebook 输出后,你的 notebook 离开了本地 jupyter 环境,图片就不能显示了。 +为了解决这个问题,再画图之前,你可以多加两个语句: + +```python +... +from pyecharts import online + +online() +... +``` + +这样,所有的脚本会从 http://chfw.github.io/jupyter-echarts/echarts 下载。如果你联不上 Github, 你可以先把 https://github.com/chfw/jupyter-echarts 克隆一下。然后在你自己的服务器上,把整个 echarts 挂上去。 + +下面我简单示范一下 + +``` +$ cd jupyter-echarts/echarts +$ python -m http.server # for python 2, use python -m SimpleHTTPServer +Serving HTTP on 0.0.0.0 port 8000 ... +``` + +然后,再把本地服务器加进前面的语句: + +```python +... +from pyecharts import online + +online(host="http://localhost:8000) +... +``` + + +### Python2 编码问题 +默认的编码类型为 UTF-8,在 Python3 中是没什么问题的,Python3 对中文的支持好很多。但是在 Python2 中,请应用下面的语句,保证没有编码问题: +``` +#!/usr/bin/python +#coding=utf-8 +from __future__ import unicode_literals +``` +前两句告知你的编辑器你用 UTF-8 ([PEP-0263](https://www.python.org/dev/peps/pep-0263/)). 最后一句告知 Python 所有字符是 UTF-8 ([unicode literals](http://python-future.org/unicode_literals.html)) + +基本上所有的图表类型都是这样绘制的: +1. ```chart_name = Type()``` 初始化具体类型图表。 +2. ```add()``` 添加数据及配置项。 +3. ```render()``` 生成 .html 文件。 + +```add()``` 数据一般为两个列表(长度一致)。 +如果你的数据是字典或者是带元组的字典。可利用 ```cast()``` 方法转换。 + +```python +@staticmethod +cast(seq) +``` 转换数据序列,将带字典和元组类型的序列转换为 k_lst,v_lst 两个列表 ``` +``` +1. 元组列表 + [(A1, B1), (A2, B2), (A3, B3), (A4, B4)] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] +2. 字典列表 + [{A1: B1}, {A2: B2}, {A3: B3}, {A4: B4}] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] +3. 字典 + {A1: B1, A2: B2, A3: B3, A4: B4} -- > k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ] + +### Pandas&Numpy 简单示例 +如果使用的是 Numpy 或者 Pandas,可以参考这个示例 + +![pandas-numpy](https://github.com/chenjiandongx/pyecharts/blob/master/images/pandas-numpy.png) + +**Note:** 使用 Pandas&Numpy 时,整数类型请确保为 int,而不是 numpy.int32 + +**当然你也可以采用更加酷炫的方式,使用 Jupyter Notebook 来展示图表,matplotlib 有的,pyecharts 也会有的** +**Note:** 从 0.1.9.2 版本开始,废弃 ```render_notebook()``` 方法,现已采用更加 pythonic 的做法。直接调用本身实例就可以了。 + +比如这样 + +![notebook-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/notebook-0.gif) + +还有这样 + +![notebook-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/notebook-1.gif) + +如果使用的是自定义类,直接调用自定义类示例即可 + +![notebook-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/notebook-2.gif) + +更多 Jupyter notebook 的例子请参考 [notebook-use-cases](https://github.com/chenjiandongx/pyecharts/blob/master/docs/notebook-use-cases.zip)。可下载后运行看看。 + +如需使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,同时兼容 Python2 和 Python3 的 Jupyter Notebook 环境。所有图表均可正常显示,与浏览器一致的交互体验,这下展示报告连 PPT 都省了!! + +图表类初始化所接受的参数(所有类型的图表都一样)。 + +* title -> str + 主标题文本,支持 \n 换行,默认为 "" +* subtitle -> str + 副标题文本,支持 \n 换行,默认为 "" +* width -> int + 画布宽度,默认为 800(px) +* height -> int + 画布高度,默认为 400(px) +* title_pos -> str/int + 标题距离左侧距离,默认为'left',有'auto', 'left', 'right', 'center'可选,也可为百分比或整数 +* title_top -> str/int + 标题距离顶部距离,默认为'top',有'top', 'middle', 'bottom'可选,也可为百分比或整数 +* title_color -> str + 主标题文本颜色,默认为 '#000' +* subtitle_color -> str + 副标题文本颜色,默认为 '#aaa' +* title_text_size -> int + 主标题文本字体大小,默认为 18 +* subtitle_text_size -> int + 副标题文本字体大小,默认为 12 +* background_color -> str + 画布背景颜色,默认为 '#fff' +* page_title -> str + 指定生成的 html 文件中 `` 标签的值。默认为'Echarts' +* jshost-> str + 自定义每个实例的 JavaScript host + + +# 通用配置项 +**通用配置项均在 ```add()``` 中设置** + +**xyAxis:直角坐标系中的 x、y 轴(Line、Bar、Scatter、EffectScatter、Kline)** + +* is_convert -> bool + 是否交换 x 轴与 y 轴 +* is_xaxislabel_align -> bool + x 轴刻度线和标签是否对齐,默认为 False +* is_yaxislabel_align -> bool + y 轴刻度线和标签是否对齐,默认为 False +* is_xaxis_inverse -> bool + 是否反向 x 坐标轴,默认为 False +* is_yaxis_inverse -> bool + 是否反向 y 坐标轴,默认为 False +* is_xaxis_boundarygap -> bool + x 轴两边留白策略,适用于类目轴。类目轴中 boundaryGap 可以配置为 True 和 False。默认为 True,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间,即两边留白。 +* is_yaxis_boundarygap -> bool + y 轴两边留白策略,适用于类目轴。类目轴中 boundaryGap 可以配置为 True 和 False。默认为 True,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间,即两边留白。 +* is_xaxis_show -> bool + 是否显示 x 轴 +* is_yaxis_show -> bool + 是否显示 y 轴 +* x_axis -> list + x 轴数据项 +* xaxis_interval -> int + x 轴刻度标签的显示间隔,在类目轴中有效。默认会采用标签不重叠的策略间隔显示标签。 + 设置成 0 强制显示所有标签。设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推 +* xaxis_force_interval -> int/str + 强制设置 x 坐标轴分割间隔。如设置为 50 则刻度为 [0, 50, 150, ...],设置为 "auto" 则只显示两个刻度。一般情况下不建议设置这个参数!! + 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,这时候可以使用 interval 配合 min、max 强制设定刻度划分。在类目轴中无效。 +* xaxis_margin -> int + x 轴刻度标签与轴线之间的距离。默认为 8 +* xaxis_name -> str + x 轴名称 +* xaxis_name_size -> int + x 轴名称体大小,默认为 14 +* xaxis_name_gap -> int + x 轴名称与轴线之间的距离,默认为 25 +* xaxis_name_pos -> str + x 轴名称位置,有'start','middle','end'可选 +* xaxis_min -> int/float + x 坐标轴刻度最小值,默认为自适应。使用特殊值 "dataMin" 可自定以数据中最小值为 x 轴最小值。 +* xaxis_max -> int/float + x 坐标轴刻度最大值,默认为自适应。使用特殊值 "dataMax" 可自定以数据中最小值为 x 轴最大值。 +* xaxis_pos -> str + x 坐标轴位置,有'top','bottom'可选 +* xaxis_type -> str + x 坐标轴类型 + * 'value':数值轴,适用于连续数据。 + * 'category':类目轴,适用于离散的类目数据。 + * 'log':对数轴。适用于对数数据。 +* xaxis_rotate -> int + x 轴刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠。默认为 0,即不旋转。旋转的角度从 -90 度到 90 度。 +* y_axis -> list + y 坐标轴数据 +* yaxis_interval -> int + y 轴刻度标签的显示间隔,在类目轴中有效。默认会采用标签不重叠的策略间隔显示标签。 + 设置成 0 强制显示所有标签。设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推 +* yaxis_force_interval -> int/str + 强制设置 y 坐标轴分割间隔。如设置为 50 则刻度为 [0, 50, 150, ...],设置为 "auto" 则只显示两个刻度。一般情况下不建议设置这个参数!! + 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,这时候可以使用 interval 配合 min、max 强制设定刻度划分。在类目轴中无效。 +* yaxis_margin -> int + y 轴刻度标签与轴线之间的距离。默认为 8 +* yaxis_formatter -> str + y 轴标签格式器,如 '天',则 y 轴的标签为数据加'天'(3 天,4 天),默认为 "" +* yaxis_name -> str + y 轴名称 +* yaxis_name_size -> int + y 轴名称体大小,默认为 14 +* yaxis_name_gap -> int + y 轴名称与轴线之间的距离,默认为 25 +* yaxis_name_pos -> str + y 轴名称位置,有'start', 'middle','end'可选 +* yaxis_min -> int/float + y 坐标轴刻度最小值,默认为自适应。使用特殊值 "dataMin" 可自定以数据中最小值为 y 轴最小值。 +* yaxis_max -> int/float + y 坐标轴刻度最大值,默认为自适应。使用特殊值 "dataMax" 可自定以数据中最小值为 y 轴最大值。 +* yaxis_pos -> str + y 坐标轴位置,有'left','right'可选 +* yaxis_type -> str + y 坐标轴类型 + * 'value':数值轴,适用于连续数据。 + * 'category':类目轴,适用于离散的类目数据。 + * 'log':对数轴。适用于对数数据。 +* yaxis_rotate -> int + y 轴刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠。默认为 0,即不旋转。旋转的角度从 -90 度到 90 度。 + + +**dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline)** + +* is_datazoom_show -> bool + 是否使用区域缩放组件,默认为 False +* datazoom_type -> str + 区域缩放组件类型,默认为'slider',有'slider', 'inside', 'both'可选 +* datazoom_range -> list + 区域缩放的范围,默认为[50, 100] +* datazoom_orient -> str + datazoom 组件在直角坐标系中的方向,默认为 'horizontal',效果显示在 x 轴。如若设置为 'vertical' 的话效果显示在 y 轴。 +* datazoom_xaxis_index -> int/list + datazoom 组件控制的 x 轴索引 + 默认控制第一个 x 轴,如没特殊需求无须显示指定。单个为 int 类型而控制多个为 list 类型,如 [0, 1] 表示控制第一个和第二个 x 轴。 +* datazoom_yaxis_index -> int/list + datazoom 组件控制的 y 轴索引 + 默认控制第一个 y 轴,如没特殊需求无须显示指定。单个为 int 类型而控制多个为 list 类型,如 [0, 1] 表示控制第一个和第二个 x 轴。 + + +**legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。** + +* is_legend_show -> bool + 是否显示顶端图例,默认为 True +* legend_orient -> str + 图例列表的布局朝向,默认为'horizontal',有'horizontal', 'vertical'可选 +* legend_pos -> str + 图例组件离容器左侧的距离,默认为'center',有'left', 'center', 'right'可选 +* legend_top -> str + 图例组件离容器上侧的距离,默认为'top',有'top', 'center', 'bottom'可选 +* legend_selectedmode -> str/bool + 图例选择的模式,控制是否可以通过点击图例改变系列的显示状态。默认为'multiple',可以设成 'single' 或者 'multiple' 使用单选或者多选模式。也可以设置为 False 关闭显示状态。 +* legend_text_size -> int + 图例名称字体大小 +* legend_text_color -> str + 图例名称字体颜色 + + +**label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。** + +* is_label_show -> bool + 是否正常显示标签,默认不显示。标签即各点的数据项信息 +* is_label_emphasis -> bool + 是否高亮显示标签,默认显示。高亮标签即选中数据时显示的信息项。 +* label_pos -> str + 标签的位置,Bar 图默认为'top'。有'top', 'left', 'right', 'bottom', 'inside','outside'可选 +* label_emphasis_pos -> str + 高亮标签的位置,Bar 图默认为'top'。有'top', 'left', 'right', 'bottom', 'inside','outside'可选 +* label_text_color -> str + 标签字体颜色,默认为 "#000" +* label_emphasis_textcolor -> str + 高亮标签字体颜色,默认为 "#fff" +* label_text_size -> int + 标签字体大小,默认为 12 +* label_emphasis_textsize -> int + 高亮标签字体大小,默认为 12 +* is_random -> bool + 是否随机排列颜色列表,默认为 False +* label_color -> list + 自定义标签颜色。全局颜色列表,所有图表的图例颜色均在这里修改。如 Bar 的柱状颜色,Line 的线条颜色等等。 +* label_formatter -> str + 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。使用示例,如 `label_formatter='{a}'` + 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量 {a}, {b}, {c}, {d} 在不同图表类型下代表数据含义为: + * 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无) + * 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无) + * 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无) + * 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比) + +**Note:** is_random 可随机打乱图例颜色列表,算是切换风格?建议试一试! + + +**lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)** + +* line_width -> int + 线的宽度,默认为 1 +* line_opacity -> float + 线的透明度,0 为完全透明,1 为完全不透明。默认为 1 +* line_curve -> float + 线的弯曲程度,0 为完全不弯曲,1 为最弯曲。默认为 0 +* line_type -> str + 线的类型,有'solid', 'dashed', 'dotted'可选。默认为'solid' +* line_color -> str + 线的颜色 + + +**grid3D:3D 笛卡尔坐标系组配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)** + +* grid3d_width -> int + 三维笛卡尔坐标系组件在三维场景中的高度。默认为 100 +* grid3d_height -> int + 三维笛卡尔坐标系组件在三维场景中的高度。默认为 100 +* grid3d_depth -> int + 三维笛卡尔坐标系组件在三维场景中的高度。默认为 100 +* is_grid3d_rotate -> bool + 是否开启视角绕物体的自动旋转查看。默认为 False +* grid3d_rotate_speed -> int + 物体自传的速度。单位为角度 / 秒,默认为 10 ,也就是 36 秒转一圈。 +* grid3d_rotate_sensitivity -> int + 旋转操作的灵敏度,值越大越灵敏。默认为 1, 设置为 0 后无法旋转。 + + +**axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项** + +**X 轴** +* xaxis3d_name -> str + x 轴名称,默认为 "" +* xaxis3d_name_size -> int + x 轴名称体大小,默认为 16 +* xaxis3d_name_gap -> int + x 轴名称与轴线之间的距离,默认为 25 +* xaxis3d_min -> int/float + x 坐标轴刻度最小值,默认为自适应。 +* xaxis3d_max -> int/float + x 坐标轴刻度最大值,默认为自适应。 +* xaxis3d_interval -> int + x 轴刻度标签的显示间隔,在类目轴中有效。默认会采用标签不重叠的策略间隔显示标签。 + 设置成 0 强制显示所有标签。设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推 +* xaxis3d_margin -> int + x 轴刻度标签与轴线之间的距离。默认为 8 + +**Y 轴** +* yaxis3d_name -> str + y 轴名称,默认为 "" +* yaxis3d_name_size -> int + y 轴名称体大小,默认为 16 +* yaxis3d_name_gap -> int + y 轴名称与轴线之间的距离,默认为 25 +* yaxis3d_min -> int/float + y 坐标轴刻度最小值,默认为自适应。 +* yaxis3d_max -> int/float + y 坐标轴刻度最大值,默认为自适应。 +* yaxis3d_interval -> int + y 轴刻度标签的显示间隔,在类目轴中有效。默认会采用标签不重叠的策略间隔显示标签。 + 设置成 0 强制显示所有标签。设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推 +* yaxis3d_margin -> int + y 轴刻度标签与轴线之间的距离。默认为 8 + +**Z 轴** +* zaxis3d_name -> str + z 轴名称,默认为 "" +* zaxis3d_name_size -> int + z 轴名称体大小,默认为 16 +* zaxis3d_name_gap -> int + z 轴名称与轴线之间的距离,默认为 25 +* zaxis3d_min -> int/float + z 坐标轴刻度最小值,默认为自适应。 +* zaxis3d_max -> int/float + z 坐标轴刻度最大值,默认为自适应。 +* zaxis3d_margin -> int + z 轴刻度标签与轴线之间的距离。默认为 8 + + +**visualMap:是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道)** + +* is_visualmap -> bool + 是否使用视觉映射组件 +* visual_type -> str + 制定组件映射方式,默认为'color‘,即通过颜色来映射数值。有'color', 'size'可选。'szie'通过数值点的大小,也就是图形点的大小来映射数值。 +* visual_range -> list + 指定组件的允许的最小值与最大值。默认为 [0, 100] +* visual_text_color -> list + 两端文本颜色。 +* visual_range_text -> list + 两端文本。默认为 ['low', 'hight'] +* visual_range_color -> list + 过渡颜色。默认为 ['#50a3ba', '#eac763', '#d94e5d'] +* visual_range_size -> list + 数值映射的范围,也就是图形点大小的范围。默认为 [20, 50] +* visual_orient -> str + visualMap 组件条的方向,默认为'vertical',有'vertical', 'horizontal'可选。 +* visual_pos -> str/int + visualmap 组件条距离左侧的位置,默认为'left'。有'right', 'center', 'right'可选,也可为百分数或整数。 +* visual_top -> str/int + visualmap 组件条距离顶部的位置,默认为'top'。有'top', 'center', 'bottom'可选,也可为百分数或整数。 +* visual_split_number -> int + 分段型中分割的段数,在设置为分段型时生效。默认分为 5 段。 +* visual_dimension -> int + 指定用数据的『哪个维度』,映射到视觉元素上。默认映射到最后一个维度。索引从 0 开始。 + 在直角坐标系中,x 轴为第一个维度(0),y 轴为第二个维度(1)。 +* is_calculable -> bool + 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。默认为 True +* is_piecewise -> bool + 是否将组件转换为分段型(默认为连续型),默认为 False + + +**tooltip:提示框组件,用于移动或点击鼠标时弹出数据内容** + +* tooltip_tragger -> str + 触发类型。默认为 'item' + * 'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。 + * 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。 + * 'none': 什么都不触发。 +* tooltip_tragger_on -> str + 提示框触发的条件。默认为 "mousemove|click" + * 'mousemove': 鼠标移动时触发。 + * 'click': 鼠标点击时触发。 + * 'mousemove|click': 同时鼠标移动和点击时触发。 + * 'none': 不在 'mousemove' 或 'click' 时触发 +* tooltip_axispointer_type -> str + 指示器类型。默认为 "line" + * 'line': 直线指示器 + * 'shadow': 阴影指示器 + * 'cross': 十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。 +* tooltip_formatter -> str + 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。 + 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量 {a}, {b}, {c}, {d} 在不同图表类型下代表数据含义为: + * 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无) + * 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无) + * 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无) + * 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比) +* tooltip_text_color -> str + 提示框字体颜色,默认为 '#fff' +* tooltip_font_size -> int + 提示框字体大小,默认为 14 + + +**markLine&markPoint:图形标记组件,用于标记指定的特殊数据,又标记线和标记点两种(Bar、Line、Kline)** + +* mark_point -> list + 标记点,默认有'min', 'max', 'average'可选。支持自定义标记点,具体使用如下 + [{"coord": [a1, b1], "name": "first markpoint"}, {"coord": [a2, b2], "name": "second markpoint"}] + 需自己传入标记点字典,共有两个键值对,'coord' 对应为 x y 轴坐标, 'name' 为标记点名称 +* mark_point_symbol -> str + 标记点图形,,默认为'pin',有'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'可选 +* mark_point_symbolsize -> int + 标记点图形大小,默认为 50 +* mark_point_textcolor -> str + 标记点字体颜色,默认为'#fff' +* mark_line -> list + 标记线,默认有'min', 'max', 'average'可选 +* mark_line_symbolsize -> int + 标记线图形大小,默认为 15 +* mark_line_valuedim -> str + 指定在哪个维度上指定最大值最小值。这可以是维度的直接名称,Line 时可以是 x、angle 等、Kline 图时可以是 open、close、highest、lowest。 + + +**toolbox:设置 `is_more_utils` 为 True 可以提供更多的实用工具按钮。默认只提供『数据视图』和『下载』按钮** + + +# 图表详细 + +## Bar(柱状图/条形图) +> 柱状/条形图,通过柱形的高度/条形的宽度来表现数据的大小。 + +Bar.add() 方法签名 +```python +add(name, x_axis, y_axis, is_stack=False, bar_category_gap='20%', **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> list + y 坐标轴数据 +* is_stack -> bool + 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置 +* bar_category_gap -> int/str + 类目轴的柱状距离,当设置为 0 时柱状是紧挨着(直方图类型),默认为 '20%' + +```python +from pyecharts import Bar + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图数据堆叠示例") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True) +bar.render() +``` +![bar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-0.gif) +**Note:** 全局配置项要在最后一个 ```add()``` 上设置,否侧设置会被冲刷掉。 + +```python +from pyecharts import Bar + +bar = Bar("标记线和标记点示例") +bar.add("商家A", attr, v1, mark_point=["average"]) +bar.add("商家B", attr, v2, mark_line=["min", "max"]) +bar.render() +``` +![bar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-1.gif) + +```python +from pyecharts import Bar + +bar = Bar("x 轴和 y 轴交换") +bar.add("商家A", attr, v1) +bar.add("商家B", attr, v2, is_convert=True) +bar.render() +``` +![bar-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-2.png) + +dataZoom 效果,'slider' 类型 +```python +import random + +attr = ["{}天".format(i) for i in range(30)] +v1 = [random.randint(1, 30) for _ in range(30)] +bar = Bar("Bar - datazoom - slider 示例") +bar.add("", attr, v1, is_label_show=True, is_datazoom_show=True) +bar.render() +``` +![bar-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-4.gif) + +'inside' 类型 +```python +attr = ["{}天".format(i) for i in range(30)] +v1 = [random.randint(1, 30) for _ in range(30)] +bar = Bar("Bar - datazoom - inside 示例") +bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='inside', datazoom_range=[10, 25]) +bar.render() +``` +![bar-5](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-5.gif) + +'both' 类型 +```python +attr = ["{}天".format(i) for i in range(30)] +v1 = [random.randint(1, 30) for _ in range(30)] +bar = Bar("Bar - datazoom - inside 示例") +bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='both', datazoom_range=[10, 25]) +bar.render() +``` +![bar-8](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-8.gif) + + +**Note:** datazoom 适合所有平面直角坐标系图形,也就是(Line、Bar、Scatter、EffectScatter、Kline) + +当 x 轴或者 y 轴的标签因为过于密集而导致全部显示出来会重叠的话,可采用使标签旋转的方法。 +```python +attr = ["{}天".format(i) for i in range(20)] +v1 = [random.randint(1, 20) for _ in range(20)] +bar = Bar("坐标轴标签旋转示例") +bar.add("", attr, v1, xaxis_interval=0, xaxis_rotate=30, yaxis_rotate=30) +bar.render() +``` +![bar-6](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-6.png) + +**Note:** 可通过设置 xaxis_min/xaxis_max/yaxis_min/yaxis_max 来调整 x 轴和 y 轴上的最大最小值。针对数值轴有效! +**Note:** 可以通过 label_color 来设置柱状的颜色,如 ['#eee', '#000'],所有的图表类型的图例颜色都可通过 label_color 来修改。 + +瀑布图示例 +```python +from pyecharts import Bar + +attr = ["{}月".format(i) for i in range(1, 8)] +v1 = [0, 100, 200, 300, 400, 220, 250] +v2 = [1000, 800, 600, 500, 450, 400, 300] +bar = Bar("瀑布图示例") +# 利用第一个 add() 图例的颜色为透明,即 'rgba(0,0,0,0)',并且设置 is_stack 标志为 True +bar.add("", attr, v1, label_color=['rgba(0,0,0,0)'], is_stack=True) +bar.add("月份", attr, v2, is_label_show=True, is_stack=True, label_pos='inside') +bar.render() +``` +![bar-7](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar-7.png) + + +## Bar3D(3D 柱状图) + +Bar3D.add() 方法签名 +```python +add(name, x_axis, y_axis, data, grid3d_opacity=1, grid3d_shading='color', **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> str + x 坐标轴数据。需为类目轴,也就是不能是数值。 +* y_axis -> str + y 坐标轴数据。需为类目轴,也就是不能是数值。 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』 +* grid3d_opacity -> int + 3D 笛卡尔坐标系组的透明度(柱状的透明度),默认为 1,完全不透明。 +* grid3d_shading -> str + 三维柱状图中三维图形的着色效果。 + * color:只显示颜色,不受光照等其它因素的影响。 + * lambert:通过经典的 lambert 着色表现光照带来的明暗。 + * realistic:真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。 + +```python +from pyecharts import Bar3D + +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_axis = ["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] + ] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +bar3d.add("", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3d_width=200, grid3d_depth=80) +bar3d.render() +``` +![bar3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-0.gif) + +data 中,如 [1, 2, 3] 表示 x 轴的索引为 1,即 "1a";y 轴的索引为 2,即 "Thursday";z 轴的数值为 3 + +设置 ``` grid3d_shading``` 可以让柱状更真实 +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3d_width=200, + grid3d_depth=80, grid3d_shading='lambert') +bar3d.render() +``` +![bar3D-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-1.gif) + +设置 ```is_grid3d_rotate``` 启动自动旋转功能 +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3d_width=200, + grid3d_depth=80, is_grid3d_rotate=True) +bar3d.render() +``` +![bar3D-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-2.gif) + +设置 ``` grid3d_rotate_speed``` 调节旋转速度 +```python +bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) +bar3d.add("", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data], is_visualmap=True, + visual_range=[0, 20], visual_range_color=range_color, grid3d_width=200, + grid3d_depth=80, is_grid3d_rotate=True, grid3d_rotate_speed=180) +bar3d.render() +``` +![bar3D-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/bar3D-3.gif) + +**Note:** 关于 gird3D 部分的设置,请参照通用配置项中的介绍 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) + + +## Boxplot(箱形图) +> 箱形图是一种用作显示一组数据分散情况资料的统计图。它能显示出一组数据的最大值、最小值、中位数、下四分位数及上四分位数。 + +Boxplot.add() 方法签名 +```python +add(name, x_axis, y_axis, **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> [list], 包含列表的列表 + y 坐标轴数据,二维数组的每一数组项(上例中的每行)是渲染一个 box,它含有五个量值,依次是: + [min, Q1, median (or Q2), Q3, max] + +可自行计算出所需五个数值,也可通过内置 `prepare_data()` 转换,`prepare_data()` 会将传入的嵌套列表中的数据转换为嵌套的 [min, Q1, median (or Q2), Q3, max],如下所示: +```python +from pyecharts import Boxplot + +boxplot = Boxplot("箱形图") +x_axis = ['expr1', 'expr2', 'expr3', 'expr4', 'expr5'] +y_axis = [ + [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, + 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960], + [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, + 830, 790, 810, 880, 880, 830, 800, 790, 760, 800], + [880, 880, 880, 860, 720, 720, 620, 860, 970, 950, + 880, 910, 850, 870, 840, 840, 850, 840, 840, 840], + [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, + 910, 920, 890, 860, 880, 720, 840, 850, 850, 780], + [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, + 870, 870, 810, 740, 810, 940, 950, 800, 810, 870] +] +_yaxis = boxplot.prepare_data(y_axis) # 转换数据 +boxplot.add("boxplot", x_axis, _yaxis) +boxplot.render() +``` +![boxplot-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/boxplot-0.png) + +或者直接在 add() 中转换 +```python +from pyecharts import Boxplot + +boxplot = Boxplot("箱形图") +x_axis = ['expr1', 'expr2'] +y_axis1 = [ + [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, + 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960], + [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, + 830, 790, 810, 880, 880, 830, 800, 790, 760, 800], +] +y_axis2 = [ + [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, + 910, 920, 890, 860, 880, 720, 840, 850, 850, 780], + [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, + 870, 870, 810, 740, 810, 940, 950, 800, 810, 870] +] +boxplot.add("category1", x_axis, boxplot.prepare_data(y_axis1)) +boxplot.add("category2", x_axis, boxplot.prepare_data(y_axis2)) +boxplot.render() +``` +![boxplot-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/boxplot-1.png) + + +## EffectScatter(带有涟漪特效动画的散点图) +> 利用动画特效可以将某些想要突出的数据进行视觉突出。 + +EffectScatter.add() 方法签名 +```python +add(name, x_axis, y_axis, symbol_size=10, **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> list + y 坐标轴数据 +* symbol_size -> int + 标记图形大小,默认为 10 + +```python +from pyecharts import EffectScatter + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [25, 20, 15, 10, 60, 33] +es = EffectScatter("动态散点图示例") +es.add("effectScatter", v1, v2) +es.render() +``` +![effectscatter-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/effectscatter-0.gif) + +```python +es = EffectScatter("动态散点图各种图形示例") +es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin") +es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect") +es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect") +es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond") +es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow") +es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle") +es.render() +``` +![effectscatter-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/effectscatter-1.gif) + +* symbol -> str + 标记图形,有'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'可选 +* effect_brushtype -> str + 波纹绘制方式,有'stroke', 'fill'可选。默认为'stroke' +* effect_scale -> float + 动画中波纹的最大缩放比例。默认为 2.5 +* effect_period -> float + 动画持续的时间。默认为 4(s) + + +## Funnel(漏斗图) +Funnel.add() 方法签名 +```python +add(self, name, attr, value, **kwargs) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 + +```python +from pyecharts import Funnel + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +value = [20, 40, 60, 80, 100, 120] +funnel = Funnel("漏斗图示例") +funnel.add("商品", attr, value, is_label_show=True, label_pos="inside", label_text_color="#fff") +funnel.render() +``` +![funnel-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/funnel-0.gif) + +```python +funnel = Funnel("漏斗图示例", width=600, height=400, title_pos='center') +funnel.add("商品", attr, value, is_label_show=True, label_pos="outside", + legend_orient='vertical', legend_pos='left') +funnel.render() +``` +![funnel-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/funnel-1.png) + + +## Gauge(仪表盘) +Gauge.add() 方法签名 +```python +add(name, attr, value, scale_range=None, angle_range=None, **kwargs) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 +* scale_range -> list + 仪表盘数据范围。默认为 [0, 100] +* angle_range -> list + 仪表盘角度范围。默认为 [225, -45] + +```python +from pyecharts import Gauge + +gauge = Gauge("仪表盘示例") +gauge.add("业务指标", "完成率", 66.66) +gauge.render() +``` +![gauge-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/gauge-0.png) + +```python +gauge = Gauge("仪表盘示例") +gauge.add("业务指标", "完成率", 166.66, angle_range=[180, 0], scale_range=[0, 200], + is_legend_show=False) +gauge.render() +``` +![gauge-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/gauge-1.png) + + +## Geo(地理坐标系) +> 地理坐标系组件用于地图的绘制,支持在地理坐标系上绘制散点图,线集。 + +Geo.add() 方法签名 +```python +add(name, attr, value, type="scatter", maptype='china', symbol_size=12, border_color="#111", + geo_normal_color="#323c48", geo_emphasis_color="#2a333d", geo_cities_coords=None, **kwargs) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 +* type -> str + 图例类型,有'scatter', 'effectscatter', 'heatmap'可选。默认为 'scatter' +* maptype -> str + 地图类型。 支持 china、world、安徽、澳门、北京、重庆、福建、福建、甘肃、广东,广西、广州、海南、河北、黑龙江、河南、湖北、湖南、江苏、江西、吉林、辽宁、内蒙古、宁夏、青海、山东、上海、陕西、山西、四川、台湾、天津、香港、新疆、西藏、云南、浙江,以及 [363个二线城市地图](https://github.com/chfw/echarts-china-cities-js#featuring-citiesor-for-single-download)。提醒:在画市级地图的时候,城市名字后面的‘市’要省去了,比如,石家庄市的‘市’不要提,即‘石家庄’就可以了。 +* symbol_size -> int + 标记图形大小。默认为 12 +* border_color -> str + 地图边界颜色。默认为 '#111' +* geo_normal_color -> str + 正常状态下地图区域的颜色。默认为 '#323c48' +* geo_emphasis_color -> str + 高亮状态下地图区域的颜色。默认为 '#2a333d' +* geo_cities_coords -> dict + 用户自定义地区经纬度,类似如 {'阿城': [126.58, 45.32],} 这样的字典,当用于提供了该参数时,将会覆盖原有预存的区域坐标信息。 + +Scatter 类型(连续型) +```python +from pyecharts import Geo + +data = [ + ("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15), + ("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21), + ("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25), + ("文登", 25),("上海", 25),("攀枝花", 25),("威海", 25),("承德", 25),("厦门", 26), + ("汕尾", 26),("潮州", 26),("丹东", 27),("太仓", 27),("曲靖", 27),("烟台", 28), + ("福州", 29),("瓦房店", 30),("即墨", 30),("抚顺", 31),("玉溪", 31),("张家口", 31), + ("阳泉", 31),("莱州", 32),("湖州", 32),("汕头", 32),("昆山", 33),("宁波", 33), + ("湛江", 33),("揭阳", 34),("荣成", 34),("连云港", 35),("葫芦岛", 35),("常熟", 36), + ("东莞", 36),("河源", 36),("淮安", 36),("泰州", 36),("南宁", 37),("营口", 37), + ("惠州", 37),("江阴", 37),("蓬莱", 37),("韶关", 38),("嘉峪关", 38),("广州", 38), + ("延安", 38),("太原", 39),("清远", 39),("中山", 39),("昆明", 39),("寿光", 40), + ("盘锦", 40),("长治", 41),("深圳", 41),("珠海", 42),("宿迁", 43),("咸阳", 43), + ("铜川", 44),("平度", 44),("佛山", 44),("海口", 44),("江门", 45),("章丘", 45), + ("肇庆", 46),("大连", 47),("临汾", 47),("吴江", 47),("石嘴山", 49),("沈阳", 50), + ("苏州", 50),("茂名", 50),("嘉兴", 51),("长春", 51),("胶州", 52),("银川", 52), + ("张家港", 52),("三门峡", 53),("锦州", 54),("南昌", 54),("柳州", 54),("三亚", 54), + ("自贡", 56),("吉林", 56),("阳江", 57),("泸州", 57),("西宁", 57),("宜宾", 58), + ("呼和浩特", 58),("成都", 58),("大同", 58),("镇江", 59),("桂林", 59),("张家界", 59), + ("宜兴", 59),("北海", 60),("西安", 61),("金坛", 62),("东营", 62),("牡丹江", 63), + ("遵义", 63),("绍兴", 63),("扬州", 64),("常州", 64),("潍坊", 65),("重庆", 66), + ("台州", 67),("南京", 67),("滨州", 70),("贵阳", 71),("无锡", 71),("本溪", 71), + ("克拉玛依", 72),("渭南", 72),("马鞍山", 72),("宝鸡", 72),("焦作", 75),("句容", 75), + ("北京", 79),("徐州", 79),("衡水", 80),("包头", 80),("绵阳", 80),("乌鲁木齐", 84), + ("枣庄", 84),("杭州", 84),("淄博", 85),("鞍山", 86),("溧阳", 86),("库尔勒", 86), + ("安阳", 90),("开封", 90),("济南", 92),("德阳", 93),("温州", 95),("九江", 96), + ("邯郸", 98),("临安", 99),("兰州", 99),("沧州", 100),("临沂", 103),("南充", 104), + ("天津", 105),("富阳", 106),("泰安", 112),("诸暨", 112),("郑州", 113),("哈尔滨", 114), + ("聊城", 116),("芜湖", 117),("唐山", 119),("平顶山", 119),("邢台", 119),("德州", 120), + ("济宁", 120),("荆州", 127),("宜昌", 130),("义乌", 132),("丽水", 133),("洛阳", 134), + ("秦皇岛", 136),("株洲", 143),("石家庄", 147),("莱芜", 148),("常德", 152),("保定", 153), + ("湘潭", 154),("金华", 157),("岳阳", 169),("长沙", 175),("衢州", 177),("廊坊", 193), + ("菏泽", 194),("合肥", 229),("武汉", 273),("大庆", 279)] + +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", +width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff", + symbol_size=15, is_visualmap=True) +geo.render() +``` +![geo-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-0.gif) + +**Note:** 请配合 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) 中的 Visualmap 使用 + +Scatter 类型(分段型) +```python +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", +width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff", + symbol_size=15, is_visualmap=True, is_piecewise=True, visual_split_number=6) +geo.render() +``` +![geo-0-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-0-0.gif) + +HeatMap 类型 +```python +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", + width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300], + visual_text_color='#fff') +geo.render() +``` +![geo-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-0-1.gif) + +EffectScatter 类型(全国) +```python +from pyecharts import Geo + +data = [("海门", 9), ("鄂尔多斯", 12), ("招远", 12), ("舟山", 12), ("齐齐哈尔", 14), ("盐城", 15)] +geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", + width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5) +geo.render() +``` +![geo-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-1.gif) + +EffectScatter 类型(广东) +```python +from pyecharts import Geo + +data =[ + ('汕头市', 50), ('汕尾市', 60), ('揭阳市', 35), ('阳江市', 44), ('肇庆市', 72) +] +geo = Geo("广东城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", + width=1200, height=600, background_color='#404a59') +attr, value = geo.cast(data) +geo.add("", attr, value, maptype='广东', type="effectScatter", + is_random=True, effect_scale=5, is_legend_show=False) +geo.render() +``` +![geo-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/geo-2.gif) + + +## Graph(关系图) +> 用于展现节点以及节点之间的关系数据。 + +Graph.add() 方法签名 +```python +add(name, nodes, links, categories=None, is_focusnode=True, is_roam=True, is_rotatelabel=False, + layout="force", graph_edge_length=50, graph_gravity=0.2, graph_repulsion=50, **kwargs) +``` +* name -> str + 图例名称 +* nodes -> dict + 关系图结点,包含的数据项有 + * name:结点名称(必须有!) + * x:节点的初始 x 值 + * y:节点的初始 y 值 + * value:结点数值 + * category:结点类目 + * symbol:标记图形 + * symbolSize:标记图形大小 +* links -> dict + 结点间的关系数据,包含的数据项有 + * source:边的源节点名称的字符串,也支持使用数字表示源节点的索引(必须有!) + * target:边的目标节点名称的字符串,也支持使用数字表示源节点的索引(必须有!) + * vaule:边的数值,可以在力引导布局中用于映射到边的长度 +* categories -> list + 结点分类的类目,结点可以指定分类,也可以不指定。 + 如果节点有分类的话可以通过 nodes[i].category 指定每个节点的类目,类目的样式会被应用到节点样式上 +* is_focusnode -> bool + 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。默认为 True +* is_roam -> bool/str + 是否开启鼠标缩放和平移漫游。默认为 True + 如果只想要开启缩放或者平移,可以设置成'scale'或者'move'。设置成 True 为都开启 +* is_rotatelabel -> bool + 是否旋转标签,默认为 False +* graph_layout -> str + 关系图布局,默认为 'force' + * none:不采用任何布局,使用节点中必须提供的 x, y 作为节点的位置。 + * circular:采用环形布局 + * force:采用力引导布局 +* graph_edge_length -> int + 力布局下边的两个节点之间的距离,这个距离也会受 repulsion 影响。默认为 50 + 支持设置成数组表达边长的范围,此时不同大小的值会线性映射到不同的长度。值越小则长度越长 +* graph_gravity -> int + 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。默认为 0.2 +* graph_repulsion -> int + 节点之间的斥力因子。默认为 50 + 支持设置成数组表达斥力的范围,此时不同大小的值会线性映射到不同的斥力。值越大则斥力越大 +* graph_edge_symbol -> str/list + 边两端的标记类型,可以是一个数组分别指定两端,也可以是单个统一指定。默认不显示标记,常见的可以设置为箭头,如下:edgeSymbol: ['circle', 'arrow'] +* graph_edge_symbolsize -> int/list + 边两端的标记大小,可以是一个数组分别指定两端,也可以是单个统一指定。 + +```python +from pyecharts import Graph + +nodes = [{"name": "结点1", "symbolSize": 10}, + {"name": "结点2", "symbolSize": 20}, + {"name": "结点3", "symbolSize": 30}, + {"name": "结点4", "symbolSize": 40}, + {"name": "结点5", "symbolSize": 50}, + {"name": "结点6", "symbolSize": 40}, + {"name": "结点7", "symbolSize": 30}, + {"name": "结点8", "symbolSize": 20}] +links = [] +for i in nodes: + for j in nodes: + links.append({"source": i.get('name'), "target": j.get('name')}) +graph = Graph("关系图-力引导布局示例") +graph.add("", nodes, links, repulsion=8000) +graph.render() + +``` +![graph-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-0.png) + +```python +graph = Graph("关系图-环形布局示例") +graph.add("", nodes, links, is_label_show=True, + graph_repulsion=8000, graph_layout='circular', label_text_color=None) +graph.render() +``` +![graph-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-1.png) + +```python +from pyecharts import Graph + +import json +with open("..\json\weibo.json", "r", encoding="utf-8") as f: + j = json.load(f) + nodes, links, categories, cont, mid, userl = j +graph = Graph("微博转发关系图", width=1200, height=600) +graph.add("", nodes, links, categories, label_pos="right", graph_repulsion=50, + is_legend_show=False, line_curve=0.2, label_text_color=None) +graph.render() +``` +![graph-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/graph-2.gif) + +**Note:** 可配置 **lineStyle** 参数 + + +# HeatMap(热力图) +> 热力图主要通过颜色去表现数值的大小,必须要配合 visualMap 组件使用。直角坐标系上必须要使用两个类目轴。 + +HeatMap.add() 方法签名 +```python +add(*args, **kwargs) +``` +如果指定了 `is_calendar_heatmap`(使用日历热力图)为 True,则参数为 +* name -> str + 图例名称 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』 +* calendar_date_range -> str/list + 日历热力图的日期, "2016" 表示 2016 年, ["2016-5-5", "2017-5-5"] 表示 2016 年 5 月 5 日至 2017 年 5 月 5 日 +* calendar_cell_size -> list + 日历每格框的大小,可设置单值 或数组 第一个元素是宽 第二个元素是高,支持设置自适应 "auto"。默认为 ["auto", 20] + +默认为不指定,参数为 +* name -> str + 图例名称 +* x_axis -> str + x 坐标轴数据。需为类目轴,也就是不能是数值。 +* y_axis -> str + y 坐标轴数据。需为类目轴,也就是不能是数值。 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』 + +默认情况,不指定 `is_calendar_heatmap` +```python +import random +from pyecharts import HeatMap + +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_axis = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"] +data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] +heatmap = HeatMap() +heatmap.add("热力图直角坐标系", x_axis, y_axis, data, is_visualmap=True, + visual_text_color="#000", visual_orient='horizontal') +heatmap.render() +``` +![heatmap-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/heatmap-0.gif) + +使用日历热力图,指定 `is_calendar_heatmap` 为 True +```python +import datetime +import random +from pyecharts import HeatMap + +begin = datetime.date(2017, 1, 1) +end = datetime.date(2017, 12, 31) +data = [[str(begin + datetime.timedelta(days=i)), + random.randint(1000, 25000)] for i in range((end - begin).days + 1)] +heatmap = HeatMap("日历热力图示例", "某人 2017 年微信步数情况", width=1100) +heatmap.add("", data, is_calendar_heatmap=True, + visual_text_color='#000', visual_range_text=['', ''], + visual_range=[1000, 25000], calendar_cell_size=['auto', 30], + is_visualmap=True, calendar_date_range="2017", + visual_orient="horizontal", visual_pos="center", + visual_top="80%", is_piecewise=True) +heatmap.render() +``` +![heatmap-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/heatmap-1.gif) + +**Note:** 热力图必须配合 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) 中的 VisualMap 使用才有效果。 + + +## Kline(K线图) +> 红涨蓝跌 + +Kline.add() 方法签名 +```python +add(name, x_axis, y_axis, **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> [list], 包含列表的列表 + y 坐标轴数据。数据中,每一行是一个『数据项』,每一列属于一个『维度』。 + 数据项具体为 [open, close, lowest, highest] (即:[开盘值, 收盘值, 最低值, 最高值]) +```python +from pyecharts import Kline + +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1) +kline.render() +``` +![kline-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-0.png) + +Kline + dataZoom +```python +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, + mark_point=["max"], is_datazoom_show=True) +kline.render() +``` +![kline-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-1.gif) + +dataZoom 效果加在纵坐标轴上 +```python +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, mark_point=["max"], + is_datazoom_show=True, datazoom_orient='vertical') +kline.render() +``` +![kline-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-2.gif) + +指定 markLine 位于开盘或者收盘上 +```python +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], + v1, mark_line=["max"], mark_line_symbolsize=0, + datazoom_orient='vertical', mark_line_valuedim='close') +kline.render() +``` +![kline-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/kline-3.png) + +## Line(折线/面积图) +> 折线图是用折线将各个数据点标志连接起来的图表,用于展现数据的变化趋势。 + +Line.add() 方法签名 +```python +add(name, x_axis, y_axis, is_symbol_show=True, is_smooth=False, is_stack=False, + is_step=False, is_fill=False, **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> list + y 坐标轴数据 +* is_symbol_show -> bool + 是否显示标记图形,默认为 True +* is_smooth -> bool + 是否平滑曲线显示,默认为 False +* is_stack -> bool + 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。默认为 False +* is_step -> bool/str + 是否是阶梯线图。可以设置为 True 显示成阶梯线图。默认为 False + 也支持设置成'start', 'middle', 'end'分别配置在当前点,当前点与下个点的中间下个点拐弯。 +* is_fill -> bool + 是否填充曲线所绘制面积,默认为 False + +```python +from pyecharts import Line + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 10, 100] +v2 = [55, 60, 16, 20, 15, 80] +line = Line("折线图示例") +line.add("商家A", attr, v1, mark_point=["average"]) +line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"]) +line.render() +``` +![line-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-0.gif) + +标记点其他配置 +```python +line = Line("折线图示例") +line.add("商家A", attr, v1, mark_point=["average", "max", "min"], + mark_point_symbol='diamond', mark_point_textcolor='#40ff27') +line.add("商家B", attr, v2, mark_point=["average", "max", "min"], + mark_point_symbol='arrow', mark_point_symbolsize=40) +line.render() +``` +![line-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-0-1.png) + +```python +line = Line("折线图示例") +line.add("商家A", attr, v1, + mark_point=["average", { + "coord": ["裤子", 10], "name": "这是我想要的第一个标记点"}]) +line.add("商家B", attr, v2, is_smooth=True, + mark_point=[{ + "coord": ["袜子", 80], "name": "这是我想要的第二个标记点"}]) +line.render() +``` +![line-0-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-0-2.gif) + +```python +line = Line("折线图-数据堆叠示例") +line.add("商家A", attr, v1, is_stack=True, is_label_show=True) +line.add("商家B", attr, v2, is_stack=True, is_label_show=True) +line.render() +``` +![line-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-1.gif) + +```python +line = Line("折线图-阶梯图示例") +line.add("商家A", attr, v1, is_step=True, is_label_show=True) +line.render() +``` +![line-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-2.png) + +```python +line = Line("折线图-面积图示例") +line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None) +line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True) +line.render() +``` +![line-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-3.png) + +* area_opacity -> float + 填充区域透明度 +* area_color -> str + 填充区域颜色 + +**Note:** 可配置 **lineStyle** 参数 +**Note:** 可以通过 label_color 来设置线条颜色,如 ['#eee', '#000'],所有的图表类型的图例颜色都可通过 label_color 来修改。 + +如果是对数数据,推荐使用 ```yaxis_type``` 参数来设置 y 坐标轴为对数轴 +```python +import math, random +line = Line("折线图示例") +line.add("商家A", attr, [math.log10(random.randint(1, 99999)) for _ in range(6)]) +line.add("商家B", attr, [math.log10(random.randint(1, 99999999)) for _ in range(6)], + yaxis_type="log") +line.render() +``` +![line-3-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line-3-1.png) + + +## Line3D(3D 折线图) + +Line3D.add() 方法签名 +```python +add(name, data, grid3d_opacity=1, **kwargs) +``` +* name -> str + 图例名称 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』 +* grid3d_opacity -> int + 3D 笛卡尔坐标系组的透明度(线的透明度),默认为 1,完全不透明。 + +画个弹簧 +```python +from pyecharts import Line3D + +import math +_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]) +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +line3d = Line3D("3D 折线图示例", width=1200, height=600) +line3d.add("", _data, is_visualmap=True, visual_range_color=range_color, visual_range=[0, 30], + grid3d_rotate_sensitivity=5) +line3d.render() +``` +![line3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/line3D-0.gif) + +旋转弹簧 +```python +from pyecharts import Line3D + +import math +_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]) +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +line3d = Line3D("3D 折线图示例", width=1200, height=600) +line3d.add("", _data, is_visualmap=True, visual_range_color=range_color, visual_range=[0, 30], + is_grid3d_rotate=True, grid3d_rotate_speed=180) +line3d.render() +``` +![line3D-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/line3D-1.gif) + +**Note:** 关于 gird3D 部分的设置,请参照通用配置项中的介绍 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) + + +## Liquid(水球图) +> 主要用来突出数据的百分比。 + +Liquid.add() 方法签名 +```python +add(name, data, shape='circle', liquid_color=None, is_liquid_animation=True, + is_liquid_outline_show=True, **kwargs) +``` +* name -> str + 图例名称 +* data -> list + 数据项 +* shape -> str + 水球外形,有'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'可选。默认'circle' +* liquid_color -> list + 波浪颜色,默认的颜色列表为['#294D99', '#156ACF', '#1598ED', '#45BDFF']。 +* is_liquid_animation -> bool + 是否显示波浪动画,默认为 True。 +* is_liquid_outline_show -> bool + 是否显示边框,默认为 True。 + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6]) +liquid.render() +``` +![liquid-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-0.gif) + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False) +liquid.render() +``` +![liquid-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-1.gif) + +```python +from pyecharts import Liquid + +liquid = Liquid("水球图示例") +liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape='diamond') +liquid.render() +``` +![liquid-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/liquid-2.png) + + +## Map(地图) +> 地图主要用于地理区域数据的可视化。 + +Map.add() 方法签名 +```python +add(name, attr, value, is_roam=True, maptype='china', **kwargs) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 +* is_roam -> bool/str + 是否开启鼠标缩放和平移漫游。默认为 True + 如果只想要开启缩放或者平移,可以设置成'scale'或者'move'。设置成 True 为都开启 +* maptype -> str + 地图类型。 支持 china、world、安徽、澳门、北京、重庆、福建、福建、甘肃、广东,广西、广州、海南、河北、黑龙江、河南、湖北、湖南、江苏、江西、吉林、辽宁、内蒙古、宁夏、青海、山东、上海、陕西、山西、四川、台湾、天津、香港、新疆、西藏、云南、浙江,以及 [363个二线城市地图](https://github.com/chfw/echarts-china-cities-js#featuring-citiesor-for-single-download)。提醒:在画市级地图的时候,城市名字后面的‘市’要省去了,比如,石家庄市的‘市’不要提,即‘石家庄’就可以了。地图提供了自定义模式 [用户如何自定义地图](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/user-customize-map.md) + +```python +from pyecharts import Map + +value = [155, 10, 66, 78] +attr = ["福建", "山东", "北京", "上海"] +map = Map("全国地图示例", width=1200, height=600) +map.add("", attr, value, maptype='china') +map.render() +``` +![map-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-0.gif) + +显示各区域名称 +```python +from pyecharts import Map + +value = [155, 10, 66, 78] +attr = ["福建", "山东", "北京", "上海"] +map = Map("全国地图示例", width=1200, height=600) +map.add("", attr, value, maptype='china', is_label_show=True) +map.render() +``` +![map-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-0-1.png) + +```python +from pyecharts import Map + +value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6] +attr = ["福建", "山东", "北京", "上海", "甘肃", "新疆", "河南", "广西", "西藏"] +map = Map("Map 结合 VisualMap 示例", width=1200, height=600) +map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000') +map.render() +``` +![map-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-1.gif) + +**Note:** 请配合 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) 中的 Visualmap 使用 + +```python +from pyecharts import Map + +value = [20, 190, 253, 77, 65] +attr = ['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市'] +map = Map("广东地图示例", width=1200, height=600) +map.add("", attr, value, maptype='广东', is_visualmap=True, visual_text_color='#000') +map.render() +``` +![map-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-2.gif) + +```python +value = [95.1, 23.2, 43.3, 66.4, 88.5] +attr= ["China", "Canada", "Brazil", "Russia", "United States"] +map = Map("世界地图示例", width=1200, height=600) +map.add("", attr, value, maptype="world", is_visualmap=True, visual_text_color='#000') +map.render() +``` +![map-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/map-3.gif) + + +## Parallel(平行坐标系) +> 平行坐标系是一种常用的可视化高维数据的图表。 + +Parallel.add() 方法签名 +```python +add(name, data, **kwargs) +``` +* name -> str + 图例名称 +* data -> [list], 包含列表的列表 + 数据项。数据中,每一行是一个『数据项』,每一列属于一个『维度』 + +Parallel.config() 方法签名 +```python +config(schema=None, c_schema=None) +``` +* schema + 默认平行坐标系的坐标轴信息,如 ["dim_name1", "dim_name2", "dim_name3"]。 +* c_schema + 用户自定义平行坐标系的坐标轴信息。 + * dim -> int + 维度索引 + * name > str + 维度名称 + * type -> str + 维度类型,有'value', 'category'可选 + value:数值轴,适用于连续数据。 + category: 类目轴,适用于离散的类目数据。 + * min -> int + 坐标轴刻度最小值。 + * max -> int + 坐标轴刻度最大值。 + * inverse - bool + 是否是反向坐标轴。默认为 False + * nameLocation -> str + 坐标轴名称显示位置。有'start', 'middle', 'end'可选 + +```python +from pyecharts import Parallel + +schema = ["data", "AQI", "PM2.5", "PM10", "CO", "NO2"] +data = [ + [1, 91, 45, 125, 0.82, 34], + [2, 65, 27, 78, 0.86, 45,], + [3, 83, 60, 84, 1.09, 73], + [4, 109, 81, 121, 1.28, 68], + [5, 106, 77, 114, 1.07, 55], + [6, 109, 81, 121, 1.28, 68], + [7, 106, 77, 114, 1.07, 55], + [8, 89, 65, 78, 0.86, 51, 26], + [9, 53, 33, 47, 0.64, 50, 17], + [10, 80, 55, 80, 1.01, 75, 24], + [11, 117, 81, 124, 1.03, 45] +] +parallel = Parallel("平行坐标系-默认指示器") +parallel.config(schema) +parallel.add("parallel", data, is_random=True) +parallel.render() +``` +![parallel-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/parallel-0.png) + +```python +from pyecharts import Parallel + +c_schema = [ + {"dim": 0, "name": "data"}, + {"dim": 1, "name": "AQI"}, + {"dim": 2, "name": "PM2.5"}, + {"dim": 3, "name": "PM10"}, + {"dim": 4, "name": "CO"}, + {"dim": 5, "name": "NO2"}, + {"dim": 6, "name": "CO2"}, + {"dim": 7, "name": "等级", + "type": "category", "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']} +] +data = [ + [1, 91, 45, 125, 0.82, 34, 23, "良"], + [2, 65, 27, 78, 0.86, 45, 29, "良"], + [3, 83, 60, 84, 1.09, 73, 27, "良"], + [4, 109, 81, 121, 1.28, 68, 51, "轻度污染"], + [5, 106, 77, 114, 1.07, 55, 51, "轻度污染"], + [6, 109, 81, 121, 1.28, 68, 51, "轻度污染"], + [7, 106, 77, 114, 1.07, 55, 51, "轻度污染"], + [8, 89, 65, 78, 0.86, 51, 26, "良"], + [9, 53, 33, 47, 0.64, 50, 17, "良"], + [10, 80, 55, 80, 1.01, 75, 24, "良"], + [11, 117, 81, 124, 1.03, 45, 24, "轻度污染"], + [12, 99, 71, 142, 1.1, 62, 42, "良"], + [13, 95, 69, 130, 1.28, 74, 50, "良"], + [14, 116, 87, 131, 1.47, 84, 40, "轻度污染"] +] +parallel = Parallel("平行坐标系-用户自定义指示器") +parallel.config(c_schema=c_schema) +parallel.add("parallel", data) +parallel.render() +``` +![parallel-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/parallel-1.png) + +**Note:** 可配置 **lineStyle** 参数 + + +## Pie(饼图) +> 饼图主要用于表现不同类目的数据在总和中的占比。每个的弧度表示数据数量的比例。 + +Pie.add() 方法签名 +```python +add(name, attr, value, radius=None, center=None, rosetype=None, **kwargs) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 +* radius -> list + 饼图的半径,数组的第一项是内半径,第二项是外半径,默认为 [0, 75] + 默认设置成百分比,相对于容器高宽中较小的一项的一半 +* center -> list + 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标,默认为 [50, 50] + 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度 +* rosetype -> str + 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。默认为'radius' + * radius:扇区圆心角展现数据的百分比,半径展现数据的大小 + * area:所有扇区圆心角相同,仅通过半径展现数据大小 + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图示例") +pie.add("", attr, v1, is_label_show=True) +pie.render() +``` +![pie-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-0.gif) + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图-圆环图示例", title_pos='center') +pie.add("", attr, v1, radius=[40, 75], label_text_color=None, is_label_show=True, + legend_orient='vertical', legend_pos='left') +pie.render() +``` +![pie-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-1.png) + +```python +from pyecharts import Pie + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +v2 = [19, 21, 32, 20, 20, 33] +pie = Pie("饼图-玫瑰图示例", title_pos='center', width=900) +pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius') +pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype='area', + is_legend_show=False, is_label_show=True) +pie.render() +``` +![pie-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/pie-2.png) + + +## Polar(极坐标系) +> 可以用于散点图和折线图。 + +Polar.add() 方法签名 +```python +add(name, data, angle_data=None, radius_data=None, type='line', symbol_size=4, start_angle=90, + rotate_step=0, boundary_gap=True, clockwise=True, **kwargs) +``` +* name -> str + 图例名称 +* data -> [list], 包含列表的列表 + 数据项 [极径,极角 [数据值]] +* angle_data -> list + 角度类目数据 +* radius_data -> list + 半径类目数据 +* type -> str + 图例类型,有'line', 'scatter', 'effectScatter', 'barAngle', 'barRadius'可选。默认为 'line' +* symbol_size -> int + 标记图形大小,默认为 4。 +* start_angle -> int + 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方 +* rotate_step -> int + 刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠 + 旋转的角度从 -90 度到 90 度。默认为 0 +* boundary_gap -> bool + 坐标轴两边留白策略 + 默认为 True,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间 +* clockwise -> bool + 刻度增长是否按顺时针,默认 True +* is_stack -> bool + 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置 +* axis_range -> list + 坐标轴刻度范围。默认值为 [None, None]。 +* is_angleaxis_show -> bool + 是否显示极坐标系的角度轴,默认为 True +* is_radiusaxis_show -> bool + 是否显示极坐标系的径向轴,默认为 True + +```python +from pyecharts import Polar + +import random +data = [(i, random.randint(1, 100)) for i in range(101)] +polar = Polar("极坐标系-散点图示例") +polar.add("", data, boundary_gap=False, type='scatter', is_splitline_show=False, + area_color=None, is_axisline_show=True) +polar.render() +``` +![polar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-0.png) + +* is_splitline_show -> bool + 是否显示分割线,默认为 True +* is_axisline_show -> bool + 是否显示坐标轴线,默认为 True +* area_opacity -> float + 填充区域透明度 +* area_color -> str + 填充区域颜色 + +**Note:** 可配置 **lineStyle** 参数 + +```python +from pyecharts import Polar + +import random +data_1 = [(10, random.randint(1, 100)) for i in range(300)] +data_2 = [(11, random.randint(1, 100)) for i in range(300)] +polar = Polar("极坐标系-散点图示例", width=1200, height=600) +polar.add("", data_1, type='scatter') +polar.add("", data_2, type='scatter') +polar.render() +``` +![polar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-1.png) + +```python +from pyecharts import Polar + +import random +data = [(i, random.randint(1, 100)) for i in range(10)] +polar = Polar("极坐标系-动态散点图示例", width=1200, height=600) +polar.add("", data, type='effectScatter', effect_scale=10, effect_period=5) +polar.render() +``` +![polar-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-2.gif) + +```python +from pyecharts import Polar + +radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) +polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True) +polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True) +polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True) +polar.render() +``` +![polar-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-3.gif) + +```python +from pyecharts import Polar + +radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) +polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barAngle', is_stack=True) +polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barAngle', is_stack=True) +polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barAngle', is_stack=True) +polar.render() +``` +![polar-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/polar-4.png) + + +## Radar(雷达图) +> 雷达图主要用于表现多变量的数据。 + +Radar.add() 方法签名 +```python +add(name, value, item_color=None, **kwargs) +``` +* name -> list + 图例名称 +* value -> [list], 包含列表的列表 + 数据项。数据中,每一行是一个『数据项』,每一列属于一个『维度』 +* item_color -> str + 指定单图例颜色 + +Radar.config() 方法签名 +```python +config(schema=None, c_schema=None, shape="", rader_text_color="#000", **kwargs): +``` +* schema -> list + 默认雷达图的指示器,用来指定雷达图中的多个维度,会对数据处理成 {name:xx, value:xx} 的字典 +* c_schema -> dict + 用户自定义雷达图的指示器,用来指定雷达图中的多个维度 + * name: 指示器名称 + * min: 指示器最小值 + * max: 指示器最大值 +* shape -> str + 雷达图绘制类型,有'polygon'(多边形)和'circle'可选 +* rader_text_color -> str + 雷达图数据项字体颜色,默认为'#000' + +```python +from pyecharts import Radar + +schema = [ + ("销售", 6500), ("管理", 16000), ("信息技术", 30000), + ("客服", 38000), ("研发", 52000), ("市场", 25000) +] +v1 = [[4300, 10000, 28000, 35000, 50000, 19000]] +v2 = [[5000, 14000, 28000, 31000, 42000, 21000]] +radar = Radar() +radar.config(schema) +radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True) +radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False, + legend_selectedmode='single') +radar.render() +``` +![radar-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/radar-0.gif) + +* is_area_show -> bool + 是否显示填充区域 +* area_opacity -> float + 填充区域透明度 +* area_color -> str + 填充区域颜色 +* is_splitline_show -> bool + 是否显示分割线,默认为 True +* is_axisline_show -> bool + 是否显示坐标轴线,默认为 True + +**Note:** 可配置 **lineStyle** 参数 + +```python +value_bj = [ + [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2], + [56, 7, 63, 0.3, 14, 5, 3], [33, 7, 29, 0.33, 16, 6, 4], + [42, 24, 44, 0.76, 40, 16, 5], [82, 58, 90, 1.77, 68, 33, 6], + [74, 49, 77, 1.46, 48, 27, 7], [78, 55, 80, 1.29, 59, 29, 8], + [267, 216, 280, 4.8, 108, 64, 9], [185, 127, 216, 2.52, 61, 27, 10], + [39, 19, 38, 0.57, 31, 15, 11], [41, 11, 40, 0.43, 21, 7, 12], + [64, 38, 74, 1.04, 46, 22, 13], [108, 79, 120, 1.7, 75, 41, 14], + [108, 63, 116, 1.48, 44, 26, 15], [33, 6, 29, 0.34, 13, 5, 16], + [94, 66, 110, 1.54, 62, 31, 17], [186, 142, 192, 3.88, 93, 79, 18], + [57, 31, 54, 0.96, 32, 14, 19], [22, 8, 17, 0.48, 23, 10, 20], + [39, 15, 36, 0.61, 29, 13, 21], [94, 69, 114, 2.08, 73, 39, 22], + [99, 73, 110, 2.43, 76, 48, 23], [31, 12, 30, 0.5, 32, 16, 24], + [42, 27, 43, 1, 53, 22, 25], [154, 117, 157, 3.05, 92, 58, 26], + [234, 185, 230, 4.09, 123, 69, 27],[160, 120, 186, 2.77, 91, 50, 28], + [134, 96, 165, 2.76, 83, 41, 29], [52, 24, 60, 1.03, 50, 21, 30], +] +value_sh = [ + [91, 45, 125, 0.82, 34, 23, 1], [65, 27, 78, 0.86, 45, 29, 2], + [83, 60, 84, 1.09, 73, 27, 3], [109, 81, 121, 1.28, 68, 51, 4], + [106, 77, 114, 1.07, 55, 51, 5], [109, 81, 121, 1.28, 68, 51, 6], + [106, 77, 114, 1.07, 55, 51, 7], [89, 65, 78, 0.86, 51, 26, 8], + [53, 33, 47, 0.64, 50, 17, 9], [80, 55, 80, 1.01, 75, 24, 10], + [117, 81, 124, 1.03, 45, 24, 11], [99, 71, 142, 1.1, 62, 42, 12], + [95, 69, 130, 1.28, 74, 50, 13], [116, 87, 131, 1.47, 84, 40, 14], + [108, 80, 121, 1.3, 85, 37, 15], [134, 83, 167, 1.16, 57, 43, 16], + [79, 43, 107, 1.05, 59, 37, 17], [71, 46, 89, 0.86, 64, 25, 18], + [97, 71, 113, 1.17, 88, 31, 19], [84, 57, 91, 0.85, 55, 31, 20], + [87, 63, 101, 0.9, 56, 41, 21], [104, 77, 119, 1.09, 73, 48, 22], + [87, 62, 100, 1, 72, 28, 23], [168, 128, 172, 1.49, 97, 56, 24], + [65, 45, 51, 0.74, 39, 17, 25], [39, 24, 38, 0.61, 47, 17, 26], + [39, 24, 39, 0.59, 50, 19, 27], [93, 68, 96, 1.05, 79, 29, 28], + [188, 143, 197, 1.66, 99, 51, 29], [174, 131, 174, 1.55, 108, 50, 30], +] +c_schema= [{"name": "AQI", "max": 300, "min": 5}, + {"name": "PM2.5", "max": 250, "min": 20}, + {"name": "PM10", "max": 300, "min": 5}, + {"name": "CO", "max": 5}, + {"name": "NO2", "max": 200}, + {"name": "SO2", "max": 100}] +radar = Radar() +radar.config(c_schema=c_schema, shape='circle') +radar.add("北京", value_bj, item_color="#f9713c", symbol=None) +radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None, legend_selectedmode='signle') +radar.render() +``` +![radar-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/radar-1.gif) + +**Note:** symblo=None 可隐藏标记图形(小圆圈) + +图例多例模式。 +```python +radar = Radar() +radar.config(c_schema=c_schema, shape='circle') +radar.add("北京", value_bj, item_color="#f9713c", symbol=None) +radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None) +radar.render() +``` +![radar-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/radar-2.gif) + + +## Sankey(桑基图) +> 是一种特殊的流图, 它主要用来表示原材料、能量等如何从初始形式经过中间过程的加工、转化到达最终形式。 + +Sankey.add() 方法签名 +```python +add(name, nodes, links, sankey_node_width=20, sankey_node_gap=8, **kwargs) +``` +* name -> str + 图例名称 +* nodes -> list + 桑基图结点,必须包含的数据项有: + * name:数据项名称 + * value:数据项数值 +* links -> list + 桑基图结点关系 + * source:边的源节点名称(必须有!) + * target:边的目标节点名称(必须有!) + * vaule:边的数值,决定边的宽度。 + * sankey_node_width -> int + 图中每个矩形节点的宽度。默认为 20 + * sankey_node_gap -> int + 图中每一列任意两个矩形节点之间的间隔。默认为 8 + +先来个简单示例 +```python +from pyecharts import Sankey + +nodes = [ + {'name': 'category1'}, {'name': 'category2'}, {'name': 'category3'}, + {'name': 'category4'}, {'name': 'category5'}, {'name': 'category6'}, +] + +links = [ + {'source': 'category1', 'target': 'category2', 'value': 10}, + {'source': 'category2', 'target': 'category3', 'value': 15}, + {'source': 'category3', 'target': 'category4', 'value': 20}, + {'source': 'category5', 'target': 'category6', 'value': 25} +] +sankey = Sankey("桑基图示例", width=1200, height=600) +sankey.add("sankey", nodes, links, line_opacity=0.2, + line_curve=0.5, line_color='source', is_label_show=True, label_pos='right') +sankey.render() +``` +![sankey-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/sankey-0.png) + +使用官方提供的 json 数据 +```python +import sys +import os +import json + +from pyecharts import Sankey + +PY2 = sys.version_info[0] == 2 + +if PY2: + import codecs + with codecs.open(os.path.join("..", "json", "energy.json"), "rb") as f: + j = json.load(f) +else: + with open(os.path.join("..", "json", "energy.json"), "r", encoding="utf-8") as f: + j = json.load(f) +sankey = Sankey("桑基图示例", width=1200, height=600) +sankey.add("sankey", nodes=j['nodes'], links=j['links'], line_opacity=0.2, + line_curve=0.5, line_color='source', is_label_show=True, label_pos='right') +sankey.render() +``` +![sankey-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/sankey-1.png) + + +## Scatter(散点图) +> 直角坐标系上的散点图可以用来展现数据的 x,y 之间的关系,如果数据项有多个维度,可以用颜色来表现,利用 geo 组件。 + +Scatter.add() 方法签名 +```python +add(name, x_axis, y_axis, extra_data=None, symbol_size=10, **kwargs) +``` +* name -> str + 图例名称 +* x_axis -> list + x 坐标轴数据 +* y_axis -> list + y 坐标轴数据 +* extra_data -> int + 第三维度数据,x 轴为第一个维度,y 轴为第二个维度。(可在 visualmap 中将视图元素映射到第三维度) +* symbol_size -> int + 标记图形大小,默认为 10 + +```python +from pyecharts import Scatter + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [10, 20, 30, 40, 50, 60] +scatter = Scatter("散点图示例") +scatter.add("A", v1, v2) +scatter.add("B", v1[::-1], v2) +scatter.render() +``` +![scatter-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0.png) + +利用 Visualmap 组件,通过颜色映射数值。 +```python +scatter = Scatter("散点图示例") +scatter.add("A", v1, v2) +scatter.add("B", v1[::-1], v2, is_visualmap=True) +scatter.render() +``` +![scatter-0-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0-1.gif) + +利用 Visualmap 组件,通过图形点大小映射数值。 +```python +scatter = Scatter("散点图示例") +scatter.add("A", v1, v2) +scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) +scatter.render() +``` +![scatter-0-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0-2.gif) + +利用 Visualmap 组件映射到第三维度数据 +```python +data = [ + [28604, 77, 17096869], + [31163, 77.4, 27662440], + [1516, 68, 1154605773], + [13670, 74.7, 10582082], + [28599, 75, 4986705], + [29476, 77.1, 56943299], + [31476, 75.4, 78958237], + [28666, 78.1, 254830], + [1777, 57.7, 870601776], + [29550, 79.1, 122249285], + [2076, 67.9, 20194354], + [12087, 72, 42972254], + [24021, 75.4, 3397534], + [43296, 76.8, 4240375], + [10088, 70.8, 38195258], + [19349, 69.6, 147568552], + [10670, 67.3, 53994605], + [26424, 75.7, 57110117], + [37062, 75.4, 252847810] + ] + +x_lst = [v[0] for v in data] +y_lst = [v[1] for v in data] +extra_data = [v[2] for v in data] +sc = Scatter() +sc.add("scatter", x_lst, y_lst, extra_data=extra_data, is_visualmap=True, + visual_dimension=2, visual_orient='horizontal', + visual_type='size', visual_range=[254830, 1154605773], + visual_text_color='#000') +sc.render() +``` +![scatter-0-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0-3.gif) + +**Note:** 请配合 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) 中的 Visualmap 使用 + +散点图默认的坐标轴都为数值轴,如果想实现横坐标为类目轴,可通过 ```xaxis_type``` 修改 +```python +scatter = Scatter("散点图示例") +scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2) +scatter.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category") +scatter.render() +``` +![scatter-0-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter-0-3.png) + +Scatter 还内置了画画方法 +```python +draw(path, color=None) +''' +将图片上的像素点转换为数组,如 color 为(255,255,255)时只保留非白色像素点的坐标信息 +返回两个 k_lst, v_lst 两个列表刚好作为散点图的数据项 +''' +``` +* path -> str + 转换图片的地址 +* color -> str + 所要排除的颜色 + +首先你需要准备一张图片,如 + +![pyecharts-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/pyecharts-0.png) + +```python +from pyecharts import Scatter + +scatter = Scatter("散点图示例") +v1, v2 = scatter.draw("../images/pyecharts-0.png") +scatter.add("pyecharts", v1, v2, is_random=True) +scatter.render() +``` +![pyecharts-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/pyecharts-1.png) + + +## Scatter3D(3D 散点图) +Scatter3D.add() 方法签名 +```python +add(name, data, grid3d_opacity=1, **kwargs) +``` +* name -> str + 图例名称 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』 +* grid3d_opacity -> int + 3D 笛卡尔坐标系组的透明度(点的透明度),默认为 1,完全不透明。 + +```python +from pyecharts import Scatter3D + +import random +data = [ + [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] for _ in range(80) +] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) +scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) +scatter3D.render() +``` +![scatter3D-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/scatter3D-0.gif) + +**Note:** 关于 gird3D 部分的设置,请参照通用配置项中的介绍 [通用配置项](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#通用配置项) + + +## ThemeRiver(主题河流图) +ThemeRiver.add() 方法签名 +```python +add(name, data) +``` +* name -> list + 图例名称,必须为 list 类型,list 中每个值为数据项中的种类。 +* data -> [list], 包含列表的列表 + 数据项,数据中,每一行是一个『数据项』,每一列属于一个『维度』。每个数据项至少需要三个维度,如 ['2015/11/08', 10, 'DQ'],分别为 [时间,数值,种类(图例名)] + +```python +from pyecharts import ThemeRiver + +data = [ + ['2015/11/08', 10, 'DQ'], ['2015/11/09', 15, 'DQ'], ['2015/11/10', 35, 'DQ'], + ['2015/11/14', 7, 'DQ'], ['2015/11/15', 2, 'DQ'], ['2015/11/16', 17, 'DQ'], + ['2015/11/17', 33, 'DQ'], ['2015/11/18', 40, 'DQ'], ['2015/11/19', 32, 'DQ'], + ['2015/11/20', 26, 'DQ'], ['2015/11/21', 35, 'DQ'], ['2015/11/22', 40, 'DQ'], + ['2015/11/23', 32, 'DQ'], ['2015/11/24', 26, 'DQ'], ['2015/11/25', 22, 'DQ'], + ['2015/11/08', 35, 'TY'], ['2015/11/09', 36, 'TY'], ['2015/11/10', 37, 'TY'], + ['2015/11/11', 22, 'TY'], ['2015/11/12', 24, 'TY'], ['2015/11/13', 26, 'TY'], + ['2015/11/14', 34, 'TY'], ['2015/11/15', 21, 'TY'], ['2015/11/16', 18, 'TY'], + ['2015/11/17', 45, 'TY'], ['2015/11/18', 32, 'TY'], ['2015/11/19', 35, 'TY'], + ['2015/11/20', 30, 'TY'], ['2015/11/21', 28, 'TY'], ['2015/11/22', 27, 'TY'], + ['2015/11/23', 26, 'TY'], ['2015/11/24', 15, 'TY'], ['2015/11/25', 30, 'TY'], + ['2015/11/26', 35, 'TY'], ['2015/11/27', 42, 'TY'], ['2015/11/28', 42, 'TY'], + ['2015/11/08', 21, 'SS'], ['2015/11/09', 25, 'SS'], ['2015/11/10', 27, 'SS'], + ['2015/11/11', 23, 'SS'], ['2015/11/12', 24, 'SS'], ['2015/11/13', 21, 'SS'], + ['2015/11/14', 35, 'SS'], ['2015/11/15', 39, 'SS'], ['2015/11/16', 40, 'SS'], + ['2015/11/17', 36, 'SS'], ['2015/11/18', 33, 'SS'], ['2015/11/19', 43, 'SS'], + ['2015/11/20', 40, 'SS'], ['2015/11/21', 34, 'SS'], ['2015/11/22', 28, 'SS'], + ['2015/11/14', 7, 'QG'], ['2015/11/15', 2, 'QG'], ['2015/11/16', 17, 'QG'], + ['2015/11/17', 33, 'QG'], ['2015/11/18', 40, 'QG'], ['2015/11/19', 32, 'QG'], + ['2015/11/20', 26, 'QG'], ['2015/11/21', 35, 'QG'], ['2015/11/22', 40, 'QG'], + ['2015/11/23', 32, 'QG'], ['2015/11/24', 26, 'QG'], ['2015/11/25', 22, 'QG'], + ['2015/11/26', 16, 'QG'], ['2015/11/27', 22, 'QG'], ['2015/11/28', 10, 'QG'], + ['2015/11/08', 10, 'SY'], ['2015/11/09', 15, 'SY'], ['2015/11/10', 35, 'SY'], + ['2015/11/11', 38, 'SY'], ['2015/11/12', 22, 'SY'], ['2015/11/13', 16, 'SY'], + ['2015/11/14', 7, 'SY'], ['2015/11/15', 2, 'SY'], ['2015/11/16', 17, 'SY'], + ['2015/11/17', 33, 'SY'], ['2015/11/18', 40, 'SY'], ['2015/11/19', 32, 'SY'], + ['2015/11/20', 26, 'SY'], ['2015/11/21', 35, 'SY'], ['2015/11/22', 4, 'SY'], + ['2015/11/23', 32, 'SY'], ['2015/11/24', 26, 'SY'], ['2015/11/25', 22, 'SY'], + ['2015/11/26', 16, 'SY'], ['2015/11/27', 22, 'SY'], ['2015/11/28', 10, 'SY'], + ['2015/11/08', 10, 'DD'], ['2015/11/09', 15, 'DD'], ['2015/11/10', 35, 'DD'], + ['2015/11/11', 38, 'DD'], ['2015/11/12', 22, 'DD'], ['2015/11/13', 16, 'DD'], + ['2015/11/14', 7, 'DD'], ['2015/11/15', 2, 'DD'], ['2015/11/16', 17, 'DD'], + ['2015/11/17', 33, 'DD'], ['2015/11/18', 4, 'DD'], ['2015/11/19', 32, 'DD'], + ['2015/11/20', 26, 'DD'], ['2015/11/21', 35, 'DD'], ['2015/11/22', 40, 'DD'], + ['2015/11/23', 32, 'DD'], ['2015/11/24', 26, 'DD'], ['2015/11/25', 22, 'DD'] +] +tr = ThemeRiver("主题河流图示例图") +tr.add(['DQ', 'TY', 'SS', 'QG', 'SY', 'DD'], data, is_label_show=True) +tr.render() +``` +![themeriver-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/themeriver.gif) + +**Note:** 可以看到,每个数据项中的第三个数值就是该项的种类,而种类可以在 `add()` 第一个参数指定。 + + +## TreeMap(树图) +TreeMap.add() 方法签名 +```python +add(name, attr, value, shape="circle", word_gap=20, word_size_range=None, rotate_step=45) +``` +* name -> str + 图例名称 +* data -> list + ``` + 树图的数据项是 **一棵树**,每个节点包括`value`, `name`(可选), `children`(也是树,可选)如下所示 + [ + { + value: 1212, # 数值 + # 子节点 + children: [ + { + # 子节点数值 + value: 2323, + # 子节点名 + name: 'description of this node', + children: [...], + }, + { + value: 4545, + name: 'description of this node', + children: [ + { + value: 5656, + name: 'description of this node', + children: [...] + }, + ... + ] + } + ] + }, + ... + ] + ``` +* treemap_left_depth -> int + leafDepth 表示『展示几层』,层次更深的节点则被隐藏起来。设置了 leafDepth 后,下钻(drill down)功能开启。drill down 功能即点击后才展示子层级。例如,leafDepth 设置为 1,表示展示一层节点。 +* treemap_drilldown_icon -> str + 当节点可以下钻时的提示符。只能是字符。默认为 '▶' +* treemap_visible_min -> int + 如果某个节点的矩形的面积,小于这个数值(单位:px平方),这个节点就不显示。 + +```python +from pyecharts 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", + }] + }]} +] + +treemap = TreeMap("树图-默认示例", width=1200, height=600) +treemap.add("演示数据", data, is_label_show=True, label_pos='inside') +treemap.render() +``` +![treemap-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/treemap-0.png) + +```python +treemap = TreeMap("树图-下钻示例", width=1200, height=600) +treemap.add("演示数据", data, is_label_show=True, label_pos='inside', + treemap_left_depth=1) +treemap.render() +``` +![treemap-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/treemap-1.gif) + +```python +from pyecharts import TreeMap + +treemap = TreeMap("树图示例", width=1200, height=600) +import os +import json +with open(os.path.join("..", "json", "treemap.json"), "r", encoding="utf-8") as f: + data = json.load(f) +treemap.add("演示数据", data, is_label_show=True, label_pos='inside') +treemap.render() +``` +![treemap-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/treemap-2.gif) + + +## WordCloud(词云图) +WordCloud.add() 方法签名 +```python +add(name, attr, value, shape="circle", word_gap=20, word_size_range=None, rotate_step=45) +``` +* name -> str + 图例名称 +* attr -> list + 属性名称 +* value -> list + 属性所对应的值 +* shape -> list + 词云图轮廓,有'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'可选 +* word_gap -> int + 单词间隔,默认为 20。 +* word_size_range -> list + 单词字体大小范围,默认为 [12, 60]。 +* rotate_step -> int + 旋转单词角度,默认为 45 + +```python +from pyecharts import WordCloud + +name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', + 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', + 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', + 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break'] +value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, + 550, 462, 366, 360, 282, 273, 265] +wordcloud = WordCloud(width=1300, height=620) +wordcloud.add("", name, value, word_size_range=[20, 100]) +wordcloud.render() +``` +![wordcloud-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/wordcloud-0.png) + +```python +wordcloud = WordCloud(width=1300, height=620) +wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond') +wordcloud.render() +``` +![wordcloud-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/wordcloud-1.png) + +**Note:** 当且仅当 shape 为默认的'circle'时 rotate_step 参数才生效 + + +# 用户自定义 + +## Grid:并行显示多张图 +> 用户可以自定义结合 Line/Bar/Kline/Scatter/EffectScatter/Pie/HeatMap/Boxplot 图表,将不同类型图表画在多张图上。第一个图需为 有 x/y 轴的图,即不能为 Pie,其他位置顺序任意。 + +Grid 类的使用: +1. 引入 `Grid` 类,`from pyecharts import Grid` +2. 实例化 Grid 类,`grid = Grid()` ,可指定 `page_title` 参数。 +3. 使用 `add()` 向 `grid` 中添加图,至少需要设置一个 `grid_top`, `grid_bottom`, `grid_left`, `grid_right` 四个参数中的一个。`grid_width` 和 `grid_height` 一般不用设置,默认即可。 +4. 使用 `render()` 渲染生成 .html 文件 + +**Note:** `Overlap` 可类放入 `Grid` 类中,不过有个前提,`Overlap` 不可为多 x 轴或者多 y 轴,否则会出现坐标轴索引混乱问题 + +Grid 类中其他方法: +* `render_embed()`:在 Flask&Django 中可以使用该方法渲染 +* `show_config()`:打印输出所有配置项 +* `chart`:chart 属性返回图形实例 +* 在 Jupyter-notebook 中直接调用 Grid 实例即可显示图表 + +Grid.add() 方法签名 +```python +add(chart, grid_width=None, grid_height=None, grid_top=None, grid_bottom=None, grid_left=None, grid_right=None) +``` +* chart -> chart instance + 图表示例 +* grid_width -> str/int + grid 组件的宽度。默认自适应。 +* grid_height -> str/int + grid 组件的高度。默认自适应。 +* grid_top -> str/int + grid 组件离容器顶部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 +* grid_bottom -> str/int + grid 组件离容器底部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 +* grid_left -> str/int + grid 组件离容器左侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 +* grid_right -> str/int + grid 组件离容器右侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 + + +上下类型,Bar + Line +```python +from pyecharts import Bar, Line, Grid + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", height=720) +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True) +line = Line("折线图示例", title_top="50%") +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_top="50%") + +grid = Grid() +grid.add(bar, grid_bottom="60%") +grid.add(line, grid_top="60%") +grid.render() +``` +![grid-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-0.gif) + +左右类型,Scatter + EffectScatter +```python +from pyecharts import Scatter, EffectScatter, Grid + +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +scatter = Scatter(width=1200) +scatter.add("散点图示例", v1, v2, legend_pos="70%") +es = EffectScatter() +es.add("动态散点图示例", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], + effect_scale=6, legend_pos="20%") + +grid = Grid() +grid.add(scatter, grid_left="60%") +grid.add(es, grid_right="60%") +grid.render() +``` +![grid-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-1.gif) + +上下左右类型,Bar + Line + Scatter + EffectScatter +```python +from pyecharts import Bar, Line, Scatter, EffectScatter, Grid + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", height=720, width=1200, title_pos="65%") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True, legend_pos="80%") +line = Line("折线图示例") +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%") +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") +scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") +es = EffectScatter("动态散点图示例", title_top="50%") +es.add("es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, + legend_top="50%", legend_pos="20%") + +grid = Grid() +grid.add(bar, grid_bottom="60%", grid_left="60%") +grid.add(line, grid_bottom="60%", grid_right="60%") +grid.add(scatter, grid_top="60%", grid_left="60%") +grid.add(es, grid_top="60%", grid_right="60%") +grid.render() +``` +![grid-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-2.gif) + +Line + Pie +```python +from pyecharts import Line, Pie, Grid + +line = Line("折线图示例", width=1200) +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], + mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%") +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图示例", title_pos="55%") +pie.add("", attr, v1, radius=[45, 65], center=[65, 50], legend_pos="80%", + legend_orient='vertical') + +grid = Grid() +grid.add(line, grid_right="55%") +grid.add(pie, grid_left="60%") +grid.render() +``` +![grid-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-3.png) + +**Note:** 可以通过设置 center 参数改变 Pie 图的位置,如 [v1, v2], 要求 v1 > v2。 + +Line + Kline +```python +from pyecharts import Line, Kline, Grid + +line = Line("折线图示例", width=1200) +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], legend_pos="20%") +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例", title_pos="60%") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, legend_pos="80%") + +grid = Grid() +grid.add(line, grid_right="60%") +grid.add(kline, grid_left="55%") +grid.render() +``` +![grid-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-4.png) + +HeatMap + Bar +```python +import random +x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] +y_axis = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"] +data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] +heatmap = HeatMap("热力图示例", height=700) +heatmap.add("热力图直角坐标系", x_axis, y_axis, data, is_visualmap=True, visual_top="45%", + visual_text_color="#000", visual_orient='horizontal') +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图示例", title_top="52%") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True, legend_top="50%") + +grid = Grid() +grid.add(heatmap, grid_bottom="60%") +grid.add(bar, grid_top="60%") +grid.render() +``` +![grid-5](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-5.gif) +Bar 会受 HeatMap 影响,很有趣。 + +datazoom 组件同时控制多个图 +```python +line = Line("折线图示例", width=1200, height=700) +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], legend_top="50%", + mark_line=["average"], is_datazoom_show=True, datazoom_xaxis_index=[0, 1]) + +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例", title_top="50%") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, is_datazoom_show=True) + +grid = Grid() +grid.add(line, grid_top="60%") +grid.add(kline, grid_bottom="60%") +grid.render() +``` +![grid-6](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-6.gif) + +倒映直角坐标系 +```python +import random + +attr = ['{}天'.format(i) for i in range(1, 31)] +line_top = Line("折线图示例", width=1200, height=700) +line_top.add("最高气温", attr, [random.randint(20, 100) for i in range(30)], + mark_point=["max", "min"], mark_line=["average"], legend_pos='38%') +line_bottom = Line() +line_bottom.add("最低气温", attr, [random.randint(20, 100) for i in range(30)], + mark_point=["max", "min"], mark_line=["average"], + is_yaxis_inverse=True, xaxis_pos='top') + +grid = Grid() +grid.add(line_top, grid_bottom='60%') +grid.add(line_bottom, grid_top='50%') +grid.render() +``` +![grid-7](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-7.gif) + +Grid+Overlap +```python +from pyecharts import Overlap, Bar, Line, Grid + +grid = Grid() + +attr = ["{}月".format(i) for i in range(1, 13)] +v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] +v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] +v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] + +bar = Bar(width=1200, height=600, title="Overlap+Grid 示例", title_pos="40%") +bar.add("蒸发量", attr, v1) +bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_max=250, + legend_pos="85%", legend_orient="vertical", legend_top="45%") +line = Line() +line.add("平均温度", attr, v3, yaxis_formatter=" °C") +overlap = Overlap() +overlap.add(bar) +overlap.add(line, is_add_yaxis=True, yaxis_index=1) + +grid.add(overlap, grid_right='20%') +grid.render() +``` +![grid-8](https://github.com/chenjiandongx/pyecharts/blob/master/images/grid-8.png) + +**Note:** `Overlap` 放入 `Grid` 可以利用其 grid 网格调整布局,例如上图将图例放在右边,这种情况在**图例名字过长**时很有用。 + + +## Overlap:结合不同类型图表叠加画在同张图上 +> 用户可以自定义结合 Line/Bar/Kline, Scatter/EffectScatter 图表,将不同类型图表画在一张图上。利用第一个图表为基础,往后的数据都将会画在第一个图表上。 +Overlap 类的使用: +1. 引入 `Overlap` 类,`from pyecharts import Overlap` +2. 实例化 `Overlap` 类,`overlap = Overlap()` ,可指定 `page_title` 参数。 +3. 使用 `add()` 向 `overlap` 中添加图 +4. 使用 `render()` 渲染生成 .html 文件 + +Overlap.add() 方法签名 +```python +add(chart, xaxis_index=0, yaxis_index=0, is_add_xaxis=False, is_add_yaxis=False) +``` +* chart -> chart instance + 图表示例 +* xaxis_index -> int + x 坐标轴索引,默认为 0 +* yaxis_index -> int + y 坐标轴索引,默认为 0 +* is_add_xaxis -> bool + 是否新增一个 x 坐标轴,默认为 False +* is_add_yaxis -> bool + 是否新增一个 y 坐标轴,默认为 False + +Overlap 类中其他方法: +* `render_embed()`:在 Flask&Django 中可以使用该方法渲染 +* `show_config()`:打印输出所有配置项 +* `chart`:返回图形实例 +* 在 Jupyter-notebook 中直接调用 Overlap 实例即可显示图表 + +Line + Bar +```python +from pyecharts import Bar, Line, Overlap + +attr = ['A', 'B', 'C', 'D', 'E', 'F'] +v1 = [10, 20, 30, 40, 50, 60] +v2 = [38, 28, 58, 48, 78, 68] +bar = Bar("Line - Bar 示例") +bar.add("bar", attr, v1) +line = Line() +line.add("line", attr, v2) + +overlap = Overlap() +overlap.add(bar) +overlap.add(line) +overlap.render() +``` +![overlap-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/overlap-0.gif) + +Scatter + EffectScatter +```python +from pyecharts import Scatter, EffectScatter, Overlap + +v1 = [10, 20, 30, 40, 50, 60] +v2 = [30, 30, 30, 30, 30, 30] +v3 = [50, 50, 50, 50, 50, 50] +v4 = [10, 10, 10, 10, 10, 10] +es = EffectScatter("Scatter - EffectScatter 示例") +es.add("es", v1, v2) +scatter = Scatter() +scatter.add("scatter", v1, v3) +es_1 = EffectScatter() +es_1.add("es_1", v1, v4, symbol='pin', effect_scale=5) + +overlap = Overlap() +overlap.add(es) +overlap.add(scatter) +overlap.add(es_1) +overlap.render() +``` +![overlap-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/overlap-1.gif) + +Kline + Line +```python +import random +from pyecharts import Line, Kline, Overlap + +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +attr = ["2017/7/{}".format(i + 1) for i in range(31)] +kline = Kline("Kline - Line 示例") +kline.add("日K", attr, v1) +line_1 = Line() +line_1.add("line-1", attr, [random.randint(2400, 2500) for _ in range(31)]) +line_2 = Line() +line_2.add("line-2", attr, [random.randint(2400, 2500) for _ in range(31)]) + +overlap = Overlap() +overlap.add(kline) +overlap.add(line_1) +overlap.add(line_2) +overlap.render() +``` +![overlap-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/overlap-2.png) + +如果想改变轴索引,使其有多 X 轴或者多 Y 轴的话。请看下面 +```python +from pyecharts import Line, Bar, Overlap + +attr = ["{}月".format(i) for i in range(1, 13)] +v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] +v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] +v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] + +bar = Bar(width=1200, height=600) +bar.add("蒸发量", attr, v1) +bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_interval=50, yaxis_max=250) + +line = Line() +line.add("平均温度", attr, v3, yaxis_formatter=" °C", yaxis_interval=5) + +overlap = Overlap() +# 默认不新增 x y 轴,并且 x y 轴的索引都为 0 +overlap.add(bar) +# 新增一个 y 轴,此时 y 轴的数量为 2,第二个 y 轴的索引为 1(索引从 0 开始),所以设置 yaxis_index = 1 +# 由于使用的是同一个 x 轴,所以 x 轴部分不用做出改变 +overlap.add(line, yaxis_index=1, is_add_yaxis=True) +overlap.render() +``` +![overlap-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/overlap-3.gif) + +**Note:** 关于双 Y 轴对齐,可以使用 `yaxis_force_interval` 参数,强制分割成相同份数的刻度。这里有个小技巧,可以先设置 y 轴最大值。举个例子,如果双 y 轴一个最大值为 700,一个最大值为 400。那你可以把两个的 `yaxis_force_interval` 参数分别设置为 140 和 80,那就会都分成均等的 5 份了。 + +如果只是想在单个 .html 按顺序展示图表,推荐使用 ```Page()``` 类 + +## Page:同一网页按顺序展示多图 +> Grid/Timeline/Overlap 都可在 Page 中正常展示,把其当做一个图加入到 Page 中即可 + +Page 类的使用: +1. 引入 `Page` 类,`from pyecharts import Page` +2. 实例化 `Page` 类,`page = Page()` ,可指定 `page_title` 参数。 +3. 使用 `add()` 向 `page` 中添加图,可以是单个图实例,也可以是一个图实例列表。 +4. 使用 `render()` 渲染生成 .html 文件 + +Page 类中其他方法: +* `render_embed()`:在 Flask&Django 中可以使用该方法渲染 +* `show_config()`:打印输出所有配置项 +* `chart`:chart 属性返回图形实例 +* 在 Jupyter-notebook 中直接调用 Page 实例即可显示图表 + +```python +#coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Bar, Scatter3D +from pyecharts import Page + + +page = Page() # step 1 + +# bar +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [5, 20, 36, 10, 75, 90] +v2 = [10, 25, 8, 60, 20, 80] +bar = Bar("柱状图数据堆叠示例") +bar.add("商家A", attr, v1, is_stack=True) +bar.add("商家B", attr, v2, is_stack=True) +page.add(bar) # step 2 + +# scatter3D +import random +data = [ + [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] for _ in range(80) +] +range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', + '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'] +scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) +scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color) +page.add(scatter3D) # step 2 + +page.render() # step 3 +``` +运行之后,你会发现 render.html 已经按顺序显示了两个图: + +![multiple-charts-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/multiple-charts-0.gif) + +当然,更多图也是可以的 +```python +#coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Line, Pie, Kline, Radar +from pyecharts import Page + + +page = Page() + +# line +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] +line = Line("折线图示例") +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], + mark_point=["max", "min"], mark_line=["average"]) +page.add(line) + +# pie +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +v1 = [11, 12, 13, 10, 10, 10] +pie = Pie("饼图-圆环图示例", title_pos='center') +pie.add("", attr, v1, radius=[40, 75], label_text_color=None, is_label_show=True, + legend_orient='vertical', legend_pos='left') +page.add(pie) + +# kline +v1 = [[2320.26, 2320.26, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] +kline = Kline("K 线图示例") +kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1) +page.add(kline) + +# radar +schema = [ + ("销售", 6500), ("管理", 16000), ("信息技术", 30000), + ("客服", 38000), ("研发", 52000), ("市场", 25000) +] +v1 = [[4300, 10000, 28000, 35000, 50000, 19000]] +v2 = [[5000, 14000, 28000, 31000, 42000, 21000]] +radar = Radar("雷达图示例") +radar.config(schema) +radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True) +radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False, + legend_selectedmode='single') +page.add(radar) + +page.render() +``` +![multiple-charts-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/multiple-charts-1.gif) + + +## Timeline:提供时间线轮播多张图 + +Timeline 类的使用: +1. 引入 `Timeline` 类,`from pyecharts import Timeline` +2. 实例化 `Timeline` 类,`timeline = Timeline()` +3. 使用 `add()` 向 `timeline` 中添加图。如 `add(bar, '2013')` 接受两个参数,第一个为图实例,第二个为时间线的 ”时间点“。 +4. 使用 `render()` 渲染生成 .html 文件 + +实例化 Timeline 类时接受设置参数: + +* page_title -> str + 生成 html 文件的 `<title>` 标签的值,默认为'Echarts' +* is_auto_play -> bool + 是否自动播放,默认为 Flase +* is_loop_play -> bool + 是否循环播放,默认为 True +* is_rewind_play -> bool + 是否方向播放,默认为 Flase +* is_timeline_show -> bool + 是否显示 timeline 组件。默认为 True,如果设置为false,不会显示,但是功能还存在。 +* timeline_play_interval -> int + 播放的速度(跳动的间隔),单位毫秒(ms)。 +* timeline_symbol -> str + 标记的图形。ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' +* timeline_symbol_size -> int/list + 标记的图形大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,例如 [20, 10] 表示标记宽为 20,高为 10。 +* timeline_left -> int/str + timeline 组件离容器左侧的距离。 + left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,也可以是 'left', 'center', 'right'。如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。 +* timeline_right -> int/str + timeline 组件离容器右侧的距离。同 left +* timeline_top -> int/str + timeline 组件离容器顶侧的距离。同 left +* timeline_bottom -> int/str + timeline 组件离容器底侧的距离。同 left + +Timeline 类中其他方法: +* `render_embed()`:在 Flask&Django 中可以使用该方法渲染 +* `show_config()`:打印输出所有配置项 +* `chart`:chart 属性返回图形实例 +* Timeline 在 Jupyter-notebook 中显示有问题(无法正常显示动画) + +```python +from pyecharts import Bar, Timeline + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +bar_1 = Bar("2012 年销量", "数据纯属虚构") +bar_1.add("春季", attr, [randint(10, 100) for _ in range(6)]) +bar_1.add("夏季", attr, [randint(10, 100) for _ in range(6)]) +bar_1.add("秋季", attr, [randint(10, 100) for _ in range(6)]) +bar_1.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + +bar_2 = Bar("2013 年销量", "数据纯属虚构") +bar_2.add("春季", attr, [randint(10, 100) for _ in range(6)]) +bar_2.add("夏季", attr, [randint(10, 100) for _ in range(6)]) +bar_2.add("秋季", attr, [randint(10, 100) for _ in range(6)]) +bar_2.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + +bar_3 = Bar("2014 年销量", "数据纯属虚构") +bar_3.add("春季", attr, [randint(10, 100) for _ in range(6)]) +bar_3.add("夏季", attr, [randint(10, 100) for _ in range(6)]) +bar_3.add("秋季", attr, [randint(10, 100) for _ in range(6)]) +bar_3.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + +bar_4 = Bar("2015 年销量", "数据纯属虚构") +bar_4.add("春季", attr, [randint(10, 100) for _ in range(6)]) +bar_4.add("夏季", attr, [randint(10, 100) for _ in range(6)]) +bar_4.add("秋季", attr, [randint(10, 100) for _ in range(6)]) +bar_4.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + +bar_5 = Bar("2016 年销量", "数据纯属虚构") +bar_5.add("春季", attr, [randint(10, 100) for _ in range(6)]) +bar_5.add("夏季", attr, [randint(10, 100) for _ in range(6)]) +bar_5.add("秋季", attr, [randint(10, 100) for _ in range(6)]) +bar_5.add("冬季", attr, [randint(10, 100) for _ in range(6)], is_legend_show=True) + +timeline = Timeline(is_auto_play=True, timeline_bottom=0) +timeline.add(bar_1, '2012 年') +timeline.add(bar_2, '2013 年') +timeline.add(bar_3, '2014 年') +timeline.add(bar_4, '2015 年') +timeline.add(bar_5, '2016 年') +timeline.render() +``` +![timeline-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/timeline-0.gif) + +```python +from pyecharts import Pie, Timeline + +attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] +pie_1 = Pie("2012 年销量比例", "数据纯属虚构") +pie_1.add("秋季", attr, [randint(10, 100) for _ in range(6)], + is_label_show=True, radius=[30, 55], rosetype='radius') + +pie_2 = Pie("2013 年销量比例", "数据纯属虚构") +pie_2.add("秋季", attr, [randint(10, 100) for _ in range(6)], + is_label_show=True, radius=[30, 55], rosetype='radius') + +pie_3 = Pie("2014 年销量比例", "数据纯属虚构") +pie_3.add("秋季", attr, [randint(10, 100) for _ in range(6)], + is_label_show=True, radius=[30, 55], rosetype='radius') + +pie_4 = Pie("2015 年销量比例", "数据纯属虚构") +pie_4.add("秋季", attr, [randint(10, 100) for _ in range(6)], + is_label_show=True, radius=[30, 55], rosetype='radius') + +pie_5 = Pie("2016 年销量比例", "数据纯属虚构") +pie_5.add("秋季", attr, [randint(10, 100) for _ in range(6)], + is_label_show=True, radius=[30, 55], rosetype='radius') + +timeline = Timeline(is_auto_play=True, timeline_bottom=0) +timeline.add(pie_1, '2012 年') +timeline.add(pie_2, '2013 年') +timeline.add(pie_3, '2014 年') +timeline.add(pie_4, '2015 年') +timeline.add(pie_5, '2016 年') +timeline.render() +``` +![timeline-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/timeline-1.gif) + +```python +from pyecharts import Bar, Line, Timeline, Overlap + +attr = ["{}月".format(i) for i in range(1, 7)] +bar = Bar("1 月份数据", "数据纯属虚构") +bar.add("bar", attr, [randint(10, 50) for _ in range(6)]) +line = Line() +line.add("line", attr, [randint(50, 80) for _ in range(6)]) +overlap = Overlap() +overlap.add(bar) +overlap.add(line) + +bar_1 = Bar("2 月份数据", "数据纯属虚构") +bar_1.add("bar", attr, [randint(10, 50) for _ in range(6)]) +line_1 = Line() +line_1.add("line", attr, [randint(50, 80) for _ in range(6)]) +overlap_1 = Overlap() +overlap_1.add(bar_1) +overlap_1.add(line_1) + +bar_2 = Bar("3 月份数据", "数据纯属虚构") +bar_2.add("bar", attr, [randint(10, 50) for _ in range(6)]) +line_2 = Line() +line_2.add("line", attr, [randint(50, 80) for _ in range(6)]) +overlap_2 = Overlap() +overlap_2.add(bar_2) +overlap_2.add(line_2) + +bar_3 = Bar("4 月份数据", "数据纯属虚构") +bar_3.add("bar", attr, [randint(10, 50) for _ in range(6)]) +line_3 = Line() +line_3.add("line", attr, [randint(50, 80) for _ in range(6)]) +overlap_3 = Overlap() +overlap_3.add(bar_3) +overlap_3.add(line_3) + +bar_4 = Bar("5 月份数据", "数据纯属虚构") +bar_4.add("bar", attr, [randint(10, 50) for _ in range(6)]) +line_4 = Line() +line_4.add("line", attr, [randint(50, 80) for _ in range(6)]) +overlap_4 = Overlap() +overlap_4.add(bar_4) +overlap_4.add(line_4) + +timeline = Timeline(timeline_bottom=0) +timeline.add(overlap.chart, '1 月') +timeline.add(overlap_1.chart, '2 月') +timeline.add(overlap_2.chart, '3 月') +timeline.add(overlap_3.chart, '4 月') +timeline.add(overlap_4.chart, '5 月') +timeline.render() +``` +![timeline-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/timeline-2.gif) + + +# 使用技巧 + +## 统一风格 +如果想在同一个图或者多个图内保持统一的风格,可以使用以下方式传参 +#### 初始化图时 +```python +chart_init = { + "title_color": "#fff", + "title_pos": "center", + "width": 1100, + "height": 600, + "background_color": '#404a59' +} +geo = Geo("全国主要城市空气质量", "data from pm2.5", **chart_init) +``` + +#### 增加图例时 +```python +pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center') +pie_style = { + "radius": [18, 24], + "label_pos": "center", + "is_label_show": True, + "label_text_color": None +} +pie.add("", ["剧情", ""], [25, 75], center=[10, 30], **pie_style) +pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], **pie_style) +pie.add("", ["爱情", ""], [14, 86], center=[50, 30], **pie_style) +pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], **pie_style) +``` +这样会使得每个图例都会按照设定的风格 + + +# 集成Flask&Django + +* [pyecharts + Flask](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/doc_flask.md) +* [pyecharts + Django](https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/doc_django.md) + + +# 更多示例 + +* 更多示例请参考 [example.md](https://github.com/chenjiandongx/pyecharts/blob/master/example.md) +* 欢迎大家补充示例 + + +# 关于项目 + +* 欢迎大家使用 pyecharts +* 有什么建议或者想法可以开个 issue 讨论,有什么小错误的也可以直接提交 PR。 +* 如有想单独讨论的话可以使用邮箱 -> chenjiandongx@qq.com +* 关注 [changelog.md](https://github.com/chenjiandongx/pyecharts/blob/master/changelog.md) \ No newline at end of file diff --git a/docs/zh-cn/user-customize-map.md b/docs/zh-cn/user-customize-map.md new file mode 100644 index 000000000..57dd6b22b --- /dev/null +++ b/docs/zh-cn/user-customize-map.md @@ -0,0 +1,82 @@ +# 用户自定义地图 + +考虑到项目更好的通用性,以及更好可扩展性,所以决定对地图部分提供自定义模式。适用在pyecharts 0.1.9.7以后的版本。 + +## 下载地图 + +这里是 Echarts 官方地图下载地址 [download-map](http://echarts.baidu.com/download-map.html) + +![customize-map-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/customize-map-0.png) + +除了官方提供的主要省份的地图,还可根据自己的需求自定义。 + +![customize-map-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/customize-map-1.png) + +所有地图均要下载成 JS 格式。 + +请注意: + +#. 地图名称千万要把beijing变成中文的城市名称 +#. 2.2.0 之后,[363个二线城市地图](https://github.com/chfw/echarts-china-cities-js#featuring-citiesor-for-single-download)已经内嵌了,无需下载。 + + +## 如何手动添加(0.1.9.7+) +下面就以广东省汕头市南澳县地图为例,说明如何自行添加地图。 + +### 保存地图文件 +先下载南澳县地图的 JS 文件,请更名为 nanao.js。将其保存在项目安装目录下的 templates/js/echarts 文件夹中。Windows 下一般为 Lib/site-packages/pyecharts/templates/js/echarts + +然后呢,在你的代码里需要加下面的两行 + +``` +import pyecharts.constants as constants + +constants.CITY_NAME_PINYIN_MAP['南澳县'] = 'nanao' +``` + +请注意格式:关键词是“南澳县”,对应的文件名是"nanao", 并且不加'js'后缀。下面是所有的代码 + +```python +# coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Map +import pyecharts.constants as constants + +constants.CITY_NAME_PINYIN_MAP['南澳县']='nanao' + +value = [] +attr = [] +map = Map("南澳县地图示例", width=1200, height=600) +map.add("", attr, value, maptype='南澳县', is_visualmap=True, visual_text_color='#000') +map.render() +``` + +如果只是使用 render() 生成 .html 文件的话到这里就可以了。还想要在 jupyter-notebook 上展示地图的话,还需要下面一个步骤。 + +``` +$ jupyter nbextensions install --user [python lib dir]/site-packages/pyecharts/templates/js/echarts +... +Copying: .../echarts/nanao.js -> /.../jupyter/nbextensions/echarts/nanao.js +... + To initialize this nbextension in the browser every time the notebook (or other app) loads: + + jupyter nbextension enable <the entry point> +``` + +请特别注意,`[python lib dir]/site-packages/pyecharts/templates/js/echarts`路径后面不加`/`. + +你可以选择性的执行下面的语句。如果你已经装了 0.1.9.7+ 在你现在的 Python 环境,就可以跳过 + +``` +jupyter nbextension enable echarts/main +``` + +然后,让我们检查以下是否已经装上了。请先运行 Jupyter-notebook,再打开这个链接:http://localhost:8889/nbextensions/echarts/nanao.js。 +如果能下载到,那就祝贺你,成功了。否则,请检查你的步骤。 + +![customize-map-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/customize-map-2.png) + +## 如何把手动加的地图变成自动的 + +如果用户期望 pyecharts 支持自己的地图,请发请求然后再发来改动。 \ No newline at end of file diff --git a/example.md b/example.md new file mode 100644 index 000000000..d0c20dddd --- /dev/null +++ b/example.md @@ -0,0 +1,208 @@ +# More Example + +用极坐标系画出一个爱心 +```python +import math +from pyecharts import Polar + +data = [] +for i in range(101): + theta = i / 100 * 360 + r = 5 * (1 + math.sin(theta / 180 * math.pi)) + data.append([r, theta]) +hour = [i for i in range(1, 25)] +polar = Polar("极坐标系示例", width=1200, height=600) +polar.add("Love", data, angle_data=hour, boundary_gap=False,start_angle=0) +polar.render() +``` +![example-0](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-0.png) + + +用极坐标系画出一朵小花 +```python +import math +from pyecharts import Polar + +data = [] +for i in range(361): + t = i / 180 * math.pi + r = math.sin(2 * t) * math.cos(2 * t) + data.append([r, i]) +polar = Polar("极坐标系示例", width=1200, height=600) +polar.add("Flower", data, start_angle=0, symbol=None, axis_range=[0, None]) +polar.render() +``` +![example-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-1.png) + + +还可以给小花涂上颜色 +```python +import math +from pyecharts import Polar + +data = [] +for i in range(361): + t = i / 180 * math.pi + r = math.sin(2 * t) * math.cos(2 * t) + data.append([r, i]) +polar = Polar("极坐标系示例", width=1200, height=600) +polar.add("Color-Flower", data, start_angle=0, symbol=None, axis_range=[0, None], + area_color="#f71f24", area_opacity=0.6) +polar.render() +``` +![example-1-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-1-1.png) + + +用散点图画出一个爱心 +```python +from pyecharts import Scatter + +scatter = Scatter("散点图示例", width=800, height=480) +v1 ,v2 = scatter.draw("../images/love.png") +scatter.add("Love", v1, v2) +scatter.render() +``` +![example-2](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-2.png) + + +用散点图画出一个火辣的 Bra +```python +from pyecharts import Scatter + +scatter = Scatter("散点图示例", width=1000, height=480) +v1 ,v2 = scatter.draw("../images/cup.png") +scatter.add("Cup", v1, v2) +scatter.render() +``` +![example-3](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-3.png) + + +用散点图画出一个性感的 Bra +```python +from pyecharts import Scatter + +scatter = Scatter("散点图示例", width=1000, height=480) +v1 ,v2 = scatter.draw("../images/cup.png") +scatter.add("Cup", v1, v2, label_color=["#000"]) +scatter.render() +``` +![example-4](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-4.png) + + +某地最低温和最高气温折线图 +```python +from pyecharts import Line + +attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日', ] +line = Line("折线图示例") +line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) +line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], + mark_line=["average"], yaxis_formatter="°C") +line.show_config() +line.render() +``` +![example-5](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-5.gif) + + +饼图嵌套 +```python +from pyecharts import Pie + +pie = Pie("饼图示例", title_pos='center', width=1000, height=600) +pie.add("", ['A', 'B', 'C', 'D', 'E', 'F'], [335, 321, 234, 135, 251, 148], radius=[40, 55],is_label_show=True) +pie.add("", ['H', 'I', 'J'], [335, 679, 204], radius=[0, 30], legend_orient='vertical', legend_pos='left') +pie.render() +``` +![example-6](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-6.png) + + +饼图再嵌套 +```python +import random +from pyecharts import Pie + +attr = ['A', 'B', 'C', 'D', 'E', 'F'] +pie = Pie("饼图示例", width=1000, height=600) +pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[25, 50],is_random=True) +pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[25, 50],rosetype='area') +pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[65, 50],is_random=True) +pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[65, 50],rosetype='radius') +pie.render() +``` +![example-7](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-7.gif) + + +某地的降水量和蒸发量柱状图 +```python +from pyecharts import Bar + +attr = ["{}月".format(i) for i in range(1, 13)] +v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] +v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] +bar = Bar("柱状图示例") +bar.add("蒸发量", attr, v1, mark_line=["average"], mark_point=["max", "min"]) +bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"]) +bar.render() +``` +![example-8](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-8.png) + + +加个 datazoom +```python +bar = Bar("柱状图示例") +bar.add("蒸发量", attr, v1, mark_line=["average"], mark_point=["max", "min"]) +bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"], + is_datazoom_show=True, datazoom_range=[50, 80]) +bar.render() +``` +![example-8-1](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-8-1.gif) + + +各类电影中"好片"所占的比例 +```python +from pyecharts import Pie + +pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center') +pie.add("", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None, ) +pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left') +pie.add("", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None) +pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24], + label_pos='center', is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center") +pie.render() +``` +![example-9](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-9.png) + + +用极坐标系画出一个蜗牛壳 +```python +import math +from pyecharts import Polar + +data = [] +for i in range(5): + for j in range(101): + theta = j / 100 * 360 + alpha = i * 360 + theta + r = math.pow(math.e, 0.003 * alpha) + data.append([r, theta]) +polar = Polar("极坐标系示例") +polar.add("", data, symbol_size=0, symbol='circle', start_angle=-25, is_radiusaxis_show=False, + area_color="#f3c5b3", area_opacity=0.5, is_angleaxis_show=False) +polar.render() +``` +![example-10](https://github.com/chenjiandongx/pyecharts/blob/master/images/example-10.png) \ No newline at end of file diff --git a/images-en/wordcloud-0.png b/images-en/wordcloud-0.png new file mode 100644 index 000000000..f5c2bfb86 Binary files /dev/null and b/images-en/wordcloud-0.png differ diff --git a/images-en/wordcloud-1.png b/images-en/wordcloud-1.png new file mode 100644 index 000000000..b9946e2e1 Binary files /dev/null and b/images-en/wordcloud-1.png differ diff --git a/images/bar-0.gif b/images/bar-0.gif new file mode 100644 index 000000000..ffcfdb2b8 Binary files /dev/null and b/images/bar-0.gif differ diff --git a/images/bar-1.gif b/images/bar-1.gif new file mode 100644 index 000000000..a5f8f66ba Binary files /dev/null and b/images/bar-1.gif differ diff --git a/images/bar-2.png b/images/bar-2.png new file mode 100644 index 000000000..b5718bcd0 Binary files /dev/null and b/images/bar-2.png differ diff --git a/images/bar-4.gif b/images/bar-4.gif new file mode 100644 index 000000000..d468a126c Binary files /dev/null and b/images/bar-4.gif differ diff --git a/images/bar-5.gif b/images/bar-5.gif new file mode 100644 index 000000000..8e4e0491c Binary files /dev/null and b/images/bar-5.gif differ diff --git a/images/bar-6.png b/images/bar-6.png new file mode 100644 index 000000000..3ca4f96d0 Binary files /dev/null and b/images/bar-6.png differ diff --git a/images/bar-7.png b/images/bar-7.png new file mode 100644 index 000000000..1ac131b8a Binary files /dev/null and b/images/bar-7.png differ diff --git a/images/bar-8.gif b/images/bar-8.gif new file mode 100644 index 000000000..7aaf98275 Binary files /dev/null and b/images/bar-8.gif differ diff --git a/images/bar3D-0.gif b/images/bar3D-0.gif new file mode 100644 index 000000000..11c7a8422 Binary files /dev/null and b/images/bar3D-0.gif differ diff --git a/images/bar3D-1.gif b/images/bar3D-1.gif new file mode 100644 index 000000000..ef5c92323 Binary files /dev/null and b/images/bar3D-1.gif differ diff --git a/images/bar3D-2.gif b/images/bar3D-2.gif new file mode 100644 index 000000000..1bd26302c Binary files /dev/null and b/images/bar3D-2.gif differ diff --git a/images/bar3D-3.gif b/images/bar3D-3.gif new file mode 100644 index 000000000..1e9f7fbfc Binary files /dev/null and b/images/bar3D-3.gif differ diff --git a/images/boxplot-0.png b/images/boxplot-0.png new file mode 100644 index 000000000..5ffd9b790 Binary files /dev/null and b/images/boxplot-0.png differ diff --git a/images/boxplot-1.png b/images/boxplot-1.png new file mode 100644 index 000000000..99bc091c4 Binary files /dev/null and b/images/boxplot-1.png differ diff --git a/images/cup.png b/images/cup.png new file mode 100644 index 000000000..c25cf32d3 Binary files /dev/null and b/images/cup.png differ diff --git a/images/customize-map-0.png b/images/customize-map-0.png new file mode 100644 index 000000000..2bb906572 Binary files /dev/null and b/images/customize-map-0.png differ diff --git a/images/customize-map-1.png b/images/customize-map-1.png new file mode 100644 index 000000000..a09e89d8e Binary files /dev/null and b/images/customize-map-1.png differ diff --git a/images/customize-map-2.png b/images/customize-map-2.png new file mode 100644 index 000000000..c50637b61 Binary files /dev/null and b/images/customize-map-2.png differ diff --git a/images/django-0.gif b/images/django-0.gif new file mode 100644 index 000000000..2baca159c Binary files /dev/null and b/images/django-0.gif differ diff --git a/images/effectscatter-0.gif b/images/effectscatter-0.gif new file mode 100644 index 000000000..1f9d12096 Binary files /dev/null and b/images/effectscatter-0.gif differ diff --git a/images/effectscatter-1.gif b/images/effectscatter-1.gif new file mode 100644 index 000000000..5079116b6 Binary files /dev/null and b/images/effectscatter-1.gif differ diff --git a/images/example-0.png b/images/example-0.png new file mode 100644 index 000000000..235e42839 Binary files /dev/null and b/images/example-0.png differ diff --git a/images/example-1-1.png b/images/example-1-1.png new file mode 100644 index 000000000..ac58e4571 Binary files /dev/null and b/images/example-1-1.png differ diff --git a/images/example-1.png b/images/example-1.png new file mode 100644 index 000000000..3c750fd01 Binary files /dev/null and b/images/example-1.png differ diff --git a/images/example-10.png b/images/example-10.png new file mode 100644 index 000000000..4dc3dad9c Binary files /dev/null and b/images/example-10.png differ diff --git a/images/example-2.png b/images/example-2.png new file mode 100644 index 000000000..e27a38f43 Binary files /dev/null and b/images/example-2.png differ diff --git a/images/example-3.png b/images/example-3.png new file mode 100644 index 000000000..4b11db584 Binary files /dev/null and b/images/example-3.png differ diff --git a/images/example-4.png b/images/example-4.png new file mode 100644 index 000000000..3d532ed61 Binary files /dev/null and b/images/example-4.png differ diff --git a/images/example-5.gif b/images/example-5.gif new file mode 100644 index 000000000..7da8a73ec Binary files /dev/null and b/images/example-5.gif differ diff --git a/images/example-6.png b/images/example-6.png new file mode 100644 index 000000000..fdc679272 Binary files /dev/null and b/images/example-6.png differ diff --git a/images/example-7.gif b/images/example-7.gif new file mode 100644 index 000000000..5a657342b Binary files /dev/null and b/images/example-7.gif differ diff --git a/images/example-8-1.gif b/images/example-8-1.gif new file mode 100644 index 000000000..7128e6586 Binary files /dev/null and b/images/example-8-1.gif differ diff --git a/images/example-8.png b/images/example-8.png new file mode 100644 index 000000000..b5ff307e0 Binary files /dev/null and b/images/example-8.png differ diff --git a/images/example-9.png b/images/example-9.png new file mode 100644 index 000000000..004f1f8f9 Binary files /dev/null and b/images/example-9.png differ diff --git a/images/flask-0.gif b/images/flask-0.gif new file mode 100644 index 000000000..f1e87790a Binary files /dev/null and b/images/flask-0.gif differ diff --git a/images/funnel-0.gif b/images/funnel-0.gif new file mode 100644 index 000000000..c3eaa2889 Binary files /dev/null and b/images/funnel-0.gif differ diff --git a/images/funnel-1.png b/images/funnel-1.png new file mode 100644 index 000000000..5852de4ce Binary files /dev/null and b/images/funnel-1.png differ diff --git a/images/gauge-0.png b/images/gauge-0.png new file mode 100644 index 000000000..354bfd821 Binary files /dev/null and b/images/gauge-0.png differ diff --git a/images/gauge-1.png b/images/gauge-1.png new file mode 100644 index 000000000..2fdf552d9 Binary files /dev/null and b/images/gauge-1.png differ diff --git a/images/geo-0-0.gif b/images/geo-0-0.gif new file mode 100644 index 000000000..cecc783f4 Binary files /dev/null and b/images/geo-0-0.gif differ diff --git a/images/geo-0-1.gif b/images/geo-0-1.gif new file mode 100644 index 000000000..c85ec9ee0 Binary files /dev/null and b/images/geo-0-1.gif differ diff --git a/images/geo-0.gif b/images/geo-0.gif new file mode 100644 index 000000000..fb1d8210c Binary files /dev/null and b/images/geo-0.gif differ diff --git a/images/geo-1.gif b/images/geo-1.gif new file mode 100644 index 000000000..de01ff003 Binary files /dev/null and b/images/geo-1.gif differ diff --git a/images/geo-2.gif b/images/geo-2.gif new file mode 100644 index 000000000..3468b23c5 Binary files /dev/null and b/images/geo-2.gif differ diff --git a/images/graph-0.png b/images/graph-0.png new file mode 100644 index 000000000..3f941c262 Binary files /dev/null and b/images/graph-0.png differ diff --git a/images/graph-1.png b/images/graph-1.png new file mode 100644 index 000000000..d9fc12c55 Binary files /dev/null and b/images/graph-1.png differ diff --git a/images/graph-2.gif b/images/graph-2.gif new file mode 100644 index 000000000..206d743a7 Binary files /dev/null and b/images/graph-2.gif differ diff --git a/images/grid-0.gif b/images/grid-0.gif new file mode 100644 index 000000000..ddbe31d4b Binary files /dev/null and b/images/grid-0.gif differ diff --git a/images/grid-1.gif b/images/grid-1.gif new file mode 100644 index 000000000..b0d461590 Binary files /dev/null and b/images/grid-1.gif differ diff --git a/images/grid-2.gif b/images/grid-2.gif new file mode 100644 index 000000000..72baabdb1 Binary files /dev/null and b/images/grid-2.gif differ diff --git a/images/grid-3.png b/images/grid-3.png new file mode 100644 index 000000000..eb0326538 Binary files /dev/null and b/images/grid-3.png differ diff --git a/images/grid-4.png b/images/grid-4.png new file mode 100644 index 000000000..d49969758 Binary files /dev/null and b/images/grid-4.png differ diff --git a/images/grid-5.gif b/images/grid-5.gif new file mode 100644 index 000000000..81426dd4f Binary files /dev/null and b/images/grid-5.gif differ diff --git a/images/grid-6.gif b/images/grid-6.gif new file mode 100644 index 000000000..3b6832ba8 Binary files /dev/null and b/images/grid-6.gif differ diff --git a/images/grid-7.gif b/images/grid-7.gif new file mode 100644 index 000000000..321944a71 Binary files /dev/null and b/images/grid-7.gif differ diff --git a/images/grid-8.png b/images/grid-8.png new file mode 100644 index 000000000..2b38f356e Binary files /dev/null and b/images/grid-8.png differ diff --git a/images/guide-0.png b/images/guide-0.png new file mode 100644 index 000000000..4535c8538 Binary files /dev/null and b/images/guide-0.png differ diff --git a/images/heatmap-0.gif b/images/heatmap-0.gif new file mode 100644 index 000000000..24e33d75f Binary files /dev/null and b/images/heatmap-0.gif differ diff --git a/images/heatmap-1.gif b/images/heatmap-1.gif new file mode 100644 index 000000000..e0472d3d5 Binary files /dev/null and b/images/heatmap-1.gif differ diff --git a/images/kline-0.png b/images/kline-0.png new file mode 100644 index 000000000..84b8fea1e Binary files /dev/null and b/images/kline-0.png differ diff --git a/images/kline-1.gif b/images/kline-1.gif new file mode 100644 index 000000000..0f7a2e6f9 Binary files /dev/null and b/images/kline-1.gif differ diff --git a/images/kline-2.gif b/images/kline-2.gif new file mode 100644 index 000000000..12d2fd432 Binary files /dev/null and b/images/kline-2.gif differ diff --git a/images/kline-3.png b/images/kline-3.png new file mode 100644 index 000000000..f73bf5927 Binary files /dev/null and b/images/kline-3.png differ diff --git a/images/line-0-1.png b/images/line-0-1.png new file mode 100644 index 000000000..d156037f2 Binary files /dev/null and b/images/line-0-1.png differ diff --git a/images/line-0-2.gif b/images/line-0-2.gif new file mode 100644 index 000000000..6f91ebb14 Binary files /dev/null and b/images/line-0-2.gif differ diff --git a/images/line-0.gif b/images/line-0.gif new file mode 100644 index 000000000..92294b411 Binary files /dev/null and b/images/line-0.gif differ diff --git a/images/line-1.gif b/images/line-1.gif new file mode 100644 index 000000000..45665f97a Binary files /dev/null and b/images/line-1.gif differ diff --git a/images/line-2.png b/images/line-2.png new file mode 100644 index 000000000..ee164d660 Binary files /dev/null and b/images/line-2.png differ diff --git a/images/line-3-1.png b/images/line-3-1.png new file mode 100644 index 000000000..dad459866 Binary files /dev/null and b/images/line-3-1.png differ diff --git a/images/line-3.png b/images/line-3.png new file mode 100644 index 000000000..92a9c9632 Binary files /dev/null and b/images/line-3.png differ diff --git a/images/line3D-0.gif b/images/line3D-0.gif new file mode 100644 index 000000000..f60becda5 Binary files /dev/null and b/images/line3D-0.gif differ diff --git a/images/line3D-1.gif b/images/line3D-1.gif new file mode 100644 index 000000000..d38287701 Binary files /dev/null and b/images/line3D-1.gif differ diff --git a/images/liquid-0.gif b/images/liquid-0.gif new file mode 100644 index 000000000..b1f3dbcb2 Binary files /dev/null and b/images/liquid-0.gif differ diff --git a/images/liquid-1.gif b/images/liquid-1.gif new file mode 100644 index 000000000..cda9bebfa Binary files /dev/null and b/images/liquid-1.gif differ diff --git a/images/liquid-2.png b/images/liquid-2.png new file mode 100644 index 000000000..b7a8c8037 Binary files /dev/null and b/images/liquid-2.png differ diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 000000000..2d4fd1807 Binary files /dev/null and b/images/logo.png differ diff --git a/images/love.png b/images/love.png new file mode 100644 index 000000000..ac8b7fa55 Binary files /dev/null and b/images/love.png differ diff --git a/images/map-0-1.png b/images/map-0-1.png new file mode 100644 index 000000000..2151839c9 Binary files /dev/null and b/images/map-0-1.png differ diff --git a/images/map-0.gif b/images/map-0.gif new file mode 100644 index 000000000..75c2c0fc1 Binary files /dev/null and b/images/map-0.gif differ diff --git a/images/map-1.gif b/images/map-1.gif new file mode 100644 index 000000000..9be180357 Binary files /dev/null and b/images/map-1.gif differ diff --git a/images/map-2.gif b/images/map-2.gif new file mode 100644 index 000000000..d2e8a39f0 Binary files /dev/null and b/images/map-2.gif differ diff --git a/images/map-3.gif b/images/map-3.gif new file mode 100644 index 000000000..99023279e Binary files /dev/null and b/images/map-3.gif differ diff --git a/images/multiple-charts-0.gif b/images/multiple-charts-0.gif new file mode 100644 index 000000000..319e570eb Binary files /dev/null and b/images/multiple-charts-0.gif differ diff --git a/images/multiple-charts-1.gif b/images/multiple-charts-1.gif new file mode 100644 index 000000000..e441d4ba7 Binary files /dev/null and b/images/multiple-charts-1.gif differ diff --git a/images/notebook-0.gif b/images/notebook-0.gif new file mode 100644 index 000000000..ec59feb12 Binary files /dev/null and b/images/notebook-0.gif differ diff --git a/images/notebook-1.gif b/images/notebook-1.gif new file mode 100644 index 000000000..ef6a4c193 Binary files /dev/null and b/images/notebook-1.gif differ diff --git a/images/notebook-2.gif b/images/notebook-2.gif new file mode 100644 index 000000000..0a5d4c1f4 Binary files /dev/null and b/images/notebook-2.gif differ diff --git a/images/overlap-0.gif b/images/overlap-0.gif new file mode 100644 index 000000000..59d43a81d Binary files /dev/null and b/images/overlap-0.gif differ diff --git a/images/overlap-1.gif b/images/overlap-1.gif new file mode 100644 index 000000000..49358aebd Binary files /dev/null and b/images/overlap-1.gif differ diff --git a/images/overlap-2.png b/images/overlap-2.png new file mode 100644 index 000000000..efbe79c79 Binary files /dev/null and b/images/overlap-2.png differ diff --git a/images/overlap-3.gif b/images/overlap-3.gif new file mode 100644 index 000000000..5d860c3df Binary files /dev/null and b/images/overlap-3.gif differ diff --git a/images/pandas-numpy.png b/images/pandas-numpy.png new file mode 100644 index 000000000..8d909208a Binary files /dev/null and b/images/pandas-numpy.png differ diff --git a/images/parallel-0.png b/images/parallel-0.png new file mode 100644 index 000000000..9d2a7f649 Binary files /dev/null and b/images/parallel-0.png differ diff --git a/images/parallel-1.png b/images/parallel-1.png new file mode 100644 index 000000000..37337168b Binary files /dev/null and b/images/parallel-1.png differ diff --git a/images/pie-0.gif b/images/pie-0.gif new file mode 100644 index 000000000..b2faafbcc Binary files /dev/null and b/images/pie-0.gif differ diff --git a/images/pie-1.png b/images/pie-1.png new file mode 100644 index 000000000..e17dc2430 Binary files /dev/null and b/images/pie-1.png differ diff --git a/images/pie-2.png b/images/pie-2.png new file mode 100644 index 000000000..ddb6c6fbb Binary files /dev/null and b/images/pie-2.png differ diff --git a/images/polar-0.png b/images/polar-0.png new file mode 100644 index 000000000..5bc3fbe73 Binary files /dev/null and b/images/polar-0.png differ diff --git a/images/polar-1.png b/images/polar-1.png new file mode 100644 index 000000000..f20d1b4e2 Binary files /dev/null and b/images/polar-1.png differ diff --git a/images/polar-2.gif b/images/polar-2.gif new file mode 100644 index 000000000..8c9b4d24a Binary files /dev/null and b/images/polar-2.gif differ diff --git a/images/polar-3.gif b/images/polar-3.gif new file mode 100644 index 000000000..fd21f5e82 Binary files /dev/null and b/images/polar-3.gif differ diff --git a/images/polar-4.png b/images/polar-4.png new file mode 100644 index 000000000..c748ad8c2 Binary files /dev/null and b/images/polar-4.png differ diff --git a/images/pyecharts-0.png b/images/pyecharts-0.png new file mode 100644 index 000000000..f05871583 Binary files /dev/null and b/images/pyecharts-0.png differ diff --git a/images/pyecharts-1.png b/images/pyecharts-1.png new file mode 100644 index 000000000..6200194fd Binary files /dev/null and b/images/pyecharts-1.png differ diff --git a/images/radar-0.gif b/images/radar-0.gif new file mode 100644 index 000000000..545af8165 Binary files /dev/null and b/images/radar-0.gif differ diff --git a/images/radar-1.gif b/images/radar-1.gif new file mode 100644 index 000000000..5e2990706 Binary files /dev/null and b/images/radar-1.gif differ diff --git a/images/radar-2.gif b/images/radar-2.gif new file mode 100644 index 000000000..876208a09 Binary files /dev/null and b/images/radar-2.gif differ diff --git a/images/sankey-0.png b/images/sankey-0.png new file mode 100644 index 000000000..5b7a935f5 Binary files /dev/null and b/images/sankey-0.png differ diff --git a/images/sankey-1.png b/images/sankey-1.png new file mode 100644 index 000000000..1b1def3b8 Binary files /dev/null and b/images/sankey-1.png differ diff --git a/images/scatter-0-1.gif b/images/scatter-0-1.gif new file mode 100644 index 000000000..c85950726 Binary files /dev/null and b/images/scatter-0-1.gif differ diff --git a/images/scatter-0-2.gif b/images/scatter-0-2.gif new file mode 100644 index 000000000..19ce5e889 Binary files /dev/null and b/images/scatter-0-2.gif differ diff --git a/images/scatter-0-3.gif b/images/scatter-0-3.gif new file mode 100644 index 000000000..5f81c0282 Binary files /dev/null and b/images/scatter-0-3.gif differ diff --git a/images/scatter-0-3.png b/images/scatter-0-3.png new file mode 100644 index 000000000..8be898406 Binary files /dev/null and b/images/scatter-0-3.png differ diff --git a/images/scatter-0.png b/images/scatter-0.png new file mode 100644 index 000000000..5f2d11109 Binary files /dev/null and b/images/scatter-0.png differ diff --git a/images/scatter3D-0.gif b/images/scatter3D-0.gif new file mode 100644 index 000000000..7fbd9f6da Binary files /dev/null and b/images/scatter3D-0.gif differ diff --git a/images/themeriver-0.gif b/images/themeriver-0.gif new file mode 100644 index 000000000..09a0e442f Binary files /dev/null and b/images/themeriver-0.gif differ diff --git a/images/timeline-0.gif b/images/timeline-0.gif new file mode 100644 index 000000000..5ae79b345 Binary files /dev/null and b/images/timeline-0.gif differ diff --git a/images/timeline-1.gif b/images/timeline-1.gif new file mode 100644 index 000000000..33256ba1c Binary files /dev/null and b/images/timeline-1.gif differ diff --git a/images/timeline-2.gif b/images/timeline-2.gif new file mode 100644 index 000000000..798e2ca9b Binary files /dev/null and b/images/timeline-2.gif differ diff --git a/images/treemap-0.png b/images/treemap-0.png new file mode 100644 index 000000000..f9700720e Binary files /dev/null and b/images/treemap-0.png differ diff --git a/images/treemap-1.gif b/images/treemap-1.gif new file mode 100644 index 000000000..2abef528e Binary files /dev/null and b/images/treemap-1.gif differ diff --git a/images/treemap-2.gif b/images/treemap-2.gif new file mode 100644 index 000000000..2dec38c50 Binary files /dev/null and b/images/treemap-2.gif differ diff --git a/images/usage-0.gif b/images/usage-0.gif new file mode 100644 index 000000000..df7cfc988 Binary files /dev/null and b/images/usage-0.gif differ diff --git a/images/usage-1.png b/images/usage-1.png new file mode 100644 index 000000000..ecad46871 Binary files /dev/null and b/images/usage-1.png differ diff --git a/images/wordcloud-0.png b/images/wordcloud-0.png new file mode 100644 index 000000000..f5c2bfb86 Binary files /dev/null and b/images/wordcloud-0.png differ diff --git a/images/wordcloud-1.png b/images/wordcloud-1.png new file mode 100644 index 000000000..b9946e2e1 Binary files /dev/null and b/images/wordcloud-1.png differ diff --git a/json/energy.json b/json/energy.json new file mode 100644 index 000000000..c745f86ec --- /dev/null +++ b/json/energy.json @@ -0,0 +1,120 @@ +{"nodes":[ +{"name":"Agricultural 'waste'"}, +{"name":"Bio-conversion"}, +{"name":"Liquid"}, +{"name":"Losses"}, +{"name":"Solid"}, +{"name":"Gas"}, +{"name":"Biofuel imports"}, +{"name":"Biomass imports"}, +{"name":"Coal imports"}, +{"name":"Coal"}, +{"name":"Coal reserves"}, +{"name":"District heating"}, +{"name":"Industry"}, +{"name":"Heating and cooling - commercial"}, +{"name":"Heating and cooling - homes"}, +{"name":"Electricity grid"}, +{"name":"Over generation / exports"}, +{"name":"H2 conversion"}, +{"name":"Road transport"}, +{"name":"Agriculture"}, +{"name":"Rail transport"}, +{"name":"Lighting & appliances - commercial"}, +{"name":"Lighting & appliances - homes"}, +{"name":"Gas imports"}, +{"name":"Ngas"}, +{"name":"Gas reserves"}, +{"name":"Thermal generation"}, +{"name":"Geothermal"}, +{"name":"H2"}, +{"name":"Hydro"}, +{"name":"International shipping"}, +{"name":"Domestic aviation"}, +{"name":"International aviation"}, +{"name":"National navigation"}, +{"name":"Marine algae"}, +{"name":"Nuclear"}, +{"name":"Oil imports"}, +{"name":"Oil"}, +{"name":"Oil reserves"}, +{"name":"Other waste"}, +{"name":"Pumped heat"}, +{"name":"Solar PV"}, +{"name":"Solar Thermal"}, +{"name":"Solar"}, +{"name":"Tidal"}, +{"name":"UK land based bioenergy"}, +{"name":"Wave"}, +{"name":"Wind"} +], +"links":[ +{"source": "Agricultural 'waste'", "target": "Bio-conversion", "value": 124.729}, +{"source": "Bio-conversion", "target": "Liquid", "value": 0.597}, +{"source": "Bio-conversion", "target": "Losses", "value": 26.862}, +{"source": "Bio-conversion", "target": "Solid", "value": 280.322}, +{"source": "Bio-conversion", "target": "Gas", "value": 81.144}, +{"source": "Biofuel imports", "target": "Liquid", "value": 35}, +{"source": "Biomass imports", "target": "Solid", "value": 35}, +{"source": "Coal imports", "target": "Coal", "value": 11.606}, +{"source": "Coal reserves","target": "Coal", "value": 63.965}, +{"source": "Coal", "target": "Solid", "value": 75.571}, +{"source": "District heating", "target": "Industry", "value": 10.639}, +{"source": "District heating", "target": "Heating and cooling - commercial", "value": 22.505}, +{"source": "District heating", "target": "Heating and cooling - homes", "value": 46.184}, +{"source": "Electricity grid", "target": "Over generation / exports", "value": 104.453}, +{"source": "Electricity grid", "target": "Heating and cooling - homes", "value": 113.726}, +{"source": "Electricity grid", "target": "H2 conversion", "value": 27.14}, +{"source": "Electricity grid", "target": "Industry", "value": 342.165}, +{"source": "Electricity grid", "target": "Road transport", "value": 37.797}, +{"source": "Electricity grid", "target": "Agriculture", "value": 4.412}, +{"source": "Electricity grid", "target": "Heating and cooling - commercial", "value": 40.858}, +{"source": "Electricity grid", "target": "Losses", "value": 56.691}, +{"source": "Electricity grid", "target": "Rail transport", "value": 7.863}, +{"source": "Electricity grid", "target": "Lighting & appliances - commercial", "value": 90.008}, +{"source": "Electricity grid", "target": "Lighting & appliances - homes", "value": 93.494}, +{"source": "Gas imports", "target": "Ngas", "value": 40.719}, +{"source": "Gas reserves", "target": "Ngas", "value": 82.233}, +{"source": "Gas", "target": "Heating and cooling - commercial", "value": 0.129}, +{"source": "Gas", "target": "Losses", "value": 1.401}, +{"source": "Gas", "target": "Thermal generation", "value": 151.891}, +{"source": "Gas", "target": "Agriculture", "value": 2.096}, +{"source": "Gas", "target": "Industry", "value": 48.58}, +{"source": "Geothermal", "target": "Electricity grid", "value": 7.013}, +{"source": "H2 conversion", "target": "H2", "value": 20.897}, +{"source": "H2 conversion", "target": "Losses", "value": 6.242}, +{"source": "H2", "target": "Road transport", "value": 20.897}, +{"source": "Hydro", "target": "Electricity grid", "value": 6.995}, +{"source": "Liquid", "target": "Industry", "value": 121.066}, +{"source": "Liquid", "target": "International shipping", "value": 128.69}, +{"source": "Liquid", "target": "Road transport", "value": 135.835}, +{"source": "Liquid", "target": "Domestic aviation", "value": 14.458}, +{"source": "Liquid", "target": "International aviation", "value": 206.267}, +{"source": "Liquid", "target": "Agriculture", "value": 3.64}, +{"source": "Liquid", "target": "National navigation", "value": 33.218}, +{"source": "Liquid", "target": "Rail transport", "value": 4.413}, +{"source": "Marine algae", "target": "Bio-conversion", "value": 4.375}, +{"source": "Ngas", "target": "Gas", "value": 122.952}, +{"source": "Nuclear", "target": "Thermal generation", "value": 839.978}, +{"source": "Oil imports", "target": "Oil", "value": 504.287}, +{"source": "Oil reserves", "target": "Oil", "value": 107.703}, +{"source": "Oil", "target": "Liquid", "value": 611.99}, +{"source": "Other waste", "target": "Solid", "value": 56.587}, +{"source": "Other waste", "target": "Bio-conversion", "value": 77.81}, +{"source": "Pumped heat", "target": "Heating and cooling - homes", "value": 193.026}, +{"source": "Pumped heat", "target": "Heating and cooling - commercial", "value": 70.672}, +{"source": "Solar PV", "target": "Electricity grid", "value": 59.901}, +{"source": "Solar Thermal", "target": "Heating and cooling - homes", "value": 19.263}, +{"source": "Solar", "target": "Solar Thermal", "value": 19.263}, +{"source": "Solar", "target": "Solar PV", "value": 59.901}, +{"source": "Solid", "target": "Agriculture", "value": 0.882}, +{"source": "Solid", "target": "Thermal generation", "value": 400.12}, +{"source": "Solid", "target": "Industry", "value": 46.477}, +{"source": "Thermal generation", "target": "Electricity grid", "value": 525.531}, +{"source": "Thermal generation", "target": "Losses", "value": 787.129}, +{"source": "Thermal generation", "target": "District heating", "value": 79.329}, +{"source": "Tidal", "target": "Electricity grid", "value": 9.452}, +{"source": "UK land based bioenergy", "target": "Bio-conversion", "value": 182.01}, +{"source": "Wave", "target": "Electricity grid", "value": 19.013}, +{"source": "Wind", "target": "Electricity grid", "value": 289.366} +]} diff --git a/json/treemap.json b/json/treemap.json new file mode 100644 index 000000000..18cd22a1f --- /dev/null +++ b/json/treemap.json @@ -0,0 +1,21035 @@ +[ + { + "value": 40, + "name": "Accessibility", + "path": "Accessibility" + }, + { + "value": 180, + "name": "Accounts", + "path": "Accounts", + "children": [ + { + "value": 76, + "name": "Access", + "path": "Accounts/Access", + "children": [ + { + "value": 12, + "name": "DefaultAccessPlugin.bundle", + "path": "Accounts/Access/DefaultAccessPlugin.bundle" + }, + { + "value": 28, + "name": "FacebookAccessPlugin.bundle", + "path": "Accounts/Access/FacebookAccessPlugin.bundle" + }, + { + "value": 20, + "name": "LinkedInAccessPlugin.bundle", + "path": "Accounts/Access/LinkedInAccessPlugin.bundle" + }, + { + "value": 16, + "name": "TencentWeiboAccessPlugin.bundle", + "path": "Accounts/Access/TencentWeiboAccessPlugin.bundle" + } + ] + }, + { + "value": 92, + "name": "Authentication", + "path": "Accounts/Authentication", + "children": [ + { + "value": 24, + "name": "FacebookAuthenticationPlugin.bundle", + "path": "Accounts/Authentication/FacebookAuthenticationPlugin.bundle" + }, + { + "value": 16, + "name": "LinkedInAuthenticationPlugin.bundle", + "path": "Accounts/Authentication/LinkedInAuthenticationPlugin.bundle" + }, + { + "value": 20, + "name": "TencentWeiboAuthenticationPlugin.bundle", + "path": "Accounts/Authentication/TencentWeiboAuthenticationPlugin.bundle" + }, + { + "value": 16, + "name": "TwitterAuthenticationPlugin.bundle", + "path": "Accounts/Authentication/TwitterAuthenticationPlugin.bundle" + }, + { + "value": 16, + "name": "WeiboAuthenticationPlugin.bundle", + "path": "Accounts/Authentication/WeiboAuthenticationPlugin.bundle" + } + ] + }, + { + "value": 12, + "name": "Notification", + "path": "Accounts/Notification", + "children": [ + { + "value": 12, + "name": "SPAAccountsNotificationPlugin.bundle", + "path": "Accounts/Notification/SPAAccountsNotificationPlugin.bundle" + } + ] + } + ] + }, + { + "value": 1904, + "name": "AddressBook Plug-Ins", + "path": "AddressBook Plug-Ins", + "children": [ + { + "value": 744, + "name": "CardDAVPlugin.sourcebundle", + "path": "AddressBook Plug-Ins/CardDAVPlugin.sourcebundle", + "children": [ + { + "value": 744, + "name": "Contents", + "path": "AddressBook Plug-Ins/CardDAVPlugin.sourcebundle/Contents" + } + ] + }, + { + "value": 28, + "name": "DirectoryServices.sourcebundle", + "path": "AddressBook Plug-Ins/DirectoryServices.sourcebundle", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "AddressBook Plug-Ins/DirectoryServices.sourcebundle/Contents" + } + ] + }, + { + "value": 680, + "name": "Exchange.sourcebundle", + "path": "AddressBook Plug-Ins/Exchange.sourcebundle", + "children": [ + { + "value": 680, + "name": "Contents", + "path": "AddressBook Plug-Ins/Exchange.sourcebundle/Contents" + } + ] + }, + { + "value": 432, + "name": "LDAP.sourcebundle", + "path": "AddressBook Plug-Ins/LDAP.sourcebundle", + "children": [ + { + "value": 432, + "name": "Contents", + "path": "AddressBook Plug-Ins/LDAP.sourcebundle/Contents" + } + ] + }, + { + "value": 20, + "name": "LocalSource.sourcebundle", + "path": "AddressBook Plug-Ins/LocalSource.sourcebundle", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "AddressBook Plug-Ins/LocalSource.sourcebundle/Contents" + } + ] + } + ] + }, + { + "value": 36, + "name": "Assistant", + "path": "Assistant", + "children": [ + { + "value": 36, + "name": "Plugins", + "path": "Assistant/Plugins", + "children": [ + { + "value": 36, + "name": "AddressBook.assistantBundle", + "path": "Assistant/Plugins/AddressBook.assistantBundle" + }, + { + "value": 8, + "name": "GenericAddressHandler.addresshandler", + "path": "Recents/Plugins/GenericAddressHandler.addresshandler" + }, + { + "value": 12, + "name": "MapsRecents.addresshandler", + "path": "Recents/Plugins/MapsRecents.addresshandler" + } + ] + } + ] + }, + { + "value": 53228, + "name": "Automator", + "path": "Automator", + "children": [ + { + "value": 0, + "name": "ActivateFonts.action", + "path": "Automator/ActivateFonts.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/ActivateFonts.action/Contents" + } + ] + }, + { + "value": 12, + "name": "AddAttachments to Front Message.action", + "path": "Automator/AddAttachments to Front Message.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/AddAttachments to Front Message.action/Contents" + } + ] + }, + { + "value": 276, + "name": "AddColor Profile.action", + "path": "Automator/AddColor Profile.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/AddColor Profile.action/Contents" + } + ] + }, + { + "value": 32, + "name": "AddGrid to PDF Documents.action", + "path": "Automator/AddGrid to PDF Documents.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/AddGrid to PDF Documents.action/Contents" + } + ] + }, + { + "value": 12, + "name": "AddMovie to iDVD Menu.action", + "path": "Automator/AddMovie to iDVD Menu.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/AddMovie to iDVD Menu.action/Contents" + } + ] + }, + { + "value": 20, + "name": "AddPhotos to Album.action", + "path": "Automator/AddPhotos to Album.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/AddPhotos to Album.action/Contents" + } + ] + }, + { + "value": 12, + "name": "AddSongs to iPod.action", + "path": "Automator/AddSongs to iPod.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/AddSongs to iPod.action/Contents" + } + ] + }, + { + "value": 44, + "name": "AddSongs to Playlist.action", + "path": "Automator/AddSongs to Playlist.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/AddSongs to Playlist.action/Contents" + } + ] + }, + { + "value": 12, + "name": "AddThumbnail Icon to Image Files.action", + "path": "Automator/AddThumbnail Icon to Image Files.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/AddThumbnail Icon to Image Files.action/Contents" + } + ] + }, + { + "value": 268, + "name": "Addto Font Library.action", + "path": "Automator/Addto Font Library.action", + "children": [ + { + "value": 268, + "name": "Contents", + "path": "Automator/Addto Font Library.action/Contents" + } + ] + }, + { + "value": 0, + "name": "AddressBook.definition", + "path": "Automator/AddressBook.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/AddressBook.definition/Contents" + } + ] + }, + { + "value": 408, + "name": "AppleVersioning Tool.action", + "path": "Automator/AppleVersioning Tool.action", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Automator/AppleVersioning Tool.action/Contents" + } + ] + }, + { + "value": 568, + "name": "ApplyColorSync Profile to Images.action", + "path": "Automator/ApplyColorSync Profile to Images.action", + "children": [ + { + "value": 568, + "name": "Contents", + "path": "Automator/ApplyColorSync Profile to Images.action/Contents" + } + ] + }, + { + "value": 348, + "name": "ApplyQuartz Composition Filter to Image Files.action", + "path": "Automator/ApplyQuartz Composition Filter to Image Files.action", + "children": [ + { + "value": 348, + "name": "Contents", + "path": "Automator/ApplyQuartz Composition Filter to Image Files.action/Contents" + } + ] + }, + { + "value": 368, + "name": "ApplyQuartz Filter to PDF Documents.action", + "path": "Automator/ApplyQuartz Filter to PDF Documents.action", + "children": [ + { + "value": 368, + "name": "Contents", + "path": "Automator/ApplyQuartz Filter to PDF Documents.action/Contents" + } + ] + }, + { + "value": 96, + "name": "ApplySQL.action", + "path": "Automator/ApplySQL.action", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Automator/ApplySQL.action/Contents" + } + ] + }, + { + "value": 372, + "name": "Askfor Confirmation.action", + "path": "Automator/Askfor Confirmation.action", + "children": [ + { + "value": 372, + "name": "Contents", + "path": "Automator/Askfor Confirmation.action/Contents" + } + ] + }, + { + "value": 104, + "name": "Askfor Finder Items.action", + "path": "Automator/Askfor Finder Items.action", + "children": [ + { + "value": 104, + "name": "Contents", + "path": "Automator/Askfor Finder Items.action/Contents" + } + ] + }, + { + "value": 52, + "name": "Askfor Movies.action", + "path": "Automator/Askfor Movies.action", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Automator/Askfor Movies.action/Contents" + } + ] + }, + { + "value": 44, + "name": "Askfor Photos.action", + "path": "Automator/Askfor Photos.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/Askfor Photos.action/Contents" + } + ] + }, + { + "value": 16, + "name": "Askfor Servers.action", + "path": "Automator/Askfor Servers.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/Askfor Servers.action/Contents" + } + ] + }, + { + "value": 52, + "name": "Askfor Songs.action", + "path": "Automator/Askfor Songs.action", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Automator/Askfor Songs.action/Contents" + } + ] + }, + { + "value": 288, + "name": "Askfor Text.action", + "path": "Automator/Askfor Text.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/Askfor Text.action/Contents" + } + ] + }, + { + "value": 0, + "name": "Automator.definition", + "path": "Automator/Automator.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/Automator.definition/Contents" + } + ] + }, + { + "value": 12, + "name": "BrowseMovies.action", + "path": "Automator/BrowseMovies.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/BrowseMovies.action/Contents" + } + ] + }, + { + "value": 552, + "name": "BuildXcode Project.action", + "path": "Automator/BuildXcode Project.action", + "children": [ + { + "value": 552, + "name": "Contents", + "path": "Automator/BuildXcode Project.action/Contents" + } + ] + }, + { + "value": 296, + "name": "BurnA Disc.action", + "path": "Automator/BurnA Disc.action", + "children": [ + { + "value": 296, + "name": "Contents", + "path": "Automator/BurnA Disc.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ChangeCase of Song Names.action", + "path": "Automator/ChangeCase of Song Names.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ChangeCase of Song Names.action/Contents" + } + ] + }, + { + "value": 60, + "name": "ChangeType of Images.action", + "path": "Automator/ChangeType of Images.action", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Automator/ChangeType of Images.action/Contents" + } + ] + }, + { + "value": 24, + "name": "Choosefrom List.action", + "path": "Automator/Choosefrom List.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/Choosefrom List.action/Contents" + } + ] + }, + { + "value": 12, + "name": "CombineMail Messages.action", + "path": "Automator/CombineMail Messages.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/CombineMail Messages.action/Contents" + } + ] + }, + { + "value": 24, + "name": "CombinePDF Pages.action", + "path": "Automator/CombinePDF Pages.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/CombinePDF Pages.action/Contents" + } + ] + }, + { + "value": 12, + "name": "CombineText Files.action", + "path": "Automator/CombineText Files.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/CombineText Files.action/Contents" + } + ] + }, + { + "value": 24, + "name": "CompressImages in PDF Documents.action", + "path": "Automator/CompressImages in PDF Documents.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/CompressImages in PDF Documents.action/Contents" + } + ] + }, + { + "value": 8, + "name": "Connectto Servers.action", + "path": "Automator/Connectto Servers.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/Connectto Servers.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertAccount object to Mailbox object.caction", + "path": "Automator/ConvertAccount object to Mailbox object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertAccount object to Mailbox object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertAlbum object to Photo object.caction", + "path": "Automator/ConvertAlbum object to Photo object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertAlbum object to Photo object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertAlias object to Finder object.caction", + "path": "Automator/ConvertAlias object to Finder object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertAlias object to Finder object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertAlias object to iPhoto photo object.caction", + "path": "Automator/ConvertAlias object to iPhoto photo object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertAlias object to iPhoto photo object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertCalendar object to Event object.caction", + "path": "Automator/ConvertCalendar object to Event object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertCalendar object to Event object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertCalendar object to Reminders object.caction", + "path": "Automator/ConvertCalendar object to Reminders object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertCalendar object to Reminders object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertCocoa Data To Cocoa String.caction", + "path": "Automator/ConvertCocoa Data To Cocoa String.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertCocoa Data To Cocoa String.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertCocoa String To Cocoa Data.caction", + "path": "Automator/ConvertCocoa String To Cocoa Data.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertCocoa String To Cocoa Data.caction/Contents" + } + ] + }, + { + "value": 12, + "name": "ConvertCocoa URL to iTunes Track Object.caction", + "path": "Automator/ConvertCocoa URL to iTunes Track Object.caction", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/ConvertCocoa URL to iTunes Track Object.caction/Contents" + } + ] + }, + { + "value": 12, + "name": "ConvertCocoa URL to RSS Feed.caction", + "path": "Automator/ConvertCocoa URL to RSS Feed.caction", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/ConvertCocoa URL to RSS Feed.caction/Contents" + } + ] + }, + { + "value": 40, + "name": "ConvertCSV to SQL.action", + "path": "Automator/ConvertCSV to SQL.action", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Automator/ConvertCSV to SQL.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertFeeds to Articles.caction", + "path": "Automator/ConvertFeeds to Articles.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertFeeds to Articles.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertFinder object to Alias object.caction", + "path": "Automator/ConvertFinder object to Alias object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertFinder object to Alias object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertGroup object to Person object.caction", + "path": "Automator/ConvertGroup object to Person object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertGroup object to Person object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertiPhoto Album to Alias object.caction", + "path": "Automator/ConvertiPhoto Album to Alias object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertiPhoto Album to Alias object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertiTunes object to Alias object.caction", + "path": "Automator/ConvertiTunes object to Alias object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertiTunes object to Alias object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertiTunes Playlist object to Alias object.caction", + "path": "Automator/ConvertiTunes Playlist object to Alias object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertiTunes Playlist object to Alias object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertMailbox object to Message object.caction", + "path": "Automator/ConvertMailbox object to Message object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertMailbox object to Message object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertPhoto object to Alias object.caction", + "path": "Automator/ConvertPhoto object to Alias object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertPhoto object to Alias object.caction/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertPlaylist object to Song object.caction", + "path": "Automator/ConvertPlaylist object to Song object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertPlaylist object to Song object.caction/Contents" + } + ] + }, + { + "value": 2760, + "name": "ConvertQuartz Compositions to QuickTime Movies.action", + "path": "Automator/ConvertQuartz Compositions to QuickTime Movies.action", + "children": [ + { + "value": 2760, + "name": "Contents", + "path": "Automator/ConvertQuartz Compositions to QuickTime Movies.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ConvertSource object to Playlist object.caction", + "path": "Automator/ConvertSource object to Playlist object.caction", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ConvertSource object to Playlist object.caction/Contents" + } + ] + }, + { + "value": 96, + "name": "CopyFinder Items.action", + "path": "Automator/CopyFinder Items.action", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Automator/CopyFinder Items.action/Contents" + } + ] + }, + { + "value": 8, + "name": "Copyto Clipboard.action", + "path": "Automator/Copyto Clipboard.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/Copyto Clipboard.action/Contents" + } + ] + }, + { + "value": 72, + "name": "CreateAnnotated Movie File.action", + "path": "Automator/CreateAnnotated Movie File.action", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Automator/CreateAnnotated Movie File.action/Contents" + } + ] + }, + { + "value": 96, + "name": "CreateArchive.action", + "path": "Automator/CreateArchive.action", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Automator/CreateArchive.action/Contents" + } + ] + }, + { + "value": 412, + "name": "CreateBanner Image from Text.action", + "path": "Automator/CreateBanner Image from Text.action", + "children": [ + { + "value": 412, + "name": "Contents", + "path": "Automator/CreateBanner Image from Text.action/Contents" + } + ] + }, + { + "value": 392, + "name": "CreatePackage.action", + "path": "Automator/CreatePackage.action", + "children": [ + { + "value": 392, + "name": "Contents", + "path": "Automator/CreatePackage.action/Contents" + } + ] + }, + { + "value": 208, + "name": "CreateThumbnail Images.action", + "path": "Automator/CreateThumbnail Images.action", + "children": [ + { + "value": 208, + "name": "Contents", + "path": "Automator/CreateThumbnail Images.action/Contents" + } + ] + }, + { + "value": 712, + "name": "CropImages.action", + "path": "Automator/CropImages.action", + "children": [ + { + "value": 712, + "name": "Contents", + "path": "Automator/CropImages.action/Contents" + } + ] + }, + { + "value": 8, + "name": "CVSAdd.action", + "path": "Automator/CVSAdd.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/CVSAdd.action/Contents" + } + ] + }, + { + "value": 24, + "name": "CVSCheckout.action", + "path": "Automator/CVSCheckout.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/CVSCheckout.action/Contents" + } + ] + }, + { + "value": 24, + "name": "CVSCommit.action", + "path": "Automator/CVSCommit.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/CVSCommit.action/Contents" + } + ] + }, + { + "value": 276, + "name": "CVSUpdate.action", + "path": "Automator/CVSUpdate.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/CVSUpdate.action/Contents" + } + ] + }, + { + "value": 0, + "name": "DeactivateFonts.action", + "path": "Automator/DeactivateFonts.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/DeactivateFonts.action/Contents" + } + ] + }, + { + "value": 12, + "name": "DeleteAll iPod Notes.action", + "path": "Automator/DeleteAll iPod Notes.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/DeleteAll iPod Notes.action/Contents" + } + ] + }, + { + "value": 32, + "name": "DeleteCalendar Events.action", + "path": "Automator/DeleteCalendar Events.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/DeleteCalendar Events.action/Contents" + } + ] + }, + { + "value": 8, + "name": "DeleteCalendar Items.action", + "path": "Automator/DeleteCalendar Items.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/DeleteCalendar Items.action/Contents" + } + ] + }, + { + "value": 8, + "name": "DeleteCalendars.action", + "path": "Automator/DeleteCalendars.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/DeleteCalendars.action/Contents" + } + ] + }, + { + "value": 8, + "name": "DeleteReminders.action", + "path": "Automator/DeleteReminders.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/DeleteReminders.action/Contents" + } + ] + }, + { + "value": 12, + "name": "DisplayMail Messages.action", + "path": "Automator/DisplayMail Messages.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/DisplayMail Messages.action/Contents" + } + ] + }, + { + "value": 16, + "name": "DisplayNotification.action", + "path": "Automator/DisplayNotification.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/DisplayNotification.action/Contents" + } + ] + }, + { + "value": 8, + "name": "DisplayWebpages 2.action", + "path": "Automator/DisplayWebpages 2.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/DisplayWebpages 2.action/Contents" + } + ] + }, + { + "value": 12, + "name": "DisplayWebpages.action", + "path": "Automator/DisplayWebpages.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/DisplayWebpages.action/Contents" + } + ] + }, + { + "value": 276, + "name": "DownloadPictures.action", + "path": "Automator/DownloadPictures.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/DownloadPictures.action/Contents" + } + ] + }, + { + "value": 24, + "name": "DownloadURLs.action", + "path": "Automator/DownloadURLs.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/DownloadURLs.action/Contents" + } + ] + }, + { + "value": 8, + "name": "DuplicateFinder Items.action", + "path": "Automator/DuplicateFinder Items.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/DuplicateFinder Items.action/Contents" + } + ] + }, + { + "value": 8, + "name": "EjectDisk.action", + "path": "Automator/EjectDisk.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/EjectDisk.action/Contents" + } + ] + }, + { + "value": 12, + "name": "EjectiPod.action", + "path": "Automator/EjectiPod.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/EjectiPod.action/Contents" + } + ] + }, + { + "value": 276, + "name": "Enableor Disable Tracks.action", + "path": "Automator/Enableor Disable Tracks.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/Enableor Disable Tracks.action/Contents" + } + ] + }, + { + "value": 464, + "name": "EncodeMedia.action", + "path": "Automator/EncodeMedia.action", + "children": [ + { + "value": 464, + "name": "Contents", + "path": "Automator/EncodeMedia.action/Contents" + } + ] + }, + { + "value": 80, + "name": "Encodeto MPEG Audio.action", + "path": "Automator/Encodeto MPEG Audio.action", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Automator/Encodeto MPEG Audio.action/Contents" + } + ] + }, + { + "value": 24, + "name": "EncryptPDF Documents.action", + "path": "Automator/EncryptPDF Documents.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/EncryptPDF Documents.action/Contents" + } + ] + }, + { + "value": 12, + "name": "EventSummary.action", + "path": "Automator/EventSummary.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/EventSummary.action/Contents" + } + ] + }, + { + "value": 24, + "name": "ExecuteSQL.action", + "path": "Automator/ExecuteSQL.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/ExecuteSQL.action/Contents" + } + ] + }, + { + "value": 264, + "name": "ExportFont Files.action", + "path": "Automator/ExportFont Files.action", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "Automator/ExportFont Files.action/Contents" + } + ] + }, + { + "value": 24, + "name": "ExportMovies for iPod.action", + "path": "Automator/ExportMovies for iPod.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/ExportMovies for iPod.action/Contents" + } + ] + }, + { + "value": 44, + "name": "ExportvCards.action", + "path": "Automator/ExportvCards.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/ExportvCards.action/Contents" + } + ] + }, + { + "value": 12, + "name": "ExtractData from Text.action", + "path": "Automator/ExtractData from Text.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/ExtractData from Text.action/Contents" + } + ] + }, + { + "value": 24, + "name": "ExtractOdd & Even Pages.action", + "path": "Automator/ExtractOdd & Even Pages.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/ExtractOdd & Even Pages.action/Contents" + } + ] + }, + { + "value": 276, + "name": "ExtractPDF Annotations.action", + "path": "Automator/ExtractPDF Annotations.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/ExtractPDF Annotations.action/Contents" + } + ] + }, + { + "value": 2620, + "name": "ExtractPDF Text.action", + "path": "Automator/ExtractPDF Text.action", + "children": [ + { + "value": 2620, + "name": "Contents", + "path": "Automator/ExtractPDF Text.action/Contents" + } + ] + }, + { + "value": 44, + "name": "FilterArticles.action", + "path": "Automator/FilterArticles.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/FilterArticles.action/Contents" + } + ] + }, + { + "value": 272, + "name": "FilterCalendar Items 2.action", + "path": "Automator/FilterCalendar Items 2.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/FilterCalendar Items 2.action/Contents" + } + ] + }, + { + "value": 280, + "name": "FilterContacts Items 2.action", + "path": "Automator/FilterContacts Items 2.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/FilterContacts Items 2.action/Contents" + } + ] + }, + { + "value": 280, + "name": "FilterFinder Items 2.action", + "path": "Automator/FilterFinder Items 2.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/FilterFinder Items 2.action/Contents" + } + ] + }, + { + "value": 12, + "name": "FilterFinder Items.action", + "path": "Automator/FilterFinder Items.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/FilterFinder Items.action/Contents" + } + ] + }, + { + "value": 264, + "name": "FilterFonts by Font Type.action", + "path": "Automator/FilterFonts by Font Type.action", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "Automator/FilterFonts by Font Type.action/Contents" + } + ] + }, + { + "value": 280, + "name": "FilteriPhoto Items 2.action", + "path": "Automator/FilteriPhoto Items 2.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/FilteriPhoto Items 2.action/Contents" + } + ] + }, + { + "value": 272, + "name": "FilterItems.action", + "path": "Automator/FilterItems.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/FilterItems.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FilteriTunes Items 2.action", + "path": "Automator/FilteriTunes Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FilteriTunes Items 2.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FilterMail Items 2.action", + "path": "Automator/FilterMail Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FilterMail Items 2.action/Contents" + } + ] + }, + { + "value": 60, + "name": "FilterParagraphs.action", + "path": "Automator/FilterParagraphs.action", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Automator/FilterParagraphs.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FilterURLs 2.action", + "path": "Automator/FilterURLs 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FilterURLs 2.action/Contents" + } + ] + }, + { + "value": 12, + "name": "FilterURLs.action", + "path": "Automator/FilterURLs.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/FilterURLs.action/Contents" + } + ] + }, + { + "value": 272, + "name": "FindCalendar Items 2.action", + "path": "Automator/FindCalendar Items 2.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/FindCalendar Items 2.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FindContacts Items 2.action", + "path": "Automator/FindContacts Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FindContacts Items 2.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FindFinder Items 2.action", + "path": "Automator/FindFinder Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FindFinder Items 2.action/Contents" + } + ] + }, + { + "value": 280, + "name": "FindFinder Items.action", + "path": "Automator/FindFinder Items.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/FindFinder Items.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FindiPhoto Items 2.action", + "path": "Automator/FindiPhoto Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FindiPhoto Items 2.action/Contents" + } + ] + }, + { + "value": 272, + "name": "FindItems.action", + "path": "Automator/FindItems.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/FindItems.action/Contents" + } + ] + }, + { + "value": 276, + "name": "FindiTunes Items 2.action", + "path": "Automator/FindiTunes Items 2.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/FindiTunes Items 2.action/Contents" + } + ] + }, + { + "value": 280, + "name": "FindMail Items 2.action", + "path": "Automator/FindMail Items 2.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/FindMail Items 2.action/Contents" + } + ] + }, + { + "value": 84, + "name": "FindPeople with Birthdays.action", + "path": "Automator/FindPeople with Birthdays.action", + "children": [ + { + "value": 84, + "name": "Contents", + "path": "Automator/FindPeople with Birthdays.action/Contents" + } + ] + }, + { + "value": 0, + "name": "Finder.definition", + "path": "Automator/Finder.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/Finder.definition/Contents" + } + ] + }, + { + "value": 104, + "name": "FlipImages.action", + "path": "Automator/FlipImages.action", + "children": [ + { + "value": 104, + "name": "Contents", + "path": "Automator/FlipImages.action/Contents" + } + ] + }, + { + "value": 0, + "name": "FontBook.definition", + "path": "Automator/FontBook.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/FontBook.definition/Contents" + } + ] + }, + { + "value": 36, + "name": "GetAttachments from Mail Messages.action", + "path": "Automator/GetAttachments from Mail Messages.action", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Automator/GetAttachments from Mail Messages.action/Contents" + } + ] + }, + { + "value": 180, + "name": "GetContact Information.action", + "path": "Automator/GetContact Information.action", + "children": [ + { + "value": 180, + "name": "Contents", + "path": "Automator/GetContact Information.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetContents of Clipboard.action", + "path": "Automator/GetContents of Clipboard.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetContents of Clipboard.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetContents of TextEdit Document.action", + "path": "Automator/GetContents of TextEdit Document.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetContents of TextEdit Document.action/Contents" + } + ] + }, + { + "value": 12, + "name": "GetContents of Webpages.action", + "path": "Automator/GetContents of Webpages.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/GetContents of Webpages.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetCurrent Webpage from Safari.action", + "path": "Automator/GetCurrent Webpage from Safari.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetCurrent Webpage from Safari.action/Contents" + } + ] + }, + { + "value": 84, + "name": "GetDefinition of Word.action", + "path": "Automator/GetDefinition of Word.action", + "children": [ + { + "value": 84, + "name": "Contents", + "path": "Automator/GetDefinition of Word.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetEnclosure URLs from Articles.action", + "path": "Automator/GetEnclosure URLs from Articles.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetEnclosure URLs from Articles.action/Contents" + } + ] + }, + { + "value": 12, + "name": "GetFeeds from URLs.action", + "path": "Automator/GetFeeds from URLs.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/GetFeeds from URLs.action/Contents" + } + ] + }, + { + "value": 0, + "name": "GetFiles for Fonts.action", + "path": "Automator/GetFiles for Fonts.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/GetFiles for Fonts.action/Contents" + } + ] + }, + { + "value": 12, + "name": "GetFolder Contents.action", + "path": "Automator/GetFolder Contents.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/GetFolder Contents.action/Contents" + } + ] + }, + { + "value": 412, + "name": "GetFont Info.action", + "path": "Automator/GetFont Info.action", + "children": [ + { + "value": 412, + "name": "Contents", + "path": "Automator/GetFont Info.action/Contents" + } + ] + }, + { + "value": 0, + "name": "GetFonts from Font Files.action", + "path": "Automator/GetFonts from Font Files.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/GetFonts from Font Files.action/Contents" + } + ] + }, + { + "value": 0, + "name": "GetFonts of TextEdit Document.action", + "path": "Automator/GetFonts of TextEdit Document.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/GetFonts of TextEdit Document.action/Contents" + } + ] + }, + { + "value": 20, + "name": "GetiDVD Slideshow Images.action", + "path": "Automator/GetiDVD Slideshow Images.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/GetiDVD Slideshow Images.action/Contents" + } + ] + }, + { + "value": 28, + "name": "GetImage URLs from Articles.action", + "path": "Automator/GetImage URLs from Articles.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/GetImage URLs from Articles.action/Contents" + } + ] + }, + { + "value": 52, + "name": "GetImage URLs from Webpage.action", + "path": "Automator/GetImage URLs from Webpage.action", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Automator/GetImage URLs from Webpage.action/Contents" + } + ] + }, + { + "value": 12, + "name": "GetLink URLs from Articles.action", + "path": "Automator/GetLink URLs from Articles.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/GetLink URLs from Articles.action/Contents" + } + ] + }, + { + "value": 24, + "name": "GetLink URLs from Webpages.action", + "path": "Automator/GetLink URLs from Webpages.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/GetLink URLs from Webpages.action/Contents" + } + ] + }, + { + "value": 20, + "name": "GetNew Mail.action", + "path": "Automator/GetNew Mail.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/GetNew Mail.action/Contents" + } + ] + }, + { + "value": 276, + "name": "GetPDF Metadata.action", + "path": "Automator/GetPDF Metadata.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/GetPDF Metadata.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetPermalinks of Articles.action", + "path": "Automator/GetPermalinks of Articles.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetPermalinks of Articles.action/Contents" + } + ] + }, + { + "value": 0, + "name": "GetPostScript name of Font.action", + "path": "Automator/GetPostScript name of Font.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/GetPostScript name of Font.action/Contents" + } + ] + }, + { + "value": 44, + "name": "GetSelected Contacts Items 2.action", + "path": "Automator/GetSelected Contacts Items 2.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/GetSelected Contacts Items 2.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetSelected Finder Items 2.action", + "path": "Automator/GetSelected Finder Items 2.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetSelected Finder Items 2.action/Contents" + } + ] + }, + { + "value": 28, + "name": "GetSelected iPhoto Items 2.action", + "path": "Automator/GetSelected iPhoto Items 2.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/GetSelected iPhoto Items 2.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetSelected Items.action", + "path": "Automator/GetSelected Items.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetSelected Items.action/Contents" + } + ] + }, + { + "value": 28, + "name": "GetSelected iTunes Items 2.action", + "path": "Automator/GetSelected iTunes Items 2.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/GetSelected iTunes Items 2.action/Contents" + } + ] + }, + { + "value": 28, + "name": "GetSelected Mail Items 2.action", + "path": "Automator/GetSelected Mail Items 2.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/GetSelected Mail Items 2.action/Contents" + } + ] + }, + { + "value": 540, + "name": "GetSpecified Calendar Items.action", + "path": "Automator/GetSpecified Calendar Items.action", + "children": [ + { + "value": 540, + "name": "Contents", + "path": "Automator/GetSpecified Calendar Items.action/Contents" + } + ] + }, + { + "value": 292, + "name": "GetSpecified Contacts Items.action", + "path": "Automator/GetSpecified Contacts Items.action", + "children": [ + { + "value": 292, + "name": "Contents", + "path": "Automator/GetSpecified Contacts Items.action/Contents" + } + ] + }, + { + "value": 308, + "name": "GetSpecified Finder Items.action", + "path": "Automator/GetSpecified Finder Items.action", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "Automator/GetSpecified Finder Items.action/Contents" + } + ] + }, + { + "value": 288, + "name": "GetSpecified iPhoto Items.action", + "path": "Automator/GetSpecified iPhoto Items.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/GetSpecified iPhoto Items.action/Contents" + } + ] + }, + { + "value": 288, + "name": "GetSpecified iTunes Items.action", + "path": "Automator/GetSpecified iTunes Items.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/GetSpecified iTunes Items.action/Contents" + } + ] + }, + { + "value": 380, + "name": "GetSpecified Mail Items.action", + "path": "Automator/GetSpecified Mail Items.action", + "children": [ + { + "value": 380, + "name": "Contents", + "path": "Automator/GetSpecified Mail Items.action/Contents" + } + ] + }, + { + "value": 288, + "name": "GetSpecified Movies.action", + "path": "Automator/GetSpecified Movies.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/GetSpecified Movies.action/Contents" + } + ] + }, + { + "value": 276, + "name": "GetSpecified Servers.action", + "path": "Automator/GetSpecified Servers.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/GetSpecified Servers.action/Contents" + } + ] + }, + { + "value": 272, + "name": "GetSpecified Text.action", + "path": "Automator/GetSpecified Text.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/GetSpecified Text.action/Contents" + } + ] + }, + { + "value": 288, + "name": "GetSpecified URLs.action", + "path": "Automator/GetSpecified URLs.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/GetSpecified URLs.action/Contents" + } + ] + }, + { + "value": 8, + "name": "GetText from Articles.action", + "path": "Automator/GetText from Articles.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/GetText from Articles.action/Contents" + } + ] + }, + { + "value": 40, + "name": "GetText from Webpage.action", + "path": "Automator/GetText from Webpage.action", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Automator/GetText from Webpage.action/Contents" + } + ] + }, + { + "value": 8, + "name": "Getthe Current Song.action", + "path": "Automator/Getthe Current Song.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/Getthe Current Song.action/Contents" + } + ] + }, + { + "value": 36, + "name": "GetValue of Variable.action", + "path": "Automator/GetValue of Variable.action", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Automator/GetValue of Variable.action/Contents" + } + ] + }, + { + "value": 280, + "name": "GroupMailer.action", + "path": "Automator/GroupMailer.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/GroupMailer.action/Contents" + } + ] + }, + { + "value": 8, + "name": "HideAll Applications.action", + "path": "Automator/HideAll Applications.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/HideAll Applications.action/Contents" + } + ] + }, + { + "value": 12, + "name": "HintMovies.action", + "path": "Automator/HintMovies.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/HintMovies.action/Contents" + } + ] + }, + { + "value": 0, + "name": "iCal.definition", + "path": "Automator/iCal.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/iCal.definition/Contents" + } + ] + }, + { + "value": 44, + "name": "ImportAudio Files.action", + "path": "Automator/ImportAudio Files.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/ImportAudio Files.action/Contents" + } + ] + }, + { + "value": 28, + "name": "ImportFiles into iPhoto.action", + "path": "Automator/ImportFiles into iPhoto.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/ImportFiles into iPhoto.action/Contents" + } + ] + }, + { + "value": 24, + "name": "ImportFiles into iTunes.action", + "path": "Automator/ImportFiles into iTunes.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/ImportFiles into iTunes.action/Contents" + } + ] + }, + { + "value": 256, + "name": "InitiateRemote Broadcast.action", + "path": "Automator/InitiateRemote Broadcast.action", + "children": [ + { + "value": 256, + "name": "Contents", + "path": "Automator/InitiateRemote Broadcast.action/Contents" + } + ] + }, + { + "value": 0, + "name": "iPhoto.definition", + "path": "Automator/iPhoto.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/iPhoto.definition/Contents" + } + ] + }, + { + "value": 0, + "name": "iTunes.definition", + "path": "Automator/iTunes.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/iTunes.definition/Contents" + } + ] + }, + { + "value": 24, + "name": "LabelFinder Items.action", + "path": "Automator/LabelFinder Items.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/LabelFinder Items.action/Contents" + } + ] + }, + { + "value": 8, + "name": "LaunchApplication.action", + "path": "Automator/LaunchApplication.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/LaunchApplication.action/Contents" + } + ] + }, + { + "value": 24, + "name": "Loop.action", + "path": "Automator/Loop.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/Loop.action/Contents" + } + ] + }, + { + "value": 0, + "name": "Mail.definition", + "path": "Automator/Mail.definition", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/Mail.definition/Contents" + } + ] + }, + { + "value": 16, + "name": "MarkArticles.action", + "path": "Automator/MarkArticles.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/MarkArticles.action/Contents" + } + ] + }, + { + "value": 12, + "name": "MountDisk Image.action", + "path": "Automator/MountDisk Image.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/MountDisk Image.action/Contents" + } + ] + }, + { + "value": 12, + "name": "MoveFinder Items to Trash.action", + "path": "Automator/MoveFinder Items to Trash.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/MoveFinder Items to Trash.action/Contents" + } + ] + }, + { + "value": 28, + "name": "MoveFinder Items.action", + "path": "Automator/MoveFinder Items.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/MoveFinder Items.action/Contents" + } + ] + }, + { + "value": 108, + "name": "NewAliases.action", + "path": "Automator/NewAliases.action", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "Automator/NewAliases.action/Contents" + } + ] + }, + { + "value": 0, + "name": "NewAudio Capture.action", + "path": "Automator/NewAudio Capture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/NewAudio Capture.action/Contents" + } + ] + }, + { + "value": 676, + "name": "NewCalendar Events Leopard.action", + "path": "Automator/NewCalendar Events Leopard.action", + "children": [ + { + "value": 676, + "name": "Contents", + "path": "Automator/NewCalendar Events Leopard.action/Contents" + } + ] + }, + { + "value": 24, + "name": "NewCalendar.action", + "path": "Automator/NewCalendar.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/NewCalendar.action/Contents" + } + ] + }, + { + "value": 64, + "name": "NewDisk Image.action", + "path": "Automator/NewDisk Image.action", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Automator/NewDisk Image.action/Contents" + } + ] + }, + { + "value": 20, + "name": "NewFolder.action", + "path": "Automator/NewFolder.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/NewFolder.action/Contents" + } + ] + }, + { + "value": 20, + "name": "NewiDVD Menu.action", + "path": "Automator/NewiDVD Menu.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/NewiDVD Menu.action/Contents" + } + ] + }, + { + "value": 20, + "name": "NewiDVD Movie Sequence.action", + "path": "Automator/NewiDVD Movie Sequence.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/NewiDVD Movie Sequence.action/Contents" + } + ] + }, + { + "value": 64, + "name": "NewiDVD Slideshow.action", + "path": "Automator/NewiDVD Slideshow.action", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Automator/NewiDVD Slideshow.action/Contents" + } + ] + }, + { + "value": 12, + "name": "NewiPhoto Album.action", + "path": "Automator/NewiPhoto Album.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/NewiPhoto Album.action/Contents" + } + ] + }, + { + "value": 32, + "name": "NewiPod Note.action", + "path": "Automator/NewiPod Note.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/NewiPod Note.action/Contents" + } + ] + }, + { + "value": 12, + "name": "NewiTunes Playlist.action", + "path": "Automator/NewiTunes Playlist.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/NewiTunes Playlist.action/Contents" + } + ] + }, + { + "value": 576, + "name": "NewMail Message.action", + "path": "Automator/NewMail Message.action", + "children": [ + { + "value": 576, + "name": "Contents", + "path": "Automator/NewMail Message.action/Contents" + } + ] + }, + { + "value": 32, + "name": "NewPDF Contact Sheet.action", + "path": "Automator/NewPDF Contact Sheet.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/NewPDF Contact Sheet.action/Contents" + } + ] + }, + { + "value": 4444, + "name": "NewPDF from Images.action", + "path": "Automator/NewPDF from Images.action", + "children": [ + { + "value": 4444, + "name": "Contents", + "path": "Automator/NewPDF from Images.action/Contents" + } + ] + }, + { + "value": 1976, + "name": "NewQuickTime Slideshow.action", + "path": "Automator/NewQuickTime Slideshow.action", + "children": [ + { + "value": 1976, + "name": "Contents", + "path": "Automator/NewQuickTime Slideshow.action/Contents" + } + ] + }, + { + "value": 808, + "name": "NewReminders Item.action", + "path": "Automator/NewReminders Item.action", + "children": [ + { + "value": 808, + "name": "Contents", + "path": "Automator/NewReminders Item.action/Contents" + } + ] + }, + { + "value": 0, + "name": "NewScreen Capture.action", + "path": "Automator/NewScreen Capture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/NewScreen Capture.action/Contents" + } + ] + }, + { + "value": 64, + "name": "NewText File.action", + "path": "Automator/NewText File.action", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Automator/NewText File.action/Contents" + } + ] + }, + { + "value": 8, + "name": "NewTextEdit Document.action", + "path": "Automator/NewTextEdit Document.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/NewTextEdit Document.action/Contents" + } + ] + }, + { + "value": 0, + "name": "NewVideo Capture.action", + "path": "Automator/NewVideo Capture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/NewVideo Capture.action/Contents" + } + ] + }, + { + "value": 28, + "name": "OpenFinder Items.action", + "path": "Automator/OpenFinder Items.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/OpenFinder Items.action/Contents" + } + ] + }, + { + "value": 12, + "name": "OpenImages in Preview.action", + "path": "Automator/OpenImages in Preview.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/OpenImages in Preview.action/Contents" + } + ] + }, + { + "value": 12, + "name": "OpenKeynote Presentations.action", + "path": "Automator/OpenKeynote Presentations.action", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Automator/OpenKeynote Presentations.action/Contents" + } + ] + }, + { + "value": 60, + "name": "PadImages.action", + "path": "Automator/PadImages.action", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Automator/PadImages.action/Contents" + } + ] + }, + { + "value": 0, + "name": "PauseCapture.action", + "path": "Automator/PauseCapture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/PauseCapture.action/Contents" + } + ] + }, + { + "value": 8, + "name": "PauseDVD Playback.action", + "path": "Automator/PauseDVD Playback.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/PauseDVD Playback.action/Contents" + } + ] + }, + { + "value": 8, + "name": "PauseiTunes.action", + "path": "Automator/PauseiTunes.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/PauseiTunes.action/Contents" + } + ] + }, + { + "value": 20, + "name": "Pause.action", + "path": "Automator/Pause.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/Pause.action/Contents" + } + ] + }, + { + "value": 3696, + "name": "PDFto Images.action", + "path": "Automator/PDFto Images.action", + "children": [ + { + "value": 3696, + "name": "Contents", + "path": "Automator/PDFto Images.action/Contents" + } + ] + }, + { + "value": 276, + "name": "PlayDVD.action", + "path": "Automator/PlayDVD.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/PlayDVD.action/Contents" + } + ] + }, + { + "value": 8, + "name": "PlayiPhoto Slideshow.action", + "path": "Automator/PlayiPhoto Slideshow.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/PlayiPhoto Slideshow.action/Contents" + } + ] + }, + { + "value": 8, + "name": "PlayiTunes Playlist.action", + "path": "Automator/PlayiTunes Playlist.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/PlayiTunes Playlist.action/Contents" + } + ] + }, + { + "value": 264, + "name": "PlayMovies.action", + "path": "Automator/PlayMovies.action", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "Automator/PlayMovies.action/Contents" + } + ] + }, + { + "value": 20, + "name": "PrintFinder Items.action", + "path": "Automator/PrintFinder Items.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/PrintFinder Items.action/Contents" + } + ] + }, + { + "value": 108, + "name": "PrintImages.action", + "path": "Automator/PrintImages.action", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "Automator/PrintImages.action/Contents" + } + ] + }, + { + "value": 32, + "name": "PrintKeynote Presentation.action", + "path": "Automator/PrintKeynote Presentation.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/PrintKeynote Presentation.action/Contents" + } + ] + }, + { + "value": 288, + "name": "QuitAll Applications.action", + "path": "Automator/QuitAll Applications.action", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Automator/QuitAll Applications.action/Contents" + } + ] + }, + { + "value": 24, + "name": "QuitApplication.action", + "path": "Automator/QuitApplication.action", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "Automator/QuitApplication.action/Contents" + } + ] + }, + { + "value": 8, + "name": "RemoveEmpty Playlists.action", + "path": "Automator/RemoveEmpty Playlists.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/RemoveEmpty Playlists.action/Contents" + } + ] + }, + { + "value": 0, + "name": "RemoveFont Files.action", + "path": "Automator/RemoveFont Files.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/RemoveFont Files.action/Contents" + } + ] + }, + { + "value": 1092, + "name": "RenameFinder Items.action", + "path": "Automator/RenameFinder Items.action", + "children": [ + { + "value": 1092, + "name": "Contents", + "path": "Automator/RenameFinder Items.action/Contents" + } + ] + }, + { + "value": 16, + "name": "RenamePDF Documents.action", + "path": "Automator/RenamePDF Documents.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/RenamePDF Documents.action/Contents" + } + ] + }, + { + "value": 32, + "name": "RenderPDF Pages as Images.action", + "path": "Automator/RenderPDF Pages as Images.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/RenderPDF Pages as Images.action/Contents" + } + ] + }, + { + "value": 2888, + "name": "RenderQuartz Compositions to Image Files.action", + "path": "Automator/RenderQuartz Compositions to Image Files.action", + "children": [ + { + "value": 2888, + "name": "Contents", + "path": "Automator/RenderQuartz Compositions to Image Files.action/Contents" + } + ] + }, + { + "value": 0, + "name": "ResumeCapture.action", + "path": "Automator/ResumeCapture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/ResumeCapture.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ResumeDVD Playback.action", + "path": "Automator/ResumeDVD Playback.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ResumeDVD Playback.action/Contents" + } + ] + }, + { + "value": 8, + "name": "RevealFinder Items.action", + "path": "Automator/RevealFinder Items.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/RevealFinder Items.action/Contents" + } + ] + }, + { + "value": 428, + "name": "ReviewPhotos.action", + "path": "Automator/ReviewPhotos.action", + "children": [ + { + "value": 428, + "name": "Contents", + "path": "Automator/ReviewPhotos.action/Contents" + } + ] + }, + { + "value": 56, + "name": "RotateImages.action", + "path": "Automator/RotateImages.action", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Automator/RotateImages.action/Contents" + } + ] + }, + { + "value": 308, + "name": "RunAppleScript.action", + "path": "Automator/RunAppleScript.action", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "Automator/RunAppleScript.action/Contents" + } + ] + }, + { + "value": 20, + "name": "RunSelf-Test.action", + "path": "Automator/RunSelf-Test.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/RunSelf-Test.action/Contents" + } + ] + }, + { + "value": 316, + "name": "RunShell Script.action", + "path": "Automator/RunShell Script.action", + "children": [ + { + "value": 316, + "name": "Contents", + "path": "Automator/RunShell Script.action/Contents" + } + ] + }, + { + "value": 36, + "name": "RunWeb Service.action", + "path": "Automator/RunWeb Service.action", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Automator/RunWeb Service.action/Contents" + } + ] + }, + { + "value": 416, + "name": "RunWorkflow.action", + "path": "Automator/RunWorkflow.action", + "children": [ + { + "value": 416, + "name": "Contents", + "path": "Automator/RunWorkflow.action/Contents" + } + ] + }, + { + "value": 32, + "name": "SaveImages from Web Content.action", + "path": "Automator/SaveImages from Web Content.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/SaveImages from Web Content.action/Contents" + } + ] + }, + { + "value": 20, + "name": "ScaleImages.action", + "path": "Automator/ScaleImages.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/ScaleImages.action/Contents" + } + ] + }, + { + "value": 2112, + "name": "SearchPDFs.action", + "path": "Automator/SearchPDFs.action", + "children": [ + { + "value": 2112, + "name": "Contents", + "path": "Automator/SearchPDFs.action/Contents" + } + ] + }, + { + "value": 0, + "name": "SelectFonts in Font Book.action", + "path": "Automator/SelectFonts in Font Book.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/SelectFonts in Font Book.action/Contents" + } + ] + }, + { + "value": 944, + "name": "SendBirthday Greetings.action", + "path": "Automator/SendBirthday Greetings.action", + "children": [ + { + "value": 944, + "name": "Contents", + "path": "Automator/SendBirthday Greetings.action/Contents" + } + ] + }, + { + "value": 8, + "name": "SendOutgoing Messages.action", + "path": "Automator/SendOutgoing Messages.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/SendOutgoing Messages.action/Contents" + } + ] + }, + { + "value": 16, + "name": "SetApplication for Files.action", + "path": "Automator/SetApplication for Files.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/SetApplication for Files.action/Contents" + } + ] + }, + { + "value": 340, + "name": "SetComputer Volume.action", + "path": "Automator/SetComputer Volume.action", + "children": [ + { + "value": 340, + "name": "Contents", + "path": "Automator/SetComputer Volume.action/Contents" + } + ] + }, + { + "value": 44, + "name": "SetContents of TextEdit Document.action", + "path": "Automator/SetContents of TextEdit Document.action", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "Automator/SetContents of TextEdit Document.action/Contents" + } + ] + }, + { + "value": 8, + "name": "SetDesktop Picture.action", + "path": "Automator/SetDesktop Picture.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/SetDesktop Picture.action/Contents" + } + ] + }, + { + "value": 820, + "name": "SetFolder Views.action", + "path": "Automator/SetFolder Views.action", + "children": [ + { + "value": 820, + "name": "Contents", + "path": "Automator/SetFolder Views.action/Contents" + } + ] + }, + { + "value": 8, + "name": "SetiDVD Background Image.action", + "path": "Automator/SetiDVD Background Image.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/SetiDVD Background Image.action/Contents" + } + ] + }, + { + "value": 20, + "name": "SetiDVD Button Face.action", + "path": "Automator/SetiDVD Button Face.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/SetiDVD Button Face.action/Contents" + } + ] + }, + { + "value": 112, + "name": "SetInfo of iTunes Songs.action", + "path": "Automator/SetInfo of iTunes Songs.action", + "children": [ + { + "value": 112, + "name": "Contents", + "path": "Automator/SetInfo of iTunes Songs.action/Contents" + } + ] + }, + { + "value": 408, + "name": "SetiTunes Equalizer.action", + "path": "Automator/SetiTunes Equalizer.action", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Automator/SetiTunes Equalizer.action/Contents" + } + ] + }, + { + "value": 32, + "name": "SetiTunes Volume.action", + "path": "Automator/SetiTunes Volume.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/SetiTunes Volume.action/Contents" + } + ] + }, + { + "value": 280, + "name": "SetMovie Annotations.action", + "path": "Automator/SetMovie Annotations.action", + "children": [ + { + "value": 280, + "name": "Contents", + "path": "Automator/SetMovie Annotations.action/Contents" + } + ] + }, + { + "value": 256, + "name": "SetMovie Playback Properties.action", + "path": "Automator/SetMovie Playback Properties.action", + "children": [ + { + "value": 256, + "name": "Contents", + "path": "Automator/SetMovie Playback Properties.action/Contents" + } + ] + }, + { + "value": 0, + "name": "SetMovie URL.action", + "path": "Automator/SetMovie URL.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/SetMovie URL.action/Contents" + } + ] + }, + { + "value": 408, + "name": "SetOptions of iTunes Songs.action", + "path": "Automator/SetOptions of iTunes Songs.action", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Automator/SetOptions of iTunes Songs.action/Contents" + } + ] + }, + { + "value": 408, + "name": "SetPDF Metadata.action", + "path": "Automator/SetPDF Metadata.action", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Automator/SetPDF Metadata.action/Contents" + } + ] + }, + { + "value": 8, + "name": "SetSpotlight Comments for Finder Items.action", + "path": "Automator/SetSpotlight Comments for Finder Items.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/SetSpotlight Comments for Finder Items.action/Contents" + } + ] + }, + { + "value": 20, + "name": "SetValue of Variable.action", + "path": "Automator/SetValue of Variable.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/SetValue of Variable.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ShowMain iDVD Menu.action", + "path": "Automator/ShowMain iDVD Menu.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ShowMain iDVD Menu.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ShowNext Keynote Slide.action", + "path": "Automator/ShowNext Keynote Slide.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ShowNext Keynote Slide.action/Contents" + } + ] + }, + { + "value": 8, + "name": "ShowPrevious Keynote Slide.action", + "path": "Automator/ShowPrevious Keynote Slide.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/ShowPrevious Keynote Slide.action/Contents" + } + ] + }, + { + "value": 16, + "name": "ShowSpecified Keynote Slide.action", + "path": "Automator/ShowSpecified Keynote Slide.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/ShowSpecified Keynote Slide.action/Contents" + } + ] + }, + { + "value": 36, + "name": "SortFinder Items.action", + "path": "Automator/SortFinder Items.action", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Automator/SortFinder Items.action/Contents" + } + ] + }, + { + "value": 32, + "name": "SpeakText.action", + "path": "Automator/SpeakText.action", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Automator/SpeakText.action/Contents" + } + ] + }, + { + "value": 20, + "name": "SpotlightLeopard.action", + "path": "Automator/SpotlightLeopard.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/SpotlightLeopard.action/Contents" + } + ] + }, + { + "value": 0, + "name": "StartCapture.action", + "path": "Automator/StartCapture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/StartCapture.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StartiTunes Playing.action", + "path": "Automator/StartiTunes Playing.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StartiTunes Playing.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StartiTunes Visuals.action", + "path": "Automator/StartiTunes Visuals.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StartiTunes Visuals.action/Contents" + } + ] + }, + { + "value": 16, + "name": "StartKeynote Slideshow.action", + "path": "Automator/StartKeynote Slideshow.action", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Automator/StartKeynote Slideshow.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StartScreen Saver.action", + "path": "Automator/StartScreen Saver.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StartScreen Saver.action/Contents" + } + ] + }, + { + "value": 0, + "name": "StopCapture.action", + "path": "Automator/StopCapture.action", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Automator/StopCapture.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StopDVD Playback.action", + "path": "Automator/StopDVD Playback.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StopDVD Playback.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StopiTunes Visuals.action", + "path": "Automator/StopiTunes Visuals.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StopiTunes Visuals.action/Contents" + } + ] + }, + { + "value": 8, + "name": "StopKeynote Slideshow.action", + "path": "Automator/StopKeynote Slideshow.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/StopKeynote Slideshow.action/Contents" + } + ] + }, + { + "value": 28, + "name": "SystemProfile.action", + "path": "Automator/SystemProfile.action", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Automator/SystemProfile.action/Contents" + } + ] + }, + { + "value": 276, + "name": "TakePicture.action", + "path": "Automator/TakePicture.action", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Automator/TakePicture.action/Contents" + } + ] + }, + { + "value": 420, + "name": "TakeScreenshot.action", + "path": "Automator/TakeScreenshot.action", + "children": [ + { + "value": 420, + "name": "Contents", + "path": "Automator/TakeScreenshot.action/Contents" + } + ] + }, + { + "value": 20, + "name": "TakeVideo Snapshot.action", + "path": "Automator/TakeVideo Snapshot.action", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Automator/TakeVideo Snapshot.action/Contents" + } + ] + }, + { + "value": 100, + "name": "Textto Audio File.action", + "path": "Automator/Textto Audio File.action", + "children": [ + { + "value": 100, + "name": "Contents", + "path": "Automator/Textto Audio File.action/Contents" + } + ] + }, + { + "value": 436, + "name": "Textto EPUB File.action", + "path": "Automator/Textto EPUB File.action", + "children": [ + { + "value": 436, + "name": "Contents", + "path": "Automator/Textto EPUB File.action/Contents" + } + ] + }, + { + "value": 8, + "name": "UpdateiPod.action", + "path": "Automator/UpdateiPod.action", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Automator/UpdateiPod.action/Contents" + } + ] + }, + { + "value": 264, + "name": "ValidateFont Files.action", + "path": "Automator/ValidateFont Files.action", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "Automator/ValidateFont Files.action/Contents" + } + ] + }, + { + "value": 272, + "name": "ViewResults.action", + "path": "Automator/ViewResults.action", + "children": [ + { + "value": 272, + "name": "Contents", + "path": "Automator/ViewResults.action/Contents" + } + ] + }, + { + "value": 64, + "name": "Waitfor User Action.action", + "path": "Automator/Waitfor User Action.action", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Automator/Waitfor User Action.action/Contents" + } + ] + }, + { + "value": 456, + "name": "WatchMe Do.action", + "path": "Automator/WatchMe Do.action", + "children": [ + { + "value": 456, + "name": "Contents", + "path": "Automator/WatchMe Do.action/Contents" + } + ] + }, + { + "value": 72, + "name": "WatermarkPDF Documents.action", + "path": "Automator/WatermarkPDF Documents.action", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Automator/WatermarkPDF Documents.action/Contents" + } + ] + }, + { + "value": 80, + "name": "WebsitePopup.action", + "path": "Automator/WebsitePopup.action", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Automator/WebsitePopup.action/Contents" + } + ] + } + ] + }, + { + "value": 2868, + "name": "BridgeSupport", + "path": "BridgeSupport", + "children": [ + { + "value": 0, + "name": "include", + "path": "BridgeSupport/include" + }, + { + "value": 2840, + "name": "ruby-2.0", + "path": "BridgeSupport/ruby-2.0" + } + ] + }, + { + "value": 21988, + "name": "Caches", + "path": "Caches", + "children": [ + { + "value": 2296, + "name": "com.apple.CVMS", + "path": "Caches/com.apple.CVMS" + }, + { + "value": 19048, + "name": "com.apple.kext.caches", + "path": "Caches/com.apple.kext.caches", + "children": [ + { + "value": 12, + "name": "Directories", + "path": "Caches/com.apple.kext.caches/Directories" + }, + { + "value": 19036, + "name": "Startup", + "path": "Caches/com.apple.kext.caches/Startup" + } + ] + } + ] + }, + { + "value": 2252, + "name": "ColorPickers", + "path": "ColorPickers", + "children": [ + { + "value": 288, + "name": "NSColorPickerCrayon.colorPicker", + "path": "ColorPickers/NSColorPickerCrayon.colorPicker", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "ColorPickers/NSColorPickerCrayon.colorPicker/_CodeSignature" + }, + { + "value": 288, + "name": "Resources", + "path": "ColorPickers/NSColorPickerCrayon.colorPicker/Resources" + } + ] + }, + { + "value": 524, + "name": "NSColorPickerPageableNameList.colorPicker", + "path": "ColorPickers/NSColorPickerPageableNameList.colorPicker", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "ColorPickers/NSColorPickerPageableNameList.colorPicker/_CodeSignature" + }, + { + "value": 524, + "name": "Resources", + "path": "ColorPickers/NSColorPickerPageableNameList.colorPicker/Resources" + } + ] + }, + { + "value": 848, + "name": "NSColorPickerSliders.colorPicker", + "path": "ColorPickers/NSColorPickerSliders.colorPicker", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "ColorPickers/NSColorPickerSliders.colorPicker/_CodeSignature" + }, + { + "value": 848, + "name": "Resources", + "path": "ColorPickers/NSColorPickerSliders.colorPicker/Resources" + } + ] + }, + { + "value": 532, + "name": "NSColorPickerUser.colorPicker", + "path": "ColorPickers/NSColorPickerUser.colorPicker", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "ColorPickers/NSColorPickerUser.colorPicker/_CodeSignature" + }, + { + "value": 532, + "name": "Resources", + "path": "ColorPickers/NSColorPickerUser.colorPicker/Resources" + } + ] + }, + { + "value": 60, + "name": "NSColorPickerWheel.colorPicker", + "path": "ColorPickers/NSColorPickerWheel.colorPicker", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "ColorPickers/NSColorPickerWheel.colorPicker/_CodeSignature" + }, + { + "value": 60, + "name": "Resources", + "path": "ColorPickers/NSColorPickerWheel.colorPicker/Resources" + } + ] + } + ] + }, + { + "value": 0, + "name": "Colors", + "path": "Colors", + "children": [ + { + "value": 0, + "name": "Apple.clr", + "path": "Colors/Apple.clr", + "children": [ + { + "value": 0, + "name": "ar.lproj", + "path": "Colors/Apple.clr/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "Colors/Apple.clr/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "Colors/Apple.clr/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "Colors/Apple.clr/da.lproj" + }, + { + "value": 0, + "name": "Dutch.lproj", + "path": "Colors/Apple.clr/Dutch.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "Colors/Apple.clr/el.lproj" + }, + { + "value": 0, + "name": "English.lproj", + "path": "Colors/Apple.clr/English.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "Colors/Apple.clr/fi.lproj" + }, + { + "value": 0, + "name": "French.lproj", + "path": "Colors/Apple.clr/French.lproj" + }, + { + "value": 0, + "name": "German.lproj", + "path": "Colors/Apple.clr/German.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "Colors/Apple.clr/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "Colors/Apple.clr/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "Colors/Apple.clr/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "Colors/Apple.clr/id.lproj" + }, + { + "value": 0, + "name": "Italian.lproj", + "path": "Colors/Apple.clr/Italian.lproj" + }, + { + "value": 0, + "name": "Japanese.lproj", + "path": "Colors/Apple.clr/Japanese.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "Colors/Apple.clr/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "Colors/Apple.clr/ms.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "Colors/Apple.clr/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "Colors/Apple.clr/pl.lproj" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "Colors/Apple.clr/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "Colors/Apple.clr/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "Colors/Apple.clr/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "Colors/Apple.clr/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "Colors/Apple.clr/sk.lproj" + }, + { + "value": 0, + "name": "Spanish.lproj", + "path": "Colors/Apple.clr/Spanish.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "Colors/Apple.clr/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "Colors/Apple.clr/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "Colors/Apple.clr/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "Colors/Apple.clr/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "Colors/Apple.clr/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "Colors/Apple.clr/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "Colors/Apple.clr/zh_TW.lproj" + } + ] + }, + { + "value": 0, + "name": "Crayons.clr", + "path": "Colors/Crayons.clr", + "children": [ + { + "value": 0, + "name": "ar.lproj", + "path": "Colors/Crayons.clr/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "Colors/Crayons.clr/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "Colors/Crayons.clr/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "Colors/Crayons.clr/da.lproj" + }, + { + "value": 0, + "name": "Dutch.lproj", + "path": "Colors/Crayons.clr/Dutch.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "Colors/Crayons.clr/el.lproj" + }, + { + "value": 0, + "name": "English.lproj", + "path": "Colors/Crayons.clr/English.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "Colors/Crayons.clr/fi.lproj" + }, + { + "value": 0, + "name": "French.lproj", + "path": "Colors/Crayons.clr/French.lproj" + }, + { + "value": 0, + "name": "German.lproj", + "path": "Colors/Crayons.clr/German.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "Colors/Crayons.clr/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "Colors/Crayons.clr/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "Colors/Crayons.clr/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "Colors/Crayons.clr/id.lproj" + }, + { + "value": 0, + "name": "Italian.lproj", + "path": "Colors/Crayons.clr/Italian.lproj" + }, + { + "value": 0, + "name": "Japanese.lproj", + "path": "Colors/Crayons.clr/Japanese.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "Colors/Crayons.clr/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "Colors/Crayons.clr/ms.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "Colors/Crayons.clr/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "Colors/Crayons.clr/pl.lproj" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "Colors/Crayons.clr/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "Colors/Crayons.clr/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "Colors/Crayons.clr/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "Colors/Crayons.clr/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "Colors/Crayons.clr/sk.lproj" + }, + { + "value": 0, + "name": "Spanish.lproj", + "path": "Colors/Crayons.clr/Spanish.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "Colors/Crayons.clr/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "Colors/Crayons.clr/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "Colors/Crayons.clr/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "Colors/Crayons.clr/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "Colors/Crayons.clr/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "Colors/Crayons.clr/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "Colors/Crayons.clr/zh_TW.lproj" + } + ] + }, + { + "value": 0, + "name": "System.clr", + "path": "Colors/System.clr", + "children": [ + { + "value": 0, + "name": "ar.lproj", + "path": "Colors/System.clr/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "Colors/System.clr/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "Colors/System.clr/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "Colors/System.clr/da.lproj" + }, + { + "value": 0, + "name": "Dutch.lproj", + "path": "Colors/System.clr/Dutch.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "Colors/System.clr/el.lproj" + }, + { + "value": 0, + "name": "English.lproj", + "path": "Colors/System.clr/English.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "Colors/System.clr/fi.lproj" + }, + { + "value": 0, + "name": "French.lproj", + "path": "Colors/System.clr/French.lproj" + }, + { + "value": 0, + "name": "German.lproj", + "path": "Colors/System.clr/German.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "Colors/System.clr/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "Colors/System.clr/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "Colors/System.clr/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "Colors/System.clr/id.lproj" + }, + { + "value": 0, + "name": "Italian.lproj", + "path": "Colors/System.clr/Italian.lproj" + }, + { + "value": 0, + "name": "Japanese.lproj", + "path": "Colors/System.clr/Japanese.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "Colors/System.clr/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "Colors/System.clr/ms.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "Colors/System.clr/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "Colors/System.clr/pl.lproj" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "Colors/System.clr/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "Colors/System.clr/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "Colors/System.clr/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "Colors/System.clr/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "Colors/System.clr/sk.lproj" + }, + { + "value": 0, + "name": "Spanish.lproj", + "path": "Colors/System.clr/Spanish.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "Colors/System.clr/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "Colors/System.clr/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "Colors/System.clr/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "Colors/System.clr/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "Colors/System.clr/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "Colors/System.clr/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "Colors/System.clr/zh_TW.lproj" + } + ] + } + ] + }, + { + "value": 2908, + "name": "ColorSync", + "path": "ColorSync", + "children": [ + { + "value": 2868, + "name": "Calibrators", + "path": "ColorSync/Calibrators", + "children": [ + { + "value": 2868, + "name": "DisplayCalibrator.app", + "path": "ColorSync/Calibrators/DisplayCalibrator.app" + } + ] + }, + { + "value": 40, + "name": "Profiles", + "path": "ColorSync/Profiles" + } + ] + }, + { + "value": 21772, + "name": "Components", + "path": "Components", + "children": [ + { + "value": 416, + "name": "AppleScript.component", + "path": "Components/AppleScript.component", + "children": [ + { + "value": 416, + "name": "Contents", + "path": "Components/AppleScript.component/Contents" + } + ] + }, + { + "value": 2592, + "name": "AudioCodecs.component", + "path": "Components/AudioCodecs.component", + "children": [ + { + "value": 2592, + "name": "Contents", + "path": "Components/AudioCodecs.component/Contents" + } + ] + }, + { + "value": 92, + "name": "AUSpeechSynthesis.component", + "path": "Components/AUSpeechSynthesis.component", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "Components/AUSpeechSynthesis.component/Contents" + } + ] + }, + { + "value": 18492, + "name": "CoreAudio.component", + "path": "Components/CoreAudio.component", + "children": [ + { + "value": 18492, + "name": "Contents", + "path": "Components/CoreAudio.component/Contents" + } + ] + }, + { + "value": 28, + "name": "IOFWDVComponents.component", + "path": "Components/IOFWDVComponents.component", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Components/IOFWDVComponents.component/Contents" + } + ] + }, + { + "value": 16, + "name": "IOQTComponents.component", + "path": "Components/IOQTComponents.component", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Components/IOQTComponents.component/Contents" + } + ] + }, + { + "value": 12, + "name": "PDFImporter.component", + "path": "Components/PDFImporter.component", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Components/PDFImporter.component/Contents" + } + ] + }, + { + "value": 120, + "name": "SoundManagerComponents.component", + "path": "Components/SoundManagerComponents.component", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Components/SoundManagerComponents.component/Contents" + } + ] + } + ] + }, + { + "value": 45728, + "name": "Compositions", + "path": "Compositions", + "children": [ + { + "value": 0, + "name": ".Localization.bundle", + "path": "Compositions/.Localization.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Compositions/.Localization.bundle/Contents" + } + ] + } + ] + }, + { + "value": 409060, + "name": "CoreServices", + "path": "CoreServices", + "children": [ + { + "value": 1152, + "name": "AddPrinter.app", + "path": "CoreServices/AddPrinter.app", + "children": [ + { + "value": 1152, + "name": "Contents", + "path": "CoreServices/AddPrinter.app/Contents" + } + ] + }, + { + "value": 72, + "name": "AddressBookUrlForwarder.app", + "path": "CoreServices/AddressBookUrlForwarder.app", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "CoreServices/AddressBookUrlForwarder.app/Contents" + } + ] + }, + { + "value": 20, + "name": "AirPlayUIAgent.app", + "path": "CoreServices/AirPlayUIAgent.app", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "CoreServices/AirPlayUIAgent.app/Contents" + } + ] + }, + { + "value": 56, + "name": "AirPortBase Station Agent.app", + "path": "CoreServices/AirPortBase Station Agent.app", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "CoreServices/AirPortBase Station Agent.app/Contents" + } + ] + }, + { + "value": 92, + "name": "AOS.bundle", + "path": "CoreServices/AOS.bundle", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "CoreServices/AOS.bundle/Contents" + } + ] + }, + { + "value": 1564, + "name": "AppDownloadLauncher.app", + "path": "CoreServices/AppDownloadLauncher.app", + "children": [ + { + "value": 1564, + "name": "Contents", + "path": "CoreServices/AppDownloadLauncher.app/Contents" + } + ] + }, + { + "value": 376, + "name": "Apple80211Agent.app", + "path": "CoreServices/Apple80211Agent.app", + "children": [ + { + "value": 376, + "name": "Contents", + "path": "CoreServices/Apple80211Agent.app/Contents" + } + ] + }, + { + "value": 480, + "name": "AppleFileServer.app", + "path": "CoreServices/AppleFileServer.app", + "children": [ + { + "value": 480, + "name": "Contents", + "path": "CoreServices/AppleFileServer.app/Contents" + } + ] + }, + { + "value": 12, + "name": "AppleGraphicsWarning.app", + "path": "CoreServices/AppleGraphicsWarning.app", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "CoreServices/AppleGraphicsWarning.app/Contents" + } + ] + }, + { + "value": 1752, + "name": "AppleScriptUtility.app", + "path": "CoreServices/AppleScriptUtility.app", + "children": [ + { + "value": 1752, + "name": "Contents", + "path": "CoreServices/AppleScriptUtility.app/Contents" + } + ] + }, + { + "value": 0, + "name": "ApplicationFirewall.bundle", + "path": "CoreServices/ApplicationFirewall.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "CoreServices/ApplicationFirewall.bundle/Contents" + } + ] + }, + { + "value": 14808, + "name": "Applications", + "path": "CoreServices/Applications", + "children": [ + { + "value": 1792, + "name": "NetworkUtility.app", + "path": "CoreServices/Applications/NetworkUtility.app" + }, + { + "value": 7328, + "name": "RAIDUtility.app", + "path": "CoreServices/Applications/RAIDUtility.app" + }, + { + "value": 5688, + "name": "WirelessDiagnostics.app", + "path": "CoreServices/Applications/WirelessDiagnostics.app" + } + ] + }, + { + "value": 6620, + "name": "ArchiveUtility.app", + "path": "CoreServices/ArchiveUtility.app", + "children": [ + { + "value": 6620, + "name": "Contents", + "path": "CoreServices/ArchiveUtility.app/Contents" + } + ] + }, + { + "value": 24, + "name": "AutomatorLauncher.app", + "path": "CoreServices/AutomatorLauncher.app", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "CoreServices/AutomatorLauncher.app/Contents" + } + ] + }, + { + "value": 584, + "name": "AutomatorRunner.app", + "path": "CoreServices/AutomatorRunner.app", + "children": [ + { + "value": 584, + "name": "Contents", + "path": "CoreServices/AutomatorRunner.app/Contents" + } + ] + }, + { + "value": 412, + "name": "AVRCPAgent.app", + "path": "CoreServices/AVRCPAgent.app", + "children": [ + { + "value": 412, + "name": "Contents", + "path": "CoreServices/AVRCPAgent.app/Contents" + } + ] + }, + { + "value": 1400, + "name": "backupd.bundle", + "path": "CoreServices/backupd.bundle", + "children": [ + { + "value": 1400, + "name": "Contents", + "path": "CoreServices/backupd.bundle/Contents" + } + ] + }, + { + "value": 2548, + "name": "BluetoothSetup Assistant.app", + "path": "CoreServices/BluetoothSetup Assistant.app", + "children": [ + { + "value": 2548, + "name": "Contents", + "path": "CoreServices/BluetoothSetup Assistant.app/Contents" + } + ] + }, + { + "value": 2588, + "name": "BluetoothUIServer.app", + "path": "CoreServices/BluetoothUIServer.app", + "children": [ + { + "value": 2588, + "name": "Contents", + "path": "CoreServices/BluetoothUIServer.app/Contents" + } + ] + }, + { + "value": 1288, + "name": "CalendarFileHandler.app", + "path": "CoreServices/CalendarFileHandler.app", + "children": [ + { + "value": 1288, + "name": "Contents", + "path": "CoreServices/CalendarFileHandler.app/Contents" + } + ] + }, + { + "value": 44, + "name": "CaptiveNetwork Assistant.app", + "path": "CoreServices/CaptiveNetwork Assistant.app", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "CoreServices/CaptiveNetwork Assistant.app/Contents" + } + ] + }, + { + "value": 12, + "name": "CarbonSpellChecker.bundle", + "path": "CoreServices/CarbonSpellChecker.bundle", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "CoreServices/CarbonSpellChecker.bundle/Contents" + } + ] + }, + { + "value": 27144, + "name": "CertificateAssistant.app", + "path": "CoreServices/CertificateAssistant.app", + "children": [ + { + "value": 27144, + "name": "Contents", + "path": "CoreServices/CertificateAssistant.app/Contents" + } + ] + }, + { + "value": 28, + "name": "CommonCocoaPanels.bundle", + "path": "CoreServices/CommonCocoaPanels.bundle", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "CoreServices/CommonCocoaPanels.bundle/Contents" + } + ] + }, + { + "value": 676, + "name": "CoreLocationAgent.app", + "path": "CoreServices/CoreLocationAgent.app", + "children": [ + { + "value": 676, + "name": "Contents", + "path": "CoreServices/CoreLocationAgent.app/Contents" + } + ] + }, + { + "value": 164, + "name": "CoreServicesUIAgent.app", + "path": "CoreServices/CoreServicesUIAgent.app", + "children": [ + { + "value": 164, + "name": "Contents", + "path": "CoreServices/CoreServicesUIAgent.app/Contents" + } + ] + }, + { + "value": 171300, + "name": "CoreTypes.bundle", + "path": "CoreServices/CoreTypes.bundle", + "children": [ + { + "value": 171300, + "name": "Contents", + "path": "CoreServices/CoreTypes.bundle/Contents" + } + ] + }, + { + "value": 308, + "name": "DatabaseEvents.app", + "path": "CoreServices/DatabaseEvents.app", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "CoreServices/DatabaseEvents.app/Contents" + } + ] + }, + { + "value": 6104, + "name": "DirectoryUtility.app", + "path": "CoreServices/DirectoryUtility.app", + "children": [ + { + "value": 6104, + "name": "Contents", + "path": "CoreServices/DirectoryUtility.app/Contents" + } + ] + }, + { + "value": 1840, + "name": "DiskImageMounter.app", + "path": "CoreServices/DiskImageMounter.app", + "children": [ + { + "value": 1840, + "name": "Contents", + "path": "CoreServices/DiskImageMounter.app/Contents" + } + ] + }, + { + "value": 8476, + "name": "Dock.app", + "path": "CoreServices/Dock.app", + "children": [ + { + "value": 8476, + "name": "Contents", + "path": "CoreServices/Dock.app/Contents" + } + ] + }, + { + "value": 696, + "name": "Encodings", + "path": "CoreServices/Encodings" + }, + { + "value": 1024, + "name": "ExpansionSlot Utility.app", + "path": "CoreServices/ExpansionSlot Utility.app", + "children": [ + { + "value": 1024, + "name": "Contents", + "path": "CoreServices/ExpansionSlot Utility.app/Contents" + } + ] + }, + { + "value": 1732, + "name": "FileSync.app", + "path": "CoreServices/FileSync.app", + "children": [ + { + "value": 1732, + "name": "Contents", + "path": "CoreServices/FileSync.app/Contents" + } + ] + }, + { + "value": 572, + "name": "FileSyncAgent.app", + "path": "CoreServices/FileSyncAgent.app", + "children": [ + { + "value": 572, + "name": "Contents", + "path": "CoreServices/FileSyncAgent.app/Contents" + } + ] + }, + { + "value": 35168, + "name": "Finder.app", + "path": "CoreServices/Finder.app", + "children": [ + { + "value": 35168, + "name": "Contents", + "path": "CoreServices/Finder.app/Contents" + } + ] + }, + { + "value": 0, + "name": "FirmwareUpdates", + "path": "CoreServices/FirmwareUpdates" + }, + { + "value": 336, + "name": "FolderActions Dispatcher.app", + "path": "CoreServices/FolderActions Dispatcher.app", + "children": [ + { + "value": 336, + "name": "Contents", + "path": "CoreServices/FolderActions Dispatcher.app/Contents" + } + ] + }, + { + "value": 1820, + "name": "FolderActions Setup.app", + "path": "CoreServices/FolderActions Setup.app", + "children": [ + { + "value": 1820, + "name": "Contents", + "path": "CoreServices/FolderActions Setup.app/Contents" + } + ] + }, + { + "value": 3268, + "name": "HelpViewer.app", + "path": "CoreServices/HelpViewer.app", + "children": [ + { + "value": 3268, + "name": "Contents", + "path": "CoreServices/HelpViewer.app/Contents" + } + ] + }, + { + "value": 352, + "name": "ImageEvents.app", + "path": "CoreServices/ImageEvents.app", + "children": [ + { + "value": 352, + "name": "Contents", + "path": "CoreServices/ImageEvents.app/Contents" + } + ] + }, + { + "value": 2012, + "name": "InstallCommand Line Developer Tools.app", + "path": "CoreServices/InstallCommand Line Developer Tools.app", + "children": [ + { + "value": 2012, + "name": "Contents", + "path": "CoreServices/InstallCommand Line Developer Tools.app/Contents" + } + ] + }, + { + "value": 108, + "name": "Installin Progress.app", + "path": "CoreServices/Installin Progress.app", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "CoreServices/Installin Progress.app/Contents" + } + ] + }, + { + "value": 7444, + "name": "Installer.app", + "path": "CoreServices/Installer.app", + "children": [ + { + "value": 7444, + "name": "Contents", + "path": "CoreServices/Installer.app/Contents" + } + ] + }, + { + "value": 8, + "name": "InstallerStatusNotifications.bundle", + "path": "CoreServices/InstallerStatusNotifications.bundle", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "CoreServices/InstallerStatusNotifications.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "InternetSharing.bundle", + "path": "CoreServices/InternetSharing.bundle", + "children": [ + { + "value": 0, + "name": "Resources", + "path": "CoreServices/InternetSharing.bundle/Resources" + } + ] + }, + { + "value": 244, + "name": "JarLauncher.app", + "path": "CoreServices/JarLauncher.app", + "children": [ + { + "value": 244, + "name": "Contents", + "path": "CoreServices/JarLauncher.app/Contents" + } + ] + }, + { + "value": 152, + "name": "JavaWeb Start.app", + "path": "CoreServices/JavaWeb Start.app", + "children": [ + { + "value": 152, + "name": "Contents", + "path": "CoreServices/JavaWeb Start.app/Contents" + } + ] + }, + { + "value": 12, + "name": "KernelEventAgent.bundle", + "path": "CoreServices/KernelEventAgent.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "CoreServices/KernelEventAgent.bundle/Contents" + }, + { + "value": 12, + "name": "FileSystemUIAgent.app", + "path": "CoreServices/KernelEventAgent.bundle/FileSystemUIAgent.app" + } + ] + }, + { + "value": 1016, + "name": "KeyboardSetupAssistant.app", + "path": "CoreServices/KeyboardSetupAssistant.app", + "children": [ + { + "value": 1016, + "name": "Contents", + "path": "CoreServices/KeyboardSetupAssistant.app/Contents" + } + ] + }, + { + "value": 840, + "name": "KeychainCircle Notification.app", + "path": "CoreServices/KeychainCircle Notification.app", + "children": [ + { + "value": 840, + "name": "Contents", + "path": "CoreServices/KeychainCircle Notification.app/Contents" + } + ] + }, + { + "value": 1448, + "name": "LanguageChooser.app", + "path": "CoreServices/LanguageChooser.app", + "children": [ + { + "value": 1448, + "name": "Contents", + "path": "CoreServices/LanguageChooser.app/Contents" + } + ] + }, + { + "value": 868, + "name": "LocationMenu.app", + "path": "CoreServices/LocationMenu.app", + "children": [ + { + "value": 868, + "name": "Contents", + "path": "CoreServices/LocationMenu.app/Contents" + } + ] + }, + { + "value": 8260, + "name": "loginwindow.app", + "path": "CoreServices/loginwindow.app", + "children": [ + { + "value": 8260, + "name": "Contents", + "path": "CoreServices/loginwindow.app/Contents" + } + ] + }, + { + "value": 3632, + "name": "ManagedClient.app", + "path": "CoreServices/ManagedClient.app", + "children": [ + { + "value": 3632, + "name": "Contents", + "path": "CoreServices/ManagedClient.app/Contents" + } + ] + }, + { + "value": 0, + "name": "mDNSResponder.bundle", + "path": "CoreServices/mDNSResponder.bundle", + "children": [ + { + "value": 0, + "name": "Resources", + "path": "CoreServices/mDNSResponder.bundle/Resources" + } + ] + }, + { + "value": 420, + "name": "MemorySlot Utility.app", + "path": "CoreServices/MemorySlot Utility.app", + "children": [ + { + "value": 420, + "name": "Contents", + "path": "CoreServices/MemorySlot Utility.app/Contents" + } + ] + }, + { + "value": 4272, + "name": "MenuExtras", + "path": "CoreServices/MenuExtras", + "children": [ + { + "value": 416, + "name": "AirPort.menu", + "path": "CoreServices/MenuExtras/AirPort.menu" + }, + { + "value": 788, + "name": "Battery.menu", + "path": "CoreServices/MenuExtras/Battery.menu" + }, + { + "value": 112, + "name": "Bluetooth.menu", + "path": "CoreServices/MenuExtras/Bluetooth.menu" + }, + { + "value": 12, + "name": "Clock.menu", + "path": "CoreServices/MenuExtras/Clock.menu" + }, + { + "value": 84, + "name": "Displays.menu", + "path": "CoreServices/MenuExtras/Displays.menu" + }, + { + "value": 32, + "name": "Eject.menu", + "path": "CoreServices/MenuExtras/Eject.menu" + }, + { + "value": 24, + "name": "ExpressCard.menu", + "path": "CoreServices/MenuExtras/ExpressCard.menu" + }, + { + "value": 76, + "name": "Fax.menu", + "path": "CoreServices/MenuExtras/Fax.menu" + }, + { + "value": 112, + "name": "HomeSync.menu", + "path": "CoreServices/MenuExtras/HomeSync.menu" + }, + { + "value": 84, + "name": "iChat.menu", + "path": "CoreServices/MenuExtras/iChat.menu" + }, + { + "value": 28, + "name": "Ink.menu", + "path": "CoreServices/MenuExtras/Ink.menu" + }, + { + "value": 104, + "name": "IrDA.menu", + "path": "CoreServices/MenuExtras/IrDA.menu" + }, + { + "value": 68, + "name": "PPP.menu", + "path": "CoreServices/MenuExtras/PPP.menu" + }, + { + "value": 24, + "name": "PPPoE.menu", + "path": "CoreServices/MenuExtras/PPPoE.menu" + }, + { + "value": 60, + "name": "RemoteDesktop.menu", + "path": "CoreServices/MenuExtras/RemoteDesktop.menu" + }, + { + "value": 48, + "name": "Script Menu.menu", + "path": "CoreServices/MenuExtras/Script Menu.menu" + }, + { + "value": 832, + "name": "TextInput.menu", + "path": "CoreServices/MenuExtras/TextInput.menu" + }, + { + "value": 144, + "name": "TimeMachine.menu", + "path": "CoreServices/MenuExtras/TimeMachine.menu" + }, + { + "value": 40, + "name": "UniversalAccess.menu", + "path": "CoreServices/MenuExtras/UniversalAccess.menu" + }, + { + "value": 108, + "name": "User.menu", + "path": "CoreServices/MenuExtras/User.menu" + }, + { + "value": 316, + "name": "Volume.menu", + "path": "CoreServices/MenuExtras/Volume.menu" + }, + { + "value": 48, + "name": "VPN.menu", + "path": "CoreServices/MenuExtras/VPN.menu" + }, + { + "value": 712, + "name": "WWAN.menu", + "path": "CoreServices/MenuExtras/WWAN.menu" + } + ] + }, + { + "value": 16, + "name": "MLTEFile.bundle", + "path": "CoreServices/MLTEFile.bundle", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "CoreServices/MLTEFile.bundle/Contents" + } + ] + }, + { + "value": 616, + "name": "MRTAgent.app", + "path": "CoreServices/MRTAgent.app", + "children": [ + { + "value": 616, + "name": "Contents", + "path": "CoreServices/MRTAgent.app/Contents" + } + ] + }, + { + "value": 1540, + "name": "NetAuthAgent.app", + "path": "CoreServices/NetAuthAgent.app", + "children": [ + { + "value": 1540, + "name": "Contents", + "path": "CoreServices/NetAuthAgent.app/Contents" + } + ] + }, + { + "value": 3388, + "name": "NetworkDiagnostics.app", + "path": "CoreServices/NetworkDiagnostics.app", + "children": [ + { + "value": 3388, + "name": "Contents", + "path": "CoreServices/NetworkDiagnostics.app/Contents" + } + ] + }, + { + "value": 9384, + "name": "NetworkSetup Assistant.app", + "path": "CoreServices/NetworkSetup Assistant.app", + "children": [ + { + "value": 9384, + "name": "Contents", + "path": "CoreServices/NetworkSetup Assistant.app/Contents" + } + ] + }, + { + "value": 716, + "name": "NotificationCenter.app", + "path": "CoreServices/NotificationCenter.app", + "children": [ + { + "value": 716, + "name": "Contents", + "path": "CoreServices/NotificationCenter.app/Contents" + } + ] + }, + { + "value": 948, + "name": "OBEXAgent.app", + "path": "CoreServices/OBEXAgent.app", + "children": [ + { + "value": 948, + "name": "Contents", + "path": "CoreServices/OBEXAgent.app/Contents" + } + ] + }, + { + "value": 1596, + "name": "ODSAgent.app", + "path": "CoreServices/ODSAgent.app", + "children": [ + { + "value": 1596, + "name": "Contents", + "path": "CoreServices/ODSAgent.app/Contents" + } + ] + }, + { + "value": 492, + "name": "PassViewer.app", + "path": "CoreServices/PassViewer.app", + "children": [ + { + "value": 492, + "name": "Contents", + "path": "CoreServices/PassViewer.app/Contents" + } + ] + }, + { + "value": 0, + "name": "PerformanceMetricLocalizations.bundle", + "path": "CoreServices/PerformanceMetricLocalizations.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "CoreServices/PerformanceMetricLocalizations.bundle/Contents" + } + ] + }, + { + "value": 88, + "name": "powerd.bundle", + "path": "CoreServices/powerd.bundle", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "CoreServices/powerd.bundle/_CodeSignature" + }, + { + "value": 0, + "name": "ar.lproj", + "path": "CoreServices/powerd.bundle/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "CoreServices/powerd.bundle/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "CoreServices/powerd.bundle/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "CoreServices/powerd.bundle/da.lproj" + }, + { + "value": 0, + "name": "Dutch.lproj", + "path": "CoreServices/powerd.bundle/Dutch.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "CoreServices/powerd.bundle/el.lproj" + }, + { + "value": 0, + "name": "English.lproj", + "path": "CoreServices/powerd.bundle/English.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "CoreServices/powerd.bundle/fi.lproj" + }, + { + "value": 0, + "name": "French.lproj", + "path": "CoreServices/powerd.bundle/French.lproj" + }, + { + "value": 0, + "name": "German.lproj", + "path": "CoreServices/powerd.bundle/German.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "CoreServices/powerd.bundle/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "CoreServices/powerd.bundle/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "CoreServices/powerd.bundle/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "CoreServices/powerd.bundle/id.lproj" + }, + { + "value": 0, + "name": "Italian.lproj", + "path": "CoreServices/powerd.bundle/Italian.lproj" + }, + { + "value": 0, + "name": "Japanese.lproj", + "path": "CoreServices/powerd.bundle/Japanese.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "CoreServices/powerd.bundle/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "CoreServices/powerd.bundle/ms.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "CoreServices/powerd.bundle/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "CoreServices/powerd.bundle/pl.lproj" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "CoreServices/powerd.bundle/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "CoreServices/powerd.bundle/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "CoreServices/powerd.bundle/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "CoreServices/powerd.bundle/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "CoreServices/powerd.bundle/sk.lproj" + }, + { + "value": 0, + "name": "Spanish.lproj", + "path": "CoreServices/powerd.bundle/Spanish.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "CoreServices/powerd.bundle/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "CoreServices/powerd.bundle/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "CoreServices/powerd.bundle/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "CoreServices/powerd.bundle/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "CoreServices/powerd.bundle/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "CoreServices/powerd.bundle/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "CoreServices/powerd.bundle/zh_TW.lproj" + } + ] + }, + { + "value": 776, + "name": "ProblemReporter.app", + "path": "CoreServices/ProblemReporter.app", + "children": [ + { + "value": 776, + "name": "Contents", + "path": "CoreServices/ProblemReporter.app/Contents" + } + ] + }, + { + "value": 4748, + "name": "RawCamera.bundle", + "path": "CoreServices/RawCamera.bundle", + "children": [ + { + "value": 4748, + "name": "Contents", + "path": "CoreServices/RawCamera.bundle/Contents" + } + ] + }, + { + "value": 2112, + "name": "RawCameraSupport.bundle", + "path": "CoreServices/RawCameraSupport.bundle", + "children": [ + { + "value": 2112, + "name": "Contents", + "path": "CoreServices/RawCameraSupport.bundle/Contents" + } + ] + }, + { + "value": 24, + "name": "rcd.app", + "path": "CoreServices/rcd.app", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "CoreServices/rcd.app/Contents" + } + ] + }, + { + "value": 156, + "name": "RegisterPluginIMApp.app", + "path": "CoreServices/RegisterPluginIMApp.app", + "children": [ + { + "value": 156, + "name": "Contents", + "path": "CoreServices/RegisterPluginIMApp.app/Contents" + } + ] + }, + { + "value": 3504, + "name": "RemoteManagement", + "path": "CoreServices/RemoteManagement", + "children": [ + { + "value": 872, + "name": "AppleVNCServer.bundle", + "path": "CoreServices/RemoteManagement/AppleVNCServer.bundle" + }, + { + "value": 2260, + "name": "ARDAgent.app", + "path": "CoreServices/RemoteManagement/ARDAgent.app" + }, + { + "value": 144, + "name": "ScreensharingAgent.bundle", + "path": "CoreServices/RemoteManagement/ScreensharingAgent.bundle" + }, + { + "value": 228, + "name": "screensharingd.bundle", + "path": "CoreServices/RemoteManagement/screensharingd.bundle" + } + ] + }, + { + "value": 672, + "name": "ReportPanic.app", + "path": "CoreServices/ReportPanic.app", + "children": [ + { + "value": 672, + "name": "Contents", + "path": "CoreServices/ReportPanic.app/Contents" + } + ] + }, + { + "value": 0, + "name": "Resources", + "path": "CoreServices/Resources", + "children": [ + { + "value": 0, + "name": "ar.lproj", + "path": "CoreServices/Resources/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "CoreServices/Resources/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "CoreServices/Resources/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "CoreServices/Resources/da.lproj" + }, + { + "value": 0, + "name": "Dutch.lproj", + "path": "CoreServices/Resources/Dutch.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "CoreServices/Resources/el.lproj" + }, + { + "value": 0, + "name": "English.lproj", + "path": "CoreServices/Resources/English.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "CoreServices/Resources/fi.lproj" + }, + { + "value": 0, + "name": "French.lproj", + "path": "CoreServices/Resources/French.lproj" + }, + { + "value": 0, + "name": "German.lproj", + "path": "CoreServices/Resources/German.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "CoreServices/Resources/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "CoreServices/Resources/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "CoreServices/Resources/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "CoreServices/Resources/id.lproj" + }, + { + "value": 0, + "name": "Italian.lproj", + "path": "CoreServices/Resources/Italian.lproj" + }, + { + "value": 0, + "name": "Japanese.lproj", + "path": "CoreServices/Resources/Japanese.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "CoreServices/Resources/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "CoreServices/Resources/ms.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "CoreServices/Resources/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "CoreServices/Resources/pl.lproj" + }, + { + "value": 0, + "name": "Profiles", + "path": "CoreServices/Resources/Profiles" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "CoreServices/Resources/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "CoreServices/Resources/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "CoreServices/Resources/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "CoreServices/Resources/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "CoreServices/Resources/sk.lproj" + }, + { + "value": 0, + "name": "Spanish.lproj", + "path": "CoreServices/Resources/Spanish.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "CoreServices/Resources/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "CoreServices/Resources/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "CoreServices/Resources/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "CoreServices/Resources/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "CoreServices/Resources/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "CoreServices/Resources/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "CoreServices/Resources/zh_TW.lproj" + } + ] + }, + { + "value": 20, + "name": "RFBEventHelper.bundle", + "path": "CoreServices/RFBEventHelper.bundle", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "CoreServices/RFBEventHelper.bundle/Contents" + } + ] + }, + { + "value": 3304, + "name": "ScreenSharing.app", + "path": "CoreServices/ScreenSharing.app", + "children": [ + { + "value": 3304, + "name": "Contents", + "path": "CoreServices/ScreenSharing.app/Contents" + } + ] + }, + { + "value": 244, + "name": "Search.bundle", + "path": "CoreServices/Search.bundle", + "children": [ + { + "value": 244, + "name": "Contents", + "path": "CoreServices/Search.bundle/Contents" + } + ] + }, + { + "value": 4128, + "name": "SecurityAgentPlugins", + "path": "CoreServices/SecurityAgentPlugins", + "children": [ + { + "value": 304, + "name": "DiskUnlock.bundle", + "path": "CoreServices/SecurityAgentPlugins/DiskUnlock.bundle" + }, + { + "value": 1192, + "name": "FamilyControls.bundle", + "path": "CoreServices/SecurityAgentPlugins/FamilyControls.bundle" + }, + { + "value": 340, + "name": "HomeDirMechanism.bundle", + "path": "CoreServices/SecurityAgentPlugins/HomeDirMechanism.bundle" + }, + { + "value": 1156, + "name": "KerberosAgent.bundle", + "path": "CoreServices/SecurityAgentPlugins/KerberosAgent.bundle" + }, + { + "value": 276, + "name": "loginKC.bundle", + "path": "CoreServices/SecurityAgentPlugins/loginKC.bundle" + }, + { + "value": 104, + "name": "loginwindow.bundle", + "path": "CoreServices/SecurityAgentPlugins/loginwindow.bundle" + }, + { + "value": 384, + "name": "MCXMechanism.bundle", + "path": "CoreServices/SecurityAgentPlugins/MCXMechanism.bundle" + }, + { + "value": 12, + "name": "PKINITMechanism.bundle", + "path": "CoreServices/SecurityAgentPlugins/PKINITMechanism.bundle" + }, + { + "value": 360, + "name": "RestartAuthorization.bundle", + "path": "CoreServices/SecurityAgentPlugins/RestartAuthorization.bundle" + } + ] + }, + { + "value": 328, + "name": "SecurityFixer.app", + "path": "CoreServices/SecurityFixer.app", + "children": [ + { + "value": 328, + "name": "Contents", + "path": "CoreServices/SecurityFixer.app/Contents" + } + ] + }, + { + "value": 28200, + "name": "SetupAssistant.app", + "path": "CoreServices/SetupAssistant.app", + "children": [ + { + "value": 28200, + "name": "Contents", + "path": "CoreServices/SetupAssistant.app/Contents" + } + ] + }, + { + "value": 164, + "name": "SetupAssistantPlugins", + "path": "CoreServices/SetupAssistantPlugins", + "children": [ + { + "value": 8, + "name": "AppStore.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/AppStore.icdplugin" + }, + { + "value": 8, + "name": "Calendar.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Calendar.flplugin" + }, + { + "value": 8, + "name": "FaceTime.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/FaceTime.icdplugin" + }, + { + "value": 8, + "name": "Fonts.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Fonts.flplugin" + }, + { + "value": 16, + "name": "GameCenter.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/GameCenter.icdplugin" + }, + { + "value": 8, + "name": "Helpd.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Helpd.flplugin" + }, + { + "value": 8, + "name": "iBooks.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/iBooks.icdplugin" + }, + { + "value": 16, + "name": "IdentityServices.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/IdentityServices.icdplugin" + }, + { + "value": 8, + "name": "iMessage.icdplugin", + "path": "CoreServices/SetupAssistantPlugins/iMessage.icdplugin" + }, + { + "value": 8, + "name": "LaunchServices.flplugin", + "path": "CoreServices/SetupAssistantPlugins/LaunchServices.flplugin" + }, + { + "value": 12, + "name": "Mail.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Mail.flplugin" + }, + { + "value": 8, + "name": "QuickLook.flplugin", + "path": "CoreServices/SetupAssistantPlugins/QuickLook.flplugin" + }, + { + "value": 8, + "name": "Safari.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Safari.flplugin" + }, + { + "value": 8, + "name": "ServicesMenu.flplugin", + "path": "CoreServices/SetupAssistantPlugins/ServicesMenu.flplugin" + }, + { + "value": 8, + "name": "SoftwareUpdateActions.flplugin", + "path": "CoreServices/SetupAssistantPlugins/SoftwareUpdateActions.flplugin" + }, + { + "value": 8, + "name": "Spotlight.flplugin", + "path": "CoreServices/SetupAssistantPlugins/Spotlight.flplugin" + }, + { + "value": 16, + "name": "UAU.flplugin", + "path": "CoreServices/SetupAssistantPlugins/UAU.flplugin" + } + ] + }, + { + "value": 48, + "name": "SocialPushAgent.app", + "path": "CoreServices/SocialPushAgent.app", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "CoreServices/SocialPushAgent.app/Contents" + } + ] + }, + { + "value": 2196, + "name": "SoftwareUpdate.app", + "path": "CoreServices/SoftwareUpdate.app", + "children": [ + { + "value": 2196, + "name": "Contents", + "path": "CoreServices/SoftwareUpdate.app/Contents" + } + ] + }, + { + "value": 856, + "name": "Spotlight.app", + "path": "CoreServices/Spotlight.app", + "children": [ + { + "value": 856, + "name": "Contents", + "path": "CoreServices/Spotlight.app/Contents" + } + ] + }, + { + "value": 384, + "name": "SystemEvents.app", + "path": "CoreServices/SystemEvents.app", + "children": [ + { + "value": 384, + "name": "Contents", + "path": "CoreServices/SystemEvents.app/Contents" + } + ] + }, + { + "value": 2152, + "name": "SystemImage Utility.app", + "path": "CoreServices/SystemImage Utility.app", + "children": [ + { + "value": 2152, + "name": "Contents", + "path": "CoreServices/SystemImage Utility.app/Contents" + } + ] + }, + { + "value": 0, + "name": "SystemFolderLocalizations", + "path": "CoreServices/SystemFolderLocalizations", + "children": [ + { + "value": 0, + "name": "ar.lproj", + "path": "CoreServices/SystemFolderLocalizations/ar.lproj" + }, + { + "value": 0, + "name": "ca.lproj", + "path": "CoreServices/SystemFolderLocalizations/ca.lproj" + }, + { + "value": 0, + "name": "cs.lproj", + "path": "CoreServices/SystemFolderLocalizations/cs.lproj" + }, + { + "value": 0, + "name": "da.lproj", + "path": "CoreServices/SystemFolderLocalizations/da.lproj" + }, + { + "value": 0, + "name": "de.lproj", + "path": "CoreServices/SystemFolderLocalizations/de.lproj" + }, + { + "value": 0, + "name": "el.lproj", + "path": "CoreServices/SystemFolderLocalizations/el.lproj" + }, + { + "value": 0, + "name": "en.lproj", + "path": "CoreServices/SystemFolderLocalizations/en.lproj" + }, + { + "value": 0, + "name": "es.lproj", + "path": "CoreServices/SystemFolderLocalizations/es.lproj" + }, + { + "value": 0, + "name": "fi.lproj", + "path": "CoreServices/SystemFolderLocalizations/fi.lproj" + }, + { + "value": 0, + "name": "fr.lproj", + "path": "CoreServices/SystemFolderLocalizations/fr.lproj" + }, + { + "value": 0, + "name": "he.lproj", + "path": "CoreServices/SystemFolderLocalizations/he.lproj" + }, + { + "value": 0, + "name": "hr.lproj", + "path": "CoreServices/SystemFolderLocalizations/hr.lproj" + }, + { + "value": 0, + "name": "hu.lproj", + "path": "CoreServices/SystemFolderLocalizations/hu.lproj" + }, + { + "value": 0, + "name": "id.lproj", + "path": "CoreServices/SystemFolderLocalizations/id.lproj" + }, + { + "value": 0, + "name": "it.lproj", + "path": "CoreServices/SystemFolderLocalizations/it.lproj" + }, + { + "value": 0, + "name": "ja.lproj", + "path": "CoreServices/SystemFolderLocalizations/ja.lproj" + }, + { + "value": 0, + "name": "ko.lproj", + "path": "CoreServices/SystemFolderLocalizations/ko.lproj" + }, + { + "value": 0, + "name": "ms.lproj", + "path": "CoreServices/SystemFolderLocalizations/ms.lproj" + }, + { + "value": 0, + "name": "nl.lproj", + "path": "CoreServices/SystemFolderLocalizations/nl.lproj" + }, + { + "value": 0, + "name": "no.lproj", + "path": "CoreServices/SystemFolderLocalizations/no.lproj" + }, + { + "value": 0, + "name": "pl.lproj", + "path": "CoreServices/SystemFolderLocalizations/pl.lproj" + }, + { + "value": 0, + "name": "pt.lproj", + "path": "CoreServices/SystemFolderLocalizations/pt.lproj" + }, + { + "value": 0, + "name": "pt_PT.lproj", + "path": "CoreServices/SystemFolderLocalizations/pt_PT.lproj" + }, + { + "value": 0, + "name": "ro.lproj", + "path": "CoreServices/SystemFolderLocalizations/ro.lproj" + }, + { + "value": 0, + "name": "ru.lproj", + "path": "CoreServices/SystemFolderLocalizations/ru.lproj" + }, + { + "value": 0, + "name": "sk.lproj", + "path": "CoreServices/SystemFolderLocalizations/sk.lproj" + }, + { + "value": 0, + "name": "sv.lproj", + "path": "CoreServices/SystemFolderLocalizations/sv.lproj" + }, + { + "value": 0, + "name": "th.lproj", + "path": "CoreServices/SystemFolderLocalizations/th.lproj" + }, + { + "value": 0, + "name": "tr.lproj", + "path": "CoreServices/SystemFolderLocalizations/tr.lproj" + }, + { + "value": 0, + "name": "uk.lproj", + "path": "CoreServices/SystemFolderLocalizations/uk.lproj" + }, + { + "value": 0, + "name": "vi.lproj", + "path": "CoreServices/SystemFolderLocalizations/vi.lproj" + }, + { + "value": 0, + "name": "zh_CN.lproj", + "path": "CoreServices/SystemFolderLocalizations/zh_CN.lproj" + }, + { + "value": 0, + "name": "zh_TW.lproj", + "path": "CoreServices/SystemFolderLocalizations/zh_TW.lproj" + } + ] + }, + { + "value": 852, + "name": "SystemUIServer.app", + "path": "CoreServices/SystemUIServer.app", + "children": [ + { + "value": 852, + "name": "Contents", + "path": "CoreServices/SystemUIServer.app/Contents" + } + ] + }, + { + "value": 132, + "name": "SystemVersion.bundle", + "path": "CoreServices/SystemVersion.bundle", + "children": [ + { + "value": 4, + "name": "ar.lproj", + "path": "CoreServices/SystemVersion.bundle/ar.lproj" + }, + { + "value": 4, + "name": "ca.lproj", + "path": "CoreServices/SystemVersion.bundle/ca.lproj" + }, + { + "value": 4, + "name": "cs.lproj", + "path": "CoreServices/SystemVersion.bundle/cs.lproj" + }, + { + "value": 4, + "name": "da.lproj", + "path": "CoreServices/SystemVersion.bundle/da.lproj" + }, + { + "value": 4, + "name": "Dutch.lproj", + "path": "CoreServices/SystemVersion.bundle/Dutch.lproj" + }, + { + "value": 4, + "name": "el.lproj", + "path": "CoreServices/SystemVersion.bundle/el.lproj" + }, + { + "value": 4, + "name": "English.lproj", + "path": "CoreServices/SystemVersion.bundle/English.lproj" + }, + { + "value": 4, + "name": "fi.lproj", + "path": "CoreServices/SystemVersion.bundle/fi.lproj" + }, + { + "value": 4, + "name": "French.lproj", + "path": "CoreServices/SystemVersion.bundle/French.lproj" + }, + { + "value": 4, + "name": "German.lproj", + "path": "CoreServices/SystemVersion.bundle/German.lproj" + }, + { + "value": 4, + "name": "he.lproj", + "path": "CoreServices/SystemVersion.bundle/he.lproj" + }, + { + "value": 4, + "name": "hr.lproj", + "path": "CoreServices/SystemVersion.bundle/hr.lproj" + }, + { + "value": 4, + "name": "hu.lproj", + "path": "CoreServices/SystemVersion.bundle/hu.lproj" + }, + { + "value": 4, + "name": "id.lproj", + "path": "CoreServices/SystemVersion.bundle/id.lproj" + }, + { + "value": 4, + "name": "Italian.lproj", + "path": "CoreServices/SystemVersion.bundle/Italian.lproj" + }, + { + "value": 4, + "name": "Japanese.lproj", + "path": "CoreServices/SystemVersion.bundle/Japanese.lproj" + }, + { + "value": 4, + "name": "ko.lproj", + "path": "CoreServices/SystemVersion.bundle/ko.lproj" + }, + { + "value": 4, + "name": "ms.lproj", + "path": "CoreServices/SystemVersion.bundle/ms.lproj" + }, + { + "value": 4, + "name": "no.lproj", + "path": "CoreServices/SystemVersion.bundle/no.lproj" + }, + { + "value": 4, + "name": "pl.lproj", + "path": "CoreServices/SystemVersion.bundle/pl.lproj" + }, + { + "value": 4, + "name": "pt.lproj", + "path": "CoreServices/SystemVersion.bundle/pt.lproj" + }, + { + "value": 4, + "name": "pt_PT.lproj", + "path": "CoreServices/SystemVersion.bundle/pt_PT.lproj" + }, + { + "value": 4, + "name": "ro.lproj", + "path": "CoreServices/SystemVersion.bundle/ro.lproj" + }, + { + "value": 4, + "name": "ru.lproj", + "path": "CoreServices/SystemVersion.bundle/ru.lproj" + }, + { + "value": 4, + "name": "sk.lproj", + "path": "CoreServices/SystemVersion.bundle/sk.lproj" + }, + { + "value": 4, + "name": "Spanish.lproj", + "path": "CoreServices/SystemVersion.bundle/Spanish.lproj" + }, + { + "value": 4, + "name": "sv.lproj", + "path": "CoreServices/SystemVersion.bundle/sv.lproj" + }, + { + "value": 4, + "name": "th.lproj", + "path": "CoreServices/SystemVersion.bundle/th.lproj" + }, + { + "value": 4, + "name": "tr.lproj", + "path": "CoreServices/SystemVersion.bundle/tr.lproj" + }, + { + "value": 4, + "name": "uk.lproj", + "path": "CoreServices/SystemVersion.bundle/uk.lproj" + }, + { + "value": 4, + "name": "vi.lproj", + "path": "CoreServices/SystemVersion.bundle/vi.lproj" + }, + { + "value": 4, + "name": "zh_CN.lproj", + "path": "CoreServices/SystemVersion.bundle/zh_CN.lproj" + }, + { + "value": 4, + "name": "zh_TW.lproj", + "path": "CoreServices/SystemVersion.bundle/zh_TW.lproj" + } + ] + }, + { + "value": 3148, + "name": "TicketViewer.app", + "path": "CoreServices/TicketViewer.app", + "children": [ + { + "value": 3148, + "name": "Contents", + "path": "CoreServices/TicketViewer.app/Contents" + } + ] + }, + { + "value": 532, + "name": "TypographyPanel.bundle", + "path": "CoreServices/TypographyPanel.bundle", + "children": [ + { + "value": 532, + "name": "Contents", + "path": "CoreServices/TypographyPanel.bundle/Contents" + } + ] + }, + { + "value": 676, + "name": "UniversalAccessControl.app", + "path": "CoreServices/UniversalAccessControl.app", + "children": [ + { + "value": 676, + "name": "Contents", + "path": "CoreServices/UniversalAccessControl.app/Contents" + } + ] + }, + { + "value": 52, + "name": "UnmountAssistantAgent.app", + "path": "CoreServices/UnmountAssistantAgent.app", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "CoreServices/UnmountAssistantAgent.app/Contents" + } + ] + }, + { + "value": 60, + "name": "UserNotificationCenter.app", + "path": "CoreServices/UserNotificationCenter.app", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "CoreServices/UserNotificationCenter.app/Contents" + } + ] + }, + { + "value": 456, + "name": "VoiceOver.app", + "path": "CoreServices/VoiceOver.app", + "children": [ + { + "value": 456, + "name": "Contents", + "path": "CoreServices/VoiceOver.app/Contents" + } + ] + }, + { + "value": 44, + "name": "XsanManagerDaemon.bundle", + "path": "CoreServices/XsanManagerDaemon.bundle", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "CoreServices/XsanManagerDaemon.bundle/Contents" + } + ] + }, + { + "value": 844, + "name": "ZoomWindow.app", + "path": "CoreServices/ZoomWindow.app", + "children": [ + { + "value": 844, + "name": "Contents", + "path": "CoreServices/ZoomWindow.app/Contents" + } + ] + } + ] + }, + { + "value": 72, + "name": "DirectoryServices", + "path": "DirectoryServices", + "children": [ + { + "value": 0, + "name": "DefaultLocalDB", + "path": "DirectoryServices/DefaultLocalDB" + }, + { + "value": 72, + "name": "dscl", + "path": "DirectoryServices/dscl", + "children": [ + { + "value": 44, + "name": "mcxcl.dsclext", + "path": "DirectoryServices/dscl/mcxcl.dsclext" + }, + { + "value": 28, + "name": "mcxProfiles.dsclext", + "path": "DirectoryServices/dscl/mcxProfiles.dsclext" + } + ] + }, + { + "value": 0, + "name": "Templates", + "path": "DirectoryServices/Templates", + "children": [ + { + "value": 0, + "name": "LDAPv3", + "path": "DirectoryServices/Templates/LDAPv3" + } + ] + } + ] + }, + { + "value": 0, + "name": "Displays", + "path": "Displays", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "Displays/_CodeSignature" + }, + { + "value": 0, + "name": "Overrides", + "path": "Displays/Overrides", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Displays/Overrides/Contents" + }, + { + "value": 0, + "name": "DisplayVendorID-11a9", + "path": "Displays/Overrides/DisplayVendorID-11a9" + }, + { + "value": 0, + "name": "DisplayVendorID-2283", + "path": "Displays/Overrides/DisplayVendorID-2283" + }, + { + "value": 0, + "name": "DisplayVendorID-34a9", + "path": "Displays/Overrides/DisplayVendorID-34a9" + }, + { + "value": 0, + "name": "DisplayVendorID-38a3", + "path": "Displays/Overrides/DisplayVendorID-38a3" + }, + { + "value": 0, + "name": "DisplayVendorID-4c2d", + "path": "Displays/Overrides/DisplayVendorID-4c2d" + }, + { + "value": 0, + "name": "DisplayVendorID-4dd9", + "path": "Displays/Overrides/DisplayVendorID-4dd9" + }, + { + "value": 0, + "name": "DisplayVendorID-5a63", + "path": "Displays/Overrides/DisplayVendorID-5a63" + }, + { + "value": 0, + "name": "DisplayVendorID-5b4", + "path": "Displays/Overrides/DisplayVendorID-5b4" + }, + { + "value": 0, + "name": "DisplayVendorID-610", + "path": "Displays/Overrides/DisplayVendorID-610" + }, + { + "value": 0, + "name": "DisplayVendorID-756e6b6e", + "path": "Displays/Overrides/DisplayVendorID-756e6b6e" + }, + { + "value": 0, + "name": "DisplayVendorID-daf", + "path": "Displays/Overrides/DisplayVendorID-daf" + } + ] + } + ] + }, + { + "value": 16, + "name": "DTDs", + "path": "DTDs" + }, + { + "value": 400116, + "name": "Extensions", + "path": "Extensions", + "children": [ + { + "value": 0, + "name": "10.5", + "path": "Extensions/10.5" + }, + { + "value": 0, + "name": "10.6", + "path": "Extensions/10.6" + }, + { + "value": 116, + "name": "Accusys6xxxx.kext", + "path": "Extensions/Accusys6xxxx.kext", + "children": [ + { + "value": 116, + "name": "Contents", + "path": "Extensions/Accusys6xxxx.kext/Contents" + } + ] + }, + { + "value": 1236, + "name": "acfs.kext", + "path": "Extensions/acfs.kext", + "children": [ + { + "value": 1236, + "name": "Contents", + "path": "Extensions/acfs.kext/Contents" + } + ] + }, + { + "value": 32, + "name": "acfsctl.kext", + "path": "Extensions/acfsctl.kext", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Extensions/acfsctl.kext/Contents" + } + ] + }, + { + "value": 196, + "name": "ALF.kext", + "path": "Extensions/ALF.kext", + "children": [ + { + "value": 196, + "name": "Contents", + "path": "Extensions/ALF.kext/Contents" + } + ] + }, + { + "value": 1836, + "name": "AMD2400Controller.kext", + "path": "Extensions/AMD2400Controller.kext", + "children": [ + { + "value": 1836, + "name": "Contents", + "path": "Extensions/AMD2400Controller.kext/Contents" + } + ] + }, + { + "value": 1840, + "name": "AMD2600Controller.kext", + "path": "Extensions/AMD2600Controller.kext", + "children": [ + { + "value": 1840, + "name": "Contents", + "path": "Extensions/AMD2600Controller.kext/Contents" + } + ] + }, + { + "value": 1848, + "name": "AMD3800Controller.kext", + "path": "Extensions/AMD3800Controller.kext", + "children": [ + { + "value": 1848, + "name": "Contents", + "path": "Extensions/AMD3800Controller.kext/Contents" + } + ] + }, + { + "value": 1828, + "name": "AMD4600Controller.kext", + "path": "Extensions/AMD4600Controller.kext", + "children": [ + { + "value": 1828, + "name": "Contents", + "path": "Extensions/AMD4600Controller.kext/Contents" + } + ] + }, + { + "value": 1820, + "name": "AMD4800Controller.kext", + "path": "Extensions/AMD4800Controller.kext", + "children": [ + { + "value": 1820, + "name": "Contents", + "path": "Extensions/AMD4800Controller.kext/Contents" + } + ] + }, + { + "value": 2268, + "name": "AMD5000Controller.kext", + "path": "Extensions/AMD5000Controller.kext", + "children": [ + { + "value": 2268, + "name": "Contents", + "path": "Extensions/AMD5000Controller.kext/Contents" + } + ] + }, + { + "value": 2292, + "name": "AMD6000Controller.kext", + "path": "Extensions/AMD6000Controller.kext", + "children": [ + { + "value": 2292, + "name": "Contents", + "path": "Extensions/AMD6000Controller.kext/Contents" + } + ] + }, + { + "value": 2316, + "name": "AMD7000Controller.kext", + "path": "Extensions/AMD7000Controller.kext", + "children": [ + { + "value": 2316, + "name": "Contents", + "path": "Extensions/AMD7000Controller.kext/Contents" + } + ] + }, + { + "value": 164, + "name": "AMDFramebuffer.kext", + "path": "Extensions/AMDFramebuffer.kext", + "children": [ + { + "value": 164, + "name": "Contents", + "path": "Extensions/AMDFramebuffer.kext/Contents" + } + ] + }, + { + "value": 1572, + "name": "AMDRadeonVADriver.bundle", + "path": "Extensions/AMDRadeonVADriver.bundle", + "children": [ + { + "value": 1572, + "name": "Contents", + "path": "Extensions/AMDRadeonVADriver.bundle/Contents" + } + ] + }, + { + "value": 4756, + "name": "AMDRadeonX3000.kext", + "path": "Extensions/AMDRadeonX3000.kext", + "children": [ + { + "value": 4756, + "name": "Contents", + "path": "Extensions/AMDRadeonX3000.kext/Contents" + } + ] + }, + { + "value": 11224, + "name": "AMDRadeonX3000GLDriver.bundle", + "path": "Extensions/AMDRadeonX3000GLDriver.bundle", + "children": [ + { + "value": 11224, + "name": "Contents", + "path": "Extensions/AMDRadeonX3000GLDriver.bundle/Contents" + } + ] + }, + { + "value": 4532, + "name": "AMDRadeonX4000.kext", + "path": "Extensions/AMDRadeonX4000.kext", + "children": [ + { + "value": 4532, + "name": "Contents", + "path": "Extensions/AMDRadeonX4000.kext/Contents" + } + ] + }, + { + "value": 17144, + "name": "AMDRadeonX4000GLDriver.bundle", + "path": "Extensions/AMDRadeonX4000GLDriver.bundle", + "children": [ + { + "value": 17144, + "name": "Contents", + "path": "Extensions/AMDRadeonX4000GLDriver.bundle/Contents" + } + ] + }, + { + "value": 544, + "name": "AMDSupport.kext", + "path": "Extensions/AMDSupport.kext", + "children": [ + { + "value": 544, + "name": "Contents", + "path": "Extensions/AMDSupport.kext/Contents" + } + ] + }, + { + "value": 148, + "name": "Apple16X50Serial.kext", + "path": "Extensions/Apple16X50Serial.kext", + "children": [ + { + "value": 148, + "name": "Contents", + "path": "Extensions/Apple16X50Serial.kext/Contents" + } + ] + }, + { + "value": 60, + "name": "Apple_iSight.kext", + "path": "Extensions/Apple_iSight.kext", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Extensions/Apple_iSight.kext/Contents" + } + ] + }, + { + "value": 596, + "name": "AppleACPIPlatform.kext", + "path": "Extensions/AppleACPIPlatform.kext", + "children": [ + { + "value": 596, + "name": "Contents", + "path": "Extensions/AppleACPIPlatform.kext/Contents" + } + ] + }, + { + "value": 208, + "name": "AppleAHCIPort.kext", + "path": "Extensions/AppleAHCIPort.kext", + "children": [ + { + "value": 208, + "name": "Contents", + "path": "Extensions/AppleAHCIPort.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleAPIC.kext", + "path": "Extensions/AppleAPIC.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/AppleAPIC.kext/Contents" + } + ] + }, + { + "value": 84, + "name": "AppleBacklight.kext", + "path": "Extensions/AppleBacklight.kext", + "children": [ + { + "value": 84, + "name": "Contents", + "path": "Extensions/AppleBacklight.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleBacklightExpert.kext", + "path": "Extensions/AppleBacklightExpert.kext", + "children": [ + { + "value": 4, + "name": "_CodeSignature", + "path": "Extensions/AppleBacklightExpert.kext/_CodeSignature" + } + ] + }, + { + "value": 180, + "name": "AppleBluetoothMultitouch.kext", + "path": "Extensions/AppleBluetoothMultitouch.kext", + "children": [ + { + "value": 180, + "name": "Contents", + "path": "Extensions/AppleBluetoothMultitouch.kext/Contents" + } + ] + }, + { + "value": 80, + "name": "AppleBMC.kext", + "path": "Extensions/AppleBMC.kext", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Extensions/AppleBMC.kext/Contents" + } + ] + }, + { + "value": 152, + "name": "AppleCameraInterface.kext", + "path": "Extensions/AppleCameraInterface.kext", + "children": [ + { + "value": 152, + "name": "Contents", + "path": "Extensions/AppleCameraInterface.kext/Contents" + } + ] + }, + { + "value": 152, + "name": "AppleEFIRuntime.kext", + "path": "Extensions/AppleEFIRuntime.kext", + "children": [ + { + "value": 152, + "name": "Contents", + "path": "Extensions/AppleEFIRuntime.kext/Contents" + } + ] + }, + { + "value": 88, + "name": "AppleFDEKeyStore.kext", + "path": "Extensions/AppleFDEKeyStore.kext", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "Extensions/AppleFDEKeyStore.kext/Contents" + } + ] + }, + { + "value": 48, + "name": "AppleFileSystemDriver.kext", + "path": "Extensions/AppleFileSystemDriver.kext", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "Extensions/AppleFileSystemDriver.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleFSCompressionTypeDataless.kext", + "path": "Extensions/AppleFSCompressionTypeDataless.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/AppleFSCompressionTypeDataless.kext/Contents" + } + ] + }, + { + "value": 60, + "name": "AppleFSCompressionTypeZlib.kext", + "path": "Extensions/AppleFSCompressionTypeZlib.kext", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Extensions/AppleFSCompressionTypeZlib.kext/Contents" + } + ] + }, + { + "value": 628, + "name": "AppleFWAudio.kext", + "path": "Extensions/AppleFWAudio.kext", + "children": [ + { + "value": 628, + "name": "Contents", + "path": "Extensions/AppleFWAudio.kext/Contents" + } + ] + }, + { + "value": 396, + "name": "AppleGraphicsControl.kext", + "path": "Extensions/AppleGraphicsControl.kext", + "children": [ + { + "value": 396, + "name": "Contents", + "path": "Extensions/AppleGraphicsControl.kext/Contents" + } + ] + }, + { + "value": 276, + "name": "AppleGraphicsPowerManagement.kext", + "path": "Extensions/AppleGraphicsPowerManagement.kext", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Extensions/AppleGraphicsPowerManagement.kext/Contents" + } + ] + }, + { + "value": 3112, + "name": "AppleHDA.kext", + "path": "Extensions/AppleHDA.kext", + "children": [ + { + "value": 3112, + "name": "Contents", + "path": "Extensions/AppleHDA.kext/Contents" + } + ] + }, + { + "value": 488, + "name": "AppleHIDKeyboard.kext", + "path": "Extensions/AppleHIDKeyboard.kext", + "children": [ + { + "value": 488, + "name": "Contents", + "path": "Extensions/AppleHIDKeyboard.kext/Contents" + } + ] + }, + { + "value": 184, + "name": "AppleHIDMouse.kext", + "path": "Extensions/AppleHIDMouse.kext", + "children": [ + { + "value": 184, + "name": "Contents", + "path": "Extensions/AppleHIDMouse.kext/Contents" + } + ] + }, + { + "value": 52, + "name": "AppleHPET.kext", + "path": "Extensions/AppleHPET.kext", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Extensions/AppleHPET.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "AppleHSSPIHIDDriver.kext", + "path": "Extensions/AppleHSSPIHIDDriver.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/AppleHSSPIHIDDriver.kext/Contents" + } + ] + }, + { + "value": 144, + "name": "AppleHSSPISupport.kext", + "path": "Extensions/AppleHSSPISupport.kext", + "children": [ + { + "value": 144, + "name": "Contents", + "path": "Extensions/AppleHSSPISupport.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "AppleHWAccess.kext", + "path": "Extensions/AppleHWAccess.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/AppleHWAccess.kext/Contents" + } + ] + }, + { + "value": 72, + "name": "AppleHWSensor.kext", + "path": "Extensions/AppleHWSensor.kext", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Extensions/AppleHWSensor.kext/Contents" + } + ] + }, + { + "value": 244, + "name": "AppleIntelCPUPowerManagement.kext", + "path": "Extensions/AppleIntelCPUPowerManagement.kext", + "children": [ + { + "value": 244, + "name": "Contents", + "path": "Extensions/AppleIntelCPUPowerManagement.kext/Contents" + } + ] + }, + { + "value": 52, + "name": "AppleIntelCPUPowerManagementClient.kext", + "path": "Extensions/AppleIntelCPUPowerManagementClient.kext", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Extensions/AppleIntelCPUPowerManagementClient.kext/Contents" + } + ] + }, + { + "value": 480, + "name": "AppleIntelFramebufferAzul.kext", + "path": "Extensions/AppleIntelFramebufferAzul.kext", + "children": [ + { + "value": 480, + "name": "Contents", + "path": "Extensions/AppleIntelFramebufferAzul.kext/Contents" + } + ] + }, + { + "value": 492, + "name": "AppleIntelFramebufferCapri.kext", + "path": "Extensions/AppleIntelFramebufferCapri.kext", + "children": [ + { + "value": 492, + "name": "Contents", + "path": "Extensions/AppleIntelFramebufferCapri.kext/Contents" + } + ] + }, + { + "value": 604, + "name": "AppleIntelHD3000Graphics.kext", + "path": "Extensions/AppleIntelHD3000Graphics.kext", + "children": [ + { + "value": 604, + "name": "Contents", + "path": "Extensions/AppleIntelHD3000Graphics.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "AppleIntelHD3000GraphicsGA.plugin", + "path": "Extensions/AppleIntelHD3000GraphicsGA.plugin", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/AppleIntelHD3000GraphicsGA.plugin/Contents" + } + ] + }, + { + "value": 9164, + "name": "AppleIntelHD3000GraphicsGLDriver.bundle", + "path": "Extensions/AppleIntelHD3000GraphicsGLDriver.bundle", + "children": [ + { + "value": 9164, + "name": "Contents", + "path": "Extensions/AppleIntelHD3000GraphicsGLDriver.bundle/Contents" + } + ] + }, + { + "value": 2520, + "name": "AppleIntelHD3000GraphicsVADriver.bundle", + "path": "Extensions/AppleIntelHD3000GraphicsVADriver.bundle", + "children": [ + { + "value": 2520, + "name": "Contents", + "path": "Extensions/AppleIntelHD3000GraphicsVADriver.bundle/Contents" + } + ] + }, + { + "value": 536, + "name": "AppleIntelHD4000Graphics.kext", + "path": "Extensions/AppleIntelHD4000Graphics.kext", + "children": [ + { + "value": 536, + "name": "Contents", + "path": "Extensions/AppleIntelHD4000Graphics.kext/Contents" + } + ] + }, + { + "value": 22996, + "name": "AppleIntelHD4000GraphicsGLDriver.bundle", + "path": "Extensions/AppleIntelHD4000GraphicsGLDriver.bundle", + "children": [ + { + "value": 22996, + "name": "Contents", + "path": "Extensions/AppleIntelHD4000GraphicsGLDriver.bundle/Contents" + } + ] + }, + { + "value": 3608, + "name": "AppleIntelHD4000GraphicsVADriver.bundle", + "path": "Extensions/AppleIntelHD4000GraphicsVADriver.bundle", + "children": [ + { + "value": 3608, + "name": "Contents", + "path": "Extensions/AppleIntelHD4000GraphicsVADriver.bundle/Contents" + } + ] + }, + { + "value": 564, + "name": "AppleIntelHD5000Graphics.kext", + "path": "Extensions/AppleIntelHD5000Graphics.kext", + "children": [ + { + "value": 564, + "name": "Contents", + "path": "Extensions/AppleIntelHD5000Graphics.kext/Contents" + } + ] + }, + { + "value": 20692, + "name": "AppleIntelHD5000GraphicsGLDriver.bundle", + "path": "Extensions/AppleIntelHD5000GraphicsGLDriver.bundle", + "children": [ + { + "value": 20692, + "name": "Contents", + "path": "Extensions/AppleIntelHD5000GraphicsGLDriver.bundle/Contents" + } + ] + }, + { + "value": 6120, + "name": "AppleIntelHD5000GraphicsVADriver.bundle", + "path": "Extensions/AppleIntelHD5000GraphicsVADriver.bundle", + "children": [ + { + "value": 6120, + "name": "Contents", + "path": "Extensions/AppleIntelHD5000GraphicsVADriver.bundle/Contents" + } + ] + }, + { + "value": 976, + "name": "AppleIntelHDGraphics.kext", + "path": "Extensions/AppleIntelHDGraphics.kext", + "children": [ + { + "value": 976, + "name": "Contents", + "path": "Extensions/AppleIntelHDGraphics.kext/Contents" + } + ] + }, + { + "value": 148, + "name": "AppleIntelHDGraphicsFB.kext", + "path": "Extensions/AppleIntelHDGraphicsFB.kext", + "children": [ + { + "value": 148, + "name": "Contents", + "path": "Extensions/AppleIntelHDGraphicsFB.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "AppleIntelHDGraphicsGA.plugin", + "path": "Extensions/AppleIntelHDGraphicsGA.plugin", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/AppleIntelHDGraphicsGA.plugin/Contents" + } + ] + }, + { + "value": 9108, + "name": "AppleIntelHDGraphicsGLDriver.bundle", + "path": "Extensions/AppleIntelHDGraphicsGLDriver.bundle", + "children": [ + { + "value": 9108, + "name": "Contents", + "path": "Extensions/AppleIntelHDGraphicsGLDriver.bundle/Contents" + } + ] + }, + { + "value": 104, + "name": "AppleIntelHDGraphicsVADriver.bundle", + "path": "Extensions/AppleIntelHDGraphicsVADriver.bundle", + "children": [ + { + "value": 104, + "name": "Contents", + "path": "Extensions/AppleIntelHDGraphicsVADriver.bundle/Contents" + } + ] + }, + { + "value": 96, + "name": "AppleIntelHSWVA.bundle", + "path": "Extensions/AppleIntelHSWVA.bundle", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Extensions/AppleIntelHSWVA.bundle/Contents" + } + ] + }, + { + "value": 96, + "name": "AppleIntelIVBVA.bundle", + "path": "Extensions/AppleIntelIVBVA.bundle", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Extensions/AppleIntelIVBVA.bundle/Contents" + } + ] + }, + { + "value": 72, + "name": "AppleIntelLpssDmac.kext", + "path": "Extensions/AppleIntelLpssDmac.kext", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Extensions/AppleIntelLpssDmac.kext/Contents" + } + ] + }, + { + "value": 76, + "name": "AppleIntelLpssGspi.kext", + "path": "Extensions/AppleIntelLpssGspi.kext", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "Extensions/AppleIntelLpssGspi.kext/Contents" + } + ] + }, + { + "value": 132, + "name": "AppleIntelLpssSpiController.kext", + "path": "Extensions/AppleIntelLpssSpiController.kext", + "children": [ + { + "value": 132, + "name": "Contents", + "path": "Extensions/AppleIntelLpssSpiController.kext/Contents" + } + ] + }, + { + "value": 308, + "name": "AppleIntelSNBGraphicsFB.kext", + "path": "Extensions/AppleIntelSNBGraphicsFB.kext", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "Extensions/AppleIntelSNBGraphicsFB.kext/Contents" + } + ] + }, + { + "value": 144, + "name": "AppleIntelSNBVA.bundle", + "path": "Extensions/AppleIntelSNBVA.bundle", + "children": [ + { + "value": 144, + "name": "Contents", + "path": "Extensions/AppleIntelSNBVA.bundle/Contents" + } + ] + }, + { + "value": 72, + "name": "AppleIRController.kext", + "path": "Extensions/AppleIRController.kext", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Extensions/AppleIRController.kext/Contents" + } + ] + }, + { + "value": 208, + "name": "AppleKextExcludeList.kext", + "path": "Extensions/AppleKextExcludeList.kext", + "children": [ + { + "value": 208, + "name": "Contents", + "path": "Extensions/AppleKextExcludeList.kext/Contents" + } + ] + }, + { + "value": 120, + "name": "AppleKeyStore.kext", + "path": "Extensions/AppleKeyStore.kext", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Extensions/AppleKeyStore.kext/Contents" + } + ] + }, + { + "value": 48, + "name": "AppleKeyswitch.kext", + "path": "Extensions/AppleKeyswitch.kext", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "Extensions/AppleKeyswitch.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleLPC.kext", + "path": "Extensions/AppleLPC.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/AppleLPC.kext/Contents" + } + ] + }, + { + "value": 188, + "name": "AppleLSIFusionMPT.kext", + "path": "Extensions/AppleLSIFusionMPT.kext", + "children": [ + { + "value": 188, + "name": "Contents", + "path": "Extensions/AppleLSIFusionMPT.kext/Contents" + } + ] + }, + { + "value": 36, + "name": "AppleMatch.kext", + "path": "Extensions/AppleMatch.kext", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Extensions/AppleMatch.kext/Contents" + } + ] + }, + { + "value": 140, + "name": "AppleMCCSControl.kext", + "path": "Extensions/AppleMCCSControl.kext", + "children": [ + { + "value": 140, + "name": "Contents", + "path": "Extensions/AppleMCCSControl.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "AppleMCEDriver.kext", + "path": "Extensions/AppleMCEDriver.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/AppleMCEDriver.kext/Contents" + } + ] + }, + { + "value": 76, + "name": "AppleMCP89RootPortPM.kext", + "path": "Extensions/AppleMCP89RootPortPM.kext", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "Extensions/AppleMCP89RootPortPM.kext/Contents" + } + ] + }, + { + "value": 156, + "name": "AppleMIDIFWDriver.plugin", + "path": "Extensions/AppleMIDIFWDriver.plugin", + "children": [ + { + "value": 156, + "name": "Contents", + "path": "Extensions/AppleMIDIFWDriver.plugin/Contents" + } + ] + }, + { + "value": 236, + "name": "AppleMIDIIACDriver.plugin", + "path": "Extensions/AppleMIDIIACDriver.plugin", + "children": [ + { + "value": 236, + "name": "Contents", + "path": "Extensions/AppleMIDIIACDriver.plugin/Contents" + } + ] + }, + { + "value": 416, + "name": "AppleMIDIRTPDriver.plugin", + "path": "Extensions/AppleMIDIRTPDriver.plugin", + "children": [ + { + "value": 416, + "name": "Contents", + "path": "Extensions/AppleMIDIRTPDriver.plugin/Contents" + } + ] + }, + { + "value": 248, + "name": "AppleMIDIUSBDriver.plugin", + "path": "Extensions/AppleMIDIUSBDriver.plugin", + "children": [ + { + "value": 248, + "name": "Contents", + "path": "Extensions/AppleMIDIUSBDriver.plugin/Contents" + } + ] + }, + { + "value": 68, + "name": "AppleMikeyHIDDriver.kext", + "path": "Extensions/AppleMikeyHIDDriver.kext", + "children": [ + { + "value": 68, + "name": "Contents", + "path": "Extensions/AppleMikeyHIDDriver.kext/Contents" + } + ] + }, + { + "value": 28, + "name": "AppleMobileDevice.kext", + "path": "Extensions/AppleMobileDevice.kext", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Extensions/AppleMobileDevice.kext/Contents" + } + ] + }, + { + "value": 860, + "name": "AppleMultitouchDriver.kext", + "path": "Extensions/AppleMultitouchDriver.kext", + "children": [ + { + "value": 860, + "name": "Contents", + "path": "Extensions/AppleMultitouchDriver.kext/Contents" + } + ] + }, + { + "value": 136, + "name": "ApplePlatformEnabler.kext", + "path": "Extensions/ApplePlatformEnabler.kext", + "children": [ + { + "value": 136, + "name": "Contents", + "path": "Extensions/ApplePlatformEnabler.kext/Contents" + } + ] + }, + { + "value": 240, + "name": "AppleRAID.kext", + "path": "Extensions/AppleRAID.kext", + "children": [ + { + "value": 240, + "name": "Contents", + "path": "Extensions/AppleRAID.kext/Contents" + } + ] + }, + { + "value": 372, + "name": "AppleRAIDCard.kext", + "path": "Extensions/AppleRAIDCard.kext", + "children": [ + { + "value": 372, + "name": "Contents", + "path": "Extensions/AppleRAIDCard.kext/Contents" + } + ] + }, + { + "value": 80, + "name": "AppleRTC.kext", + "path": "Extensions/AppleRTC.kext", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Extensions/AppleRTC.kext/Contents" + } + ] + }, + { + "value": 148, + "name": "AppleSDXC.kext", + "path": "Extensions/AppleSDXC.kext", + "children": [ + { + "value": 148, + "name": "Contents", + "path": "Extensions/AppleSDXC.kext/Contents" + } + ] + }, + { + "value": 76, + "name": "AppleSEP.kext", + "path": "Extensions/AppleSEP.kext", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "Extensions/AppleSEP.kext/Contents" + } + ] + }, + { + "value": 88, + "name": "AppleSmartBatteryManager.kext", + "path": "Extensions/AppleSmartBatteryManager.kext", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "Extensions/AppleSmartBatteryManager.kext/Contents" + } + ] + }, + { + "value": 60, + "name": "AppleSMBIOS.kext", + "path": "Extensions/AppleSMBIOS.kext", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Extensions/AppleSMBIOS.kext/Contents" + } + ] + }, + { + "value": 116, + "name": "AppleSMBusController.kext", + "path": "Extensions/AppleSMBusController.kext", + "children": [ + { + "value": 116, + "name": "Contents", + "path": "Extensions/AppleSMBusController.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleSMBusPCI.kext", + "path": "Extensions/AppleSMBusPCI.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/AppleSMBusPCI.kext/Contents" + } + ] + }, + { + "value": 120, + "name": "AppleSMC.kext", + "path": "Extensions/AppleSMC.kext", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Extensions/AppleSMC.kext/Contents" + } + ] + }, + { + "value": 172, + "name": "AppleSMCLMU.kext", + "path": "Extensions/AppleSMCLMU.kext", + "children": [ + { + "value": 172, + "name": "Contents", + "path": "Extensions/AppleSMCLMU.kext/Contents" + } + ] + }, + { + "value": 88, + "name": "AppleSRP.kext", + "path": "Extensions/AppleSRP.kext", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "Extensions/AppleSRP.kext/Contents" + } + ] + }, + { + "value": 1936, + "name": "AppleStorageDrivers.kext", + "path": "Extensions/AppleStorageDrivers.kext", + "children": [ + { + "value": 1936, + "name": "Contents", + "path": "Extensions/AppleStorageDrivers.kext/Contents" + } + ] + }, + { + "value": 264, + "name": "AppleThunderboltDPAdapters.kext", + "path": "Extensions/AppleThunderboltDPAdapters.kext", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "Extensions/AppleThunderboltDPAdapters.kext/Contents" + } + ] + }, + { + "value": 204, + "name": "AppleThunderboltEDMService.kext", + "path": "Extensions/AppleThunderboltEDMService.kext", + "children": [ + { + "value": 204, + "name": "Contents", + "path": "Extensions/AppleThunderboltEDMService.kext/Contents" + } + ] + }, + { + "value": 216, + "name": "AppleThunderboltIP.kext", + "path": "Extensions/AppleThunderboltIP.kext", + "children": [ + { + "value": 216, + "name": "Contents", + "path": "Extensions/AppleThunderboltIP.kext/Contents" + } + ] + }, + { + "value": 168, + "name": "AppleThunderboltNHI.kext", + "path": "Extensions/AppleThunderboltNHI.kext", + "children": [ + { + "value": 168, + "name": "Contents", + "path": "Extensions/AppleThunderboltNHI.kext/Contents" + } + ] + }, + { + "value": 172, + "name": "AppleThunderboltPCIAdapters.kext", + "path": "Extensions/AppleThunderboltPCIAdapters.kext", + "children": [ + { + "value": 172, + "name": "Contents", + "path": "Extensions/AppleThunderboltPCIAdapters.kext/Contents" + } + ] + }, + { + "value": 164, + "name": "AppleThunderboltUTDM.kext", + "path": "Extensions/AppleThunderboltUTDM.kext", + "children": [ + { + "value": 164, + "name": "Contents", + "path": "Extensions/AppleThunderboltUTDM.kext/Contents" + } + ] + }, + { + "value": 188, + "name": "AppleTopCase.kext", + "path": "Extensions/AppleTopCase.kext", + "children": [ + { + "value": 188, + "name": "Contents", + "path": "Extensions/AppleTopCase.kext/Contents" + } + ] + }, + { + "value": 92, + "name": "AppleTyMCEDriver.kext", + "path": "Extensions/AppleTyMCEDriver.kext", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "Extensions/AppleTyMCEDriver.kext/Contents" + } + ] + }, + { + "value": 72, + "name": "AppleUpstreamUserClient.kext", + "path": "Extensions/AppleUpstreamUserClient.kext", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Extensions/AppleUpstreamUserClient.kext/Contents" + } + ] + }, + { + "value": 408, + "name": "AppleUSBAudio.kext", + "path": "Extensions/AppleUSBAudio.kext", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Extensions/AppleUSBAudio.kext/Contents" + } + ] + }, + { + "value": 76, + "name": "AppleUSBDisplays.kext", + "path": "Extensions/AppleUSBDisplays.kext", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "Extensions/AppleUSBDisplays.kext/Contents" + } + ] + }, + { + "value": 144, + "name": "AppleUSBEthernetHost.kext", + "path": "Extensions/AppleUSBEthernetHost.kext", + "children": [ + { + "value": 144, + "name": "Contents", + "path": "Extensions/AppleUSBEthernetHost.kext/Contents" + } + ] + }, + { + "value": 160, + "name": "AppleUSBMultitouch.kext", + "path": "Extensions/AppleUSBMultitouch.kext", + "children": [ + { + "value": 160, + "name": "Contents", + "path": "Extensions/AppleUSBMultitouch.kext/Contents" + } + ] + }, + { + "value": 728, + "name": "AppleUSBTopCase.kext", + "path": "Extensions/AppleUSBTopCase.kext", + "children": [ + { + "value": 728, + "name": "Contents", + "path": "Extensions/AppleUSBTopCase.kext/Contents" + } + ] + }, + { + "value": 3576, + "name": "AppleVADriver.bundle", + "path": "Extensions/AppleVADriver.bundle", + "children": [ + { + "value": 3576, + "name": "Contents", + "path": "Extensions/AppleVADriver.bundle/Contents" + } + ] + }, + { + "value": 60, + "name": "AppleWWANAutoEject.kext", + "path": "Extensions/AppleWWANAutoEject.kext", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Extensions/AppleWWANAutoEject.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "AppleXsanFilter.kext", + "path": "Extensions/AppleXsanFilter.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/AppleXsanFilter.kext/Contents" + } + ] + }, + { + "value": 2976, + "name": "ATIRadeonX2000.kext", + "path": "Extensions/ATIRadeonX2000.kext", + "children": [ + { + "value": 2976, + "name": "Contents", + "path": "Extensions/ATIRadeonX2000.kext/Contents" + } + ] + }, + { + "value": 88, + "name": "ATIRadeonX2000GA.plugin", + "path": "Extensions/ATIRadeonX2000GA.plugin", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "Extensions/ATIRadeonX2000GA.plugin/Contents" + } + ] + }, + { + "value": 5808, + "name": "ATIRadeonX2000GLDriver.bundle", + "path": "Extensions/ATIRadeonX2000GLDriver.bundle", + "children": [ + { + "value": 5808, + "name": "Contents", + "path": "Extensions/ATIRadeonX2000GLDriver.bundle/Contents" + } + ] + }, + { + "value": 396, + "name": "ATIRadeonX2000VADriver.bundle", + "path": "Extensions/ATIRadeonX2000VADriver.bundle", + "children": [ + { + "value": 396, + "name": "Contents", + "path": "Extensions/ATIRadeonX2000VADriver.bundle/Contents" + } + ] + }, + { + "value": 496, + "name": "ATTOCelerityFC.kext", + "path": "Extensions/ATTOCelerityFC.kext", + "children": [ + { + "value": 496, + "name": "Contents", + "path": "Extensions/ATTOCelerityFC.kext/Contents" + } + ] + }, + { + "value": 268, + "name": "ATTOExpressPCI4.kext", + "path": "Extensions/ATTOExpressPCI4.kext", + "children": [ + { + "value": 268, + "name": "Contents", + "path": "Extensions/ATTOExpressPCI4.kext/Contents" + } + ] + }, + { + "value": 252, + "name": "ATTOExpressSASHBA.kext", + "path": "Extensions/ATTOExpressSASHBA.kext", + "children": [ + { + "value": 252, + "name": "Contents", + "path": "Extensions/ATTOExpressSASHBA.kext/Contents" + } + ] + }, + { + "value": 388, + "name": "ATTOExpressSASHBA3.kext", + "path": "Extensions/ATTOExpressSASHBA3.kext", + "children": [ + { + "value": 388, + "name": "Contents", + "path": "Extensions/ATTOExpressSASHBA3.kext/Contents" + } + ] + }, + { + "value": 212, + "name": "ATTOExpressSASRAID.kext", + "path": "Extensions/ATTOExpressSASRAID.kext", + "children": [ + { + "value": 212, + "name": "Contents", + "path": "Extensions/ATTOExpressSASRAID.kext/Contents" + } + ] + }, + { + "value": 72, + "name": "AudioAUUC.kext", + "path": "Extensions/AudioAUUC.kext", + "children": [ + { + "value": 4, + "name": "_CodeSignature", + "path": "Extensions/AudioAUUC.kext/_CodeSignature" + } + ] + }, + { + "value": 144, + "name": "autofs.kext", + "path": "Extensions/autofs.kext", + "children": [ + { + "value": 144, + "name": "Contents", + "path": "Extensions/autofs.kext/Contents" + } + ] + }, + { + "value": 80, + "name": "BootCache.kext", + "path": "Extensions/BootCache.kext", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Extensions/BootCache.kext/Contents" + } + ] + }, + { + "value": 64, + "name": "cd9660.kext", + "path": "Extensions/cd9660.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/cd9660.kext/Contents" + } + ] + }, + { + "value": 48, + "name": "cddafs.kext", + "path": "Extensions/cddafs.kext", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "Extensions/cddafs.kext/Contents" + } + ] + }, + { + "value": 432, + "name": "CellPhoneHelper.kext", + "path": "Extensions/CellPhoneHelper.kext", + "children": [ + { + "value": 432, + "name": "Contents", + "path": "Extensions/CellPhoneHelper.kext/Contents" + } + ] + }, + { + "value": 0, + "name": "ch34xsigned.kext", + "path": "Extensions/ch34xsigned.kext" + }, + { + "value": 308, + "name": "corecrypto.kext", + "path": "Extensions/corecrypto.kext", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "Extensions/corecrypto.kext/Contents" + } + ] + }, + { + "value": 1324, + "name": "CoreStorage.kext", + "path": "Extensions/CoreStorage.kext", + "children": [ + { + "value": 1324, + "name": "Contents", + "path": "Extensions/CoreStorage.kext/Contents" + } + ] + }, + { + "value": 72, + "name": "DontSteal Mac OS X.kext", + "path": "Extensions/DontSteal Mac OS X.kext", + "children": [ + { + "value": 68, + "name": "Contents", + "path": "Extensions/DontSteal Mac OS X.kext/Contents" + } + ] + }, + { + "value": 36, + "name": "DSACL.ppp", + "path": "Extensions/DSACL.ppp", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "Extensions/DSACL.ppp/Contents" + } + ] + }, + { + "value": 40, + "name": "DSAuth.ppp", + "path": "Extensions/DSAuth.ppp", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Extensions/DSAuth.ppp/Contents" + } + ] + }, + { + "value": 56, + "name": "DVFamily.bundle", + "path": "Extensions/DVFamily.bundle", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/DVFamily.bundle/Contents" + } + ] + }, + { + "value": 312, + "name": "EAP-KRB.ppp", + "path": "Extensions/EAP-KRB.ppp", + "children": [ + { + "value": 312, + "name": "Contents", + "path": "Extensions/EAP-KRB.ppp/Contents" + } + ] + }, + { + "value": 792, + "name": "EAP-RSA.ppp", + "path": "Extensions/EAP-RSA.ppp", + "children": [ + { + "value": 792, + "name": "Contents", + "path": "Extensions/EAP-RSA.ppp/Contents" + } + ] + }, + { + "value": 308, + "name": "EAP-TLS.ppp", + "path": "Extensions/EAP-TLS.ppp", + "children": [ + { + "value": 308, + "name": "Contents", + "path": "Extensions/EAP-TLS.ppp/Contents" + } + ] + }, + { + "value": 88, + "name": "exfat.kext", + "path": "Extensions/exfat.kext", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "Extensions/exfat.kext/Contents" + } + ] + }, + { + "value": 776, + "name": "GeForce.kext", + "path": "Extensions/GeForce.kext", + "children": [ + { + "value": 776, + "name": "Contents", + "path": "Extensions/GeForce.kext/Contents" + } + ] + }, + { + "value": 160, + "name": "GeForceGA.plugin", + "path": "Extensions/GeForceGA.plugin", + "children": [ + { + "value": 160, + "name": "Contents", + "path": "Extensions/GeForceGA.plugin/Contents" + } + ] + }, + { + "value": 67212, + "name": "GeForceGLDriver.bundle", + "path": "Extensions/GeForceGLDriver.bundle", + "children": [ + { + "value": 67212, + "name": "Contents", + "path": "Extensions/GeForceGLDriver.bundle/Contents" + } + ] + }, + { + "value": 1100, + "name": "GeForceTesla.kext", + "path": "Extensions/GeForceTesla.kext", + "children": [ + { + "value": 1100, + "name": "Contents", + "path": "Extensions/GeForceTesla.kext/Contents" + } + ] + }, + { + "value": 67012, + "name": "GeForceTeslaGLDriver.bundle", + "path": "Extensions/GeForceTeslaGLDriver.bundle", + "children": [ + { + "value": 67012, + "name": "Contents", + "path": "Extensions/GeForceTeslaGLDriver.bundle/Contents" + } + ] + }, + { + "value": 1584, + "name": "GeForceTeslaVADriver.bundle", + "path": "Extensions/GeForceTeslaVADriver.bundle", + "children": [ + { + "value": 1584, + "name": "Contents", + "path": "Extensions/GeForceTeslaVADriver.bundle/Contents" + } + ] + }, + { + "value": 1476, + "name": "GeForceVADriver.bundle", + "path": "Extensions/GeForceVADriver.bundle", + "children": [ + { + "value": 1476, + "name": "Contents", + "path": "Extensions/GeForceVADriver.bundle/Contents" + } + ] + }, + { + "value": 212, + "name": "intelhaxm.kext", + "path": "Extensions/intelhaxm.kext", + "children": [ + { + "value": 212, + "name": "Contents", + "path": "Extensions/intelhaxm.kext/Contents" + } + ] + }, + { + "value": 10488, + "name": "IO80211Family.kext", + "path": "Extensions/IO80211Family.kext", + "children": [ + { + "value": 10488, + "name": "Contents", + "path": "Extensions/IO80211Family.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "IOAccelerator2D.plugin", + "path": "Extensions/IOAccelerator2D.plugin", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/IOAccelerator2D.plugin/Contents" + } + ] + }, + { + "value": 448, + "name": "IOAcceleratorFamily.kext", + "path": "Extensions/IOAcceleratorFamily.kext", + "children": [ + { + "value": 448, + "name": "Contents", + "path": "Extensions/IOAcceleratorFamily.kext/Contents" + } + ] + }, + { + "value": 508, + "name": "IOAcceleratorFamily2.kext", + "path": "Extensions/IOAcceleratorFamily2.kext", + "children": [ + { + "value": 508, + "name": "Contents", + "path": "Extensions/IOAcceleratorFamily2.kext/Contents" + } + ] + }, + { + "value": 76, + "name": "IOACPIFamily.kext", + "path": "Extensions/IOACPIFamily.kext", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "Extensions/IOACPIFamily.kext/Contents" + } + ] + }, + { + "value": 448, + "name": "IOAHCIFamily.kext", + "path": "Extensions/IOAHCIFamily.kext", + "children": [ + { + "value": 448, + "name": "Contents", + "path": "Extensions/IOAHCIFamily.kext/Contents" + } + ] + }, + { + "value": 872, + "name": "IOATAFamily.kext", + "path": "Extensions/IOATAFamily.kext", + "children": [ + { + "value": 872, + "name": "Contents", + "path": "Extensions/IOATAFamily.kext/Contents" + } + ] + }, + { + "value": 276, + "name": "IOAudioFamily.kext", + "path": "Extensions/IOAudioFamily.kext", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "Extensions/IOAudioFamily.kext/Contents" + } + ] + }, + { + "value": 692, + "name": "IOAVBFamily.kext", + "path": "Extensions/IOAVBFamily.kext", + "children": [ + { + "value": 692, + "name": "Contents", + "path": "Extensions/IOAVBFamily.kext/Contents" + } + ] + }, + { + "value": 4808, + "name": "IOBDStorageFamily.kext", + "path": "Extensions/IOBDStorageFamily.kext", + "children": [ + { + "value": 4808, + "name": "Contents", + "path": "Extensions/IOBDStorageFamily.kext/Contents" + } + ] + }, + { + "value": 4460, + "name": "IOBluetoothFamily.kext", + "path": "Extensions/IOBluetoothFamily.kext", + "children": [ + { + "value": 4460, + "name": "Contents", + "path": "Extensions/IOBluetoothFamily.kext/Contents" + } + ] + }, + { + "value": 260, + "name": "IOBluetoothHIDDriver.kext", + "path": "Extensions/IOBluetoothHIDDriver.kext", + "children": [ + { + "value": 260, + "name": "Contents", + "path": "Extensions/IOBluetoothHIDDriver.kext/Contents" + } + ] + }, + { + "value": 4816, + "name": "IOCDStorageFamily.kext", + "path": "Extensions/IOCDStorageFamily.kext", + "children": [ + { + "value": 4816, + "name": "Contents", + "path": "Extensions/IOCDStorageFamily.kext/Contents" + } + ] + }, + { + "value": 9656, + "name": "IODVDStorageFamily.kext", + "path": "Extensions/IODVDStorageFamily.kext", + "children": [ + { + "value": 9656, + "name": "Contents", + "path": "Extensions/IODVDStorageFamily.kext/Contents" + } + ] + }, + { + "value": 288, + "name": "IOFireWireAVC.kext", + "path": "Extensions/IOFireWireAVC.kext", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Extensions/IOFireWireAVC.kext/Contents" + } + ] + }, + { + "value": 1424, + "name": "IOFireWireFamily.kext", + "path": "Extensions/IOFireWireFamily.kext", + "children": [ + { + "value": 1424, + "name": "Contents", + "path": "Extensions/IOFireWireFamily.kext/Contents" + } + ] + }, + { + "value": 236, + "name": "IOFireWireIP.kext", + "path": "Extensions/IOFireWireIP.kext", + "children": [ + { + "value": 236, + "name": "Contents", + "path": "Extensions/IOFireWireIP.kext/Contents" + } + ] + }, + { + "value": 288, + "name": "IOFireWireSBP2.kext", + "path": "Extensions/IOFireWireSBP2.kext", + "children": [ + { + "value": 288, + "name": "Contents", + "path": "Extensions/IOFireWireSBP2.kext/Contents" + } + ] + }, + { + "value": 68, + "name": "IOFireWireSerialBusProtocolTransport.kext", + "path": "Extensions/IOFireWireSerialBusProtocolTransport.kext", + "children": [ + { + "value": 68, + "name": "Contents", + "path": "Extensions/IOFireWireSerialBusProtocolTransport.kext/Contents" + } + ] + }, + { + "value": 320, + "name": "IOGraphicsFamily.kext", + "path": "Extensions/IOGraphicsFamily.kext", + "children": [ + { + "value": 4, + "name": "_CodeSignature", + "path": "Extensions/IOGraphicsFamily.kext/_CodeSignature" + } + ] + }, + { + "value": 804, + "name": "IOHDIXController.kext", + "path": "Extensions/IOHDIXController.kext", + "children": [ + { + "value": 804, + "name": "Contents", + "path": "Extensions/IOHDIXController.kext/Contents" + } + ] + }, + { + "value": 940, + "name": "IOHIDFamily.kext", + "path": "Extensions/IOHIDFamily.kext", + "children": [ + { + "value": 940, + "name": "Contents", + "path": "Extensions/IOHIDFamily.kext/Contents" + } + ] + }, + { + "value": 108, + "name": "IONDRVSupport.kext", + "path": "Extensions/IONDRVSupport.kext", + "children": [ + { + "value": 4, + "name": "_CodeSignature", + "path": "Extensions/IONDRVSupport.kext/_CodeSignature" + } + ] + }, + { + "value": 2396, + "name": "IONetworkingFamily.kext", + "path": "Extensions/IONetworkingFamily.kext", + "children": [ + { + "value": 2396, + "name": "Contents", + "path": "Extensions/IONetworkingFamily.kext/Contents" + } + ] + }, + { + "value": 228, + "name": "IOPCIFamily.kext", + "path": "Extensions/IOPCIFamily.kext", + "children": [ + { + "value": 4, + "name": "_CodeSignature", + "path": "Extensions/IOPCIFamily.kext/_CodeSignature" + } + ] + }, + { + "value": 1400, + "name": "IOPlatformPluginFamily.kext", + "path": "Extensions/IOPlatformPluginFamily.kext", + "children": [ + { + "value": 1400, + "name": "Contents", + "path": "Extensions/IOPlatformPluginFamily.kext/Contents" + } + ] + }, + { + "value": 108, + "name": "IOReportFamily.kext", + "path": "Extensions/IOReportFamily.kext", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "Extensions/IOReportFamily.kext/Contents" + } + ] + }, + { + "value": 13020, + "name": "IOSCSIArchitectureModelFamily.kext", + "path": "Extensions/IOSCSIArchitectureModelFamily.kext", + "children": [ + { + "value": 13020, + "name": "Contents", + "path": "Extensions/IOSCSIArchitectureModelFamily.kext/Contents" + } + ] + }, + { + "value": 120, + "name": "IOSCSIParallelFamily.kext", + "path": "Extensions/IOSCSIParallelFamily.kext", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Extensions/IOSCSIParallelFamily.kext/Contents" + } + ] + }, + { + "value": 1292, + "name": "IOSerialFamily.kext", + "path": "Extensions/IOSerialFamily.kext", + "children": [ + { + "value": 1292, + "name": "Contents", + "path": "Extensions/IOSerialFamily.kext/Contents" + } + ] + }, + { + "value": 52, + "name": "IOSMBusFamily.kext", + "path": "Extensions/IOSMBusFamily.kext", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Extensions/IOSMBusFamily.kext/Contents" + } + ] + }, + { + "value": 2064, + "name": "IOStorageFamily.kext", + "path": "Extensions/IOStorageFamily.kext", + "children": [ + { + "value": 2064, + "name": "Contents", + "path": "Extensions/IOStorageFamily.kext/Contents" + } + ] + }, + { + "value": 164, + "name": "IOStreamFamily.kext", + "path": "Extensions/IOStreamFamily.kext", + "children": [ + { + "value": 164, + "name": "Contents", + "path": "Extensions/IOStreamFamily.kext/Contents" + } + ] + }, + { + "value": 124, + "name": "IOSurface.kext", + "path": "Extensions/IOSurface.kext", + "children": [ + { + "value": 124, + "name": "Contents", + "path": "Extensions/IOSurface.kext/Contents" + } + ] + }, + { + "value": 1040, + "name": "IOThunderboltFamily.kext", + "path": "Extensions/IOThunderboltFamily.kext", + "children": [ + { + "value": 1040, + "name": "Contents", + "path": "Extensions/IOThunderboltFamily.kext/Contents" + } + ] + }, + { + "value": 248, + "name": "IOTimeSyncFamily.kext", + "path": "Extensions/IOTimeSyncFamily.kext", + "children": [ + { + "value": 248, + "name": "Contents", + "path": "Extensions/IOTimeSyncFamily.kext/Contents" + } + ] + }, + { + "value": 96, + "name": "IOUSBAttachedSCSI.kext", + "path": "Extensions/IOUSBAttachedSCSI.kext", + "children": [ + { + "value": 96, + "name": "Contents", + "path": "Extensions/IOUSBAttachedSCSI.kext/Contents" + } + ] + }, + { + "value": 4628, + "name": "IOUSBFamily.kext", + "path": "Extensions/IOUSBFamily.kext", + "children": [ + { + "value": 4628, + "name": "Contents", + "path": "Extensions/IOUSBFamily.kext/Contents" + } + ] + }, + { + "value": 140, + "name": "IOUSBMassStorageClass.kext", + "path": "Extensions/IOUSBMassStorageClass.kext", + "children": [ + { + "value": 140, + "name": "Contents", + "path": "Extensions/IOUSBMassStorageClass.kext/Contents" + } + ] + }, + { + "value": 100, + "name": "IOUserEthernet.kext", + "path": "Extensions/IOUserEthernet.kext", + "children": [ + { + "value": 100, + "name": "Contents", + "path": "Extensions/IOUserEthernet.kext/Contents" + } + ] + }, + { + "value": 172, + "name": "IOVideoFamily.kext", + "path": "Extensions/IOVideoFamily.kext", + "children": [ + { + "value": 172, + "name": "Contents", + "path": "Extensions/IOVideoFamily.kext/Contents" + } + ] + }, + { + "value": 168, + "name": "iPodDriver.kext", + "path": "Extensions/iPodDriver.kext", + "children": [ + { + "value": 168, + "name": "Contents", + "path": "Extensions/iPodDriver.kext/Contents" + } + ] + }, + { + "value": 108, + "name": "JMicronATA.kext", + "path": "Extensions/JMicronATA.kext", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "Extensions/JMicronATA.kext/Contents" + } + ] + }, + { + "value": 208, + "name": "L2TP.ppp", + "path": "Extensions/L2TP.ppp", + "children": [ + { + "value": 208, + "name": "Contents", + "path": "Extensions/L2TP.ppp/Contents" + } + ] + }, + { + "value": 64, + "name": "mcxalr.kext", + "path": "Extensions/mcxalr.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/mcxalr.kext/Contents" + } + ] + }, + { + "value": 92, + "name": "msdosfs.kext", + "path": "Extensions/msdosfs.kext", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "Extensions/msdosfs.kext/Contents" + } + ] + }, + { + "value": 408, + "name": "ntfs.kext", + "path": "Extensions/ntfs.kext", + "children": [ + { + "value": 408, + "name": "Contents", + "path": "Extensions/ntfs.kext/Contents" + } + ] + }, + { + "value": 2128, + "name": "NVDAGF100Hal.kext", + "path": "Extensions/NVDAGF100Hal.kext", + "children": [ + { + "value": 2128, + "name": "Contents", + "path": "Extensions/NVDAGF100Hal.kext/Contents" + } + ] + }, + { + "value": 1952, + "name": "NVDAGK100Hal.kext", + "path": "Extensions/NVDAGK100Hal.kext", + "children": [ + { + "value": 1952, + "name": "Contents", + "path": "Extensions/NVDAGK100Hal.kext/Contents" + } + ] + }, + { + "value": 3104, + "name": "NVDANV50HalTesla.kext", + "path": "Extensions/NVDANV50HalTesla.kext", + "children": [ + { + "value": 3104, + "name": "Contents", + "path": "Extensions/NVDANV50HalTesla.kext/Contents" + } + ] + }, + { + "value": 2524, + "name": "NVDAResman.kext", + "path": "Extensions/NVDAResman.kext", + "children": [ + { + "value": 2524, + "name": "Contents", + "path": "Extensions/NVDAResman.kext/Contents" + } + ] + }, + { + "value": 2540, + "name": "NVDAResmanTesla.kext", + "path": "Extensions/NVDAResmanTesla.kext", + "children": [ + { + "value": 2540, + "name": "Contents", + "path": "Extensions/NVDAResmanTesla.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "NVDAStartup.kext", + "path": "Extensions/NVDAStartup.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/NVDAStartup.kext/Contents" + } + ] + }, + { + "value": 104, + "name": "NVSMU.kext", + "path": "Extensions/NVSMU.kext", + "children": [ + { + "value": 104, + "name": "Contents", + "path": "Extensions/NVSMU.kext/Contents" + } + ] + }, + { + "value": 92, + "name": "OSvKernDSPLib.kext", + "path": "Extensions/OSvKernDSPLib.kext", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "Extensions/OSvKernDSPLib.kext/Contents" + } + ] + }, + { + "value": 72, + "name": "PPP.kext", + "path": "Extensions/PPP.kext", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Extensions/PPP.kext/Contents" + } + ] + }, + { + "value": 120, + "name": "PPPoE.ppp", + "path": "Extensions/PPPoE.ppp", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Extensions/PPPoE.ppp/Contents" + } + ] + }, + { + "value": 1572, + "name": "PPPSerial.ppp", + "path": "Extensions/PPPSerial.ppp", + "children": [ + { + "value": 1572, + "name": "Contents", + "path": "Extensions/PPPSerial.ppp/Contents" + } + ] + }, + { + "value": 120, + "name": "PPTP.ppp", + "path": "Extensions/PPTP.ppp", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "Extensions/PPTP.ppp/Contents" + } + ] + }, + { + "value": 64, + "name": "pthread.kext", + "path": "Extensions/pthread.kext", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "Extensions/pthread.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "Quarantine.kext", + "path": "Extensions/Quarantine.kext", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/Quarantine.kext/Contents" + } + ] + }, + { + "value": 56, + "name": "Radius.ppp", + "path": "Extensions/Radius.ppp", + "children": [ + { + "value": 56, + "name": "Contents", + "path": "Extensions/Radius.ppp/Contents" + } + ] + }, + { + "value": 52, + "name": "RemoteVirtualInterface.kext", + "path": "Extensions/RemoteVirtualInterface.kext", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "Extensions/RemoteVirtualInterface.kext/Contents" + } + ] + }, + { + "value": 108, + "name": "Sandbox.kext", + "path": "Extensions/Sandbox.kext", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "Extensions/Sandbox.kext/Contents" + } + ] + }, + { + "value": 68, + "name": "SMARTLib.plugin", + "path": "Extensions/SMARTLib.plugin", + "children": [ + { + "value": 68, + "name": "Contents", + "path": "Extensions/SMARTLib.plugin/Contents" + } + ] + }, + { + "value": 376, + "name": "smbfs.kext", + "path": "Extensions/smbfs.kext", + "children": [ + { + "value": 376, + "name": "Contents", + "path": "Extensions/smbfs.kext/Contents" + } + ] + }, + { + "value": 80, + "name": "SMCMotionSensor.kext", + "path": "Extensions/SMCMotionSensor.kext", + "children": [ + { + "value": 80, + "name": "Contents", + "path": "Extensions/SMCMotionSensor.kext/Contents" + } + ] + }, + { + "value": 504, + "name": "System.kext", + "path": "Extensions/System.kext", + "children": [ + { + "value": 20, + "name": "_CodeSignature", + "path": "Extensions/System.kext/_CodeSignature" + }, + { + "value": 476, + "name": "PlugIns", + "path": "Extensions/System.kext/PlugIns" + } + ] + }, + { + "value": 56, + "name": "TMSafetyNet.kext", + "path": "Extensions/TMSafetyNet.kext", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Extensions/TMSafetyNet.kext/Contents" + }, + { + "value": 16, + "name": "Helpers", + "path": "Extensions/TMSafetyNet.kext/Helpers" + } + ] + }, + { + "value": 40, + "name": "triggers.kext", + "path": "Extensions/triggers.kext", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Extensions/triggers.kext/Contents" + } + ] + }, + { + "value": 296, + "name": "udf.kext", + "path": "Extensions/udf.kext", + "children": [ + { + "value": 296, + "name": "Contents", + "path": "Extensions/udf.kext/Contents" + } + ] + }, + { + "value": 212, + "name": "vecLib.kext", + "path": "Extensions/vecLib.kext", + "children": [ + { + "value": 212, + "name": "Contents", + "path": "Extensions/vecLib.kext/Contents" + } + ] + }, + { + "value": 176, + "name": "webcontentfilter.kext", + "path": "Extensions/webcontentfilter.kext", + "children": [ + { + "value": 176, + "name": "Contents", + "path": "Extensions/webcontentfilter.kext/Contents" + } + ] + }, + { + "value": 232, + "name": "webdav_fs.kext", + "path": "Extensions/webdav_fs.kext", + "children": [ + { + "value": 232, + "name": "Contents", + "path": "Extensions/webdav_fs.kext/Contents" + } + ] + } + ] + }, + { + "value": 11992, + "name": "Filesystems", + "path": "Filesystems", + "children": [ + { + "value": 5740, + "name": "acfs.fs", + "path": "Filesystems/acfs.fs", + "children": [ + { + "value": 5644, + "name": "Contents", + "path": "Filesystems/acfs.fs/Contents" + } + ] + }, + { + "value": 636, + "name": "AppleShare", + "path": "Filesystems/AppleShare", + "children": [ + { + "value": 524, + "name": "afpfs.kext", + "path": "Filesystems/AppleShare/afpfs.kext" + }, + { + "value": 88, + "name": "asp_tcp.kext", + "path": "Filesystems/AppleShare/asp_tcp.kext" + }, + { + "value": 16, + "name": "check_afp.app", + "path": "Filesystems/AppleShare/check_afp.app" + } + ] + }, + { + "value": 16, + "name": "cd9660.fs", + "path": "Filesystems/cd9660.fs", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Filesystems/cd9660.fs/Contents" + } + ] + }, + { + "value": 32, + "name": "cddafs.fs", + "path": "Filesystems/cddafs.fs", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Filesystems/cddafs.fs/Contents" + } + ] + }, + { + "value": 76, + "name": "exfat.fs", + "path": "Filesystems/exfat.fs", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Filesystems/exfat.fs/Contents" + } + ] + }, + { + "value": 36, + "name": "ftp.fs", + "path": "Filesystems/ftp.fs", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Filesystems/ftp.fs/Contents" + } + ] + }, + { + "value": 3180, + "name": "hfs.fs", + "path": "Filesystems/hfs.fs", + "children": [ + { + "value": 452, + "name": "Contents", + "path": "Filesystems/hfs.fs/Contents" + }, + { + "value": 2724, + "name": "Encodings", + "path": "Filesystems/hfs.fs/Encodings" + } + ] + }, + { + "value": 64, + "name": "msdos.fs", + "path": "Filesystems/msdos.fs", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Filesystems/msdos.fs/Contents" + } + ] + }, + { + "value": 172, + "name": "NetFSPlugins", + "path": "Filesystems/NetFSPlugins", + "children": [ + { + "value": 44, + "name": "afp.bundle", + "path": "Filesystems/NetFSPlugins/afp.bundle" + }, + { + "value": 20, + "name": "ftp.bundle", + "path": "Filesystems/NetFSPlugins/ftp.bundle" + }, + { + "value": 36, + "name": "http.bundle", + "path": "Filesystems/NetFSPlugins/http.bundle" + }, + { + "value": 16, + "name": "nfs.bundle", + "path": "Filesystems/NetFSPlugins/nfs.bundle" + }, + { + "value": 56, + "name": "smb.bundle", + "path": "Filesystems/NetFSPlugins/smb.bundle" + } + ] + }, + { + "value": 0, + "name": "nfs.fs", + "path": "Filesystems/nfs.fs", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Filesystems/nfs.fs/Contents" + } + ] + }, + { + "value": 24, + "name": "ntfs.fs", + "path": "Filesystems/ntfs.fs", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Filesystems/ntfs.fs/Contents" + } + ] + }, + { + "value": 1800, + "name": "prlufs.fs", + "path": "Filesystems/prlufs.fs", + "children": [ + { + "value": 1800, + "name": "Support", + "path": "Filesystems/prlufs.fs/Support" + } + ] + }, + { + "value": 0, + "name": "smbfs.fs", + "path": "Filesystems/smbfs.fs", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Filesystems/smbfs.fs/Contents" + } + ] + }, + { + "value": 204, + "name": "udf.fs", + "path": "Filesystems/udf.fs", + "children": [ + { + "value": 200, + "name": "Contents", + "path": "Filesystems/udf.fs/Contents" + } + ] + }, + { + "value": 8, + "name": "webdav.fs", + "path": "Filesystems/webdav.fs", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Filesystems/webdav.fs/Contents" + }, + { + "value": 8, + "name": "Support", + "path": "Filesystems/webdav.fs/Support" + } + ] + } + ] + }, + { + "value": 112, + "name": "Filters", + "path": "Filters" + }, + { + "value": 201212, + "name": "Fonts", + "path": "Fonts" + }, + { + "value": 647772, + "name": "Frameworks", + "path": "Frameworks", + "children": [ + { + "value": 9800, + "name": "Accelerate.framework", + "path": "Frameworks/Accelerate.framework", + "children": [ + { + "value": 9788, + "name": "Versions", + "path": "Frameworks/Accelerate.framework/Versions" + } + ] + }, + { + "value": 100, + "name": "Accounts.framework", + "path": "Frameworks/Accounts.framework", + "children": [ + { + "value": 92, + "name": "Versions", + "path": "Frameworks/Accounts.framework/Versions" + } + ] + }, + { + "value": 10144, + "name": "AddressBook.framework", + "path": "Frameworks/AddressBook.framework", + "children": [ + { + "value": 10136, + "name": "Versions", + "path": "Frameworks/AddressBook.framework/Versions" + } + ] + }, + { + "value": 64, + "name": "AGL.framework", + "path": "Frameworks/AGL.framework", + "children": [ + { + "value": 56, + "name": "Versions", + "path": "Frameworks/AGL.framework/Versions" + } + ] + }, + { + "value": 30320, + "name": "AppKit.framework", + "path": "Frameworks/AppKit.framework", + "children": [ + { + "value": 30308, + "name": "Versions", + "path": "Frameworks/AppKit.framework/Versions" + } + ] + }, + { + "value": 12, + "name": "AppKitScripting.framework", + "path": "Frameworks/AppKitScripting.framework", + "children": [ + { + "value": 4, + "name": "Versions", + "path": "Frameworks/AppKitScripting.framework/Versions" + } + ] + }, + { + "value": 632, + "name": "AppleScriptKit.framework", + "path": "Frameworks/AppleScriptKit.framework", + "children": [ + { + "value": 624, + "name": "Versions", + "path": "Frameworks/AppleScriptKit.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "AppleScriptObjC.framework", + "path": "Frameworks/AppleScriptObjC.framework", + "children": [ + { + "value": 96, + "name": "Versions", + "path": "Frameworks/AppleScriptObjC.framework/Versions" + } + ] + }, + { + "value": 324, + "name": "AppleShareClientCore.framework", + "path": "Frameworks/AppleShareClientCore.framework", + "children": [ + { + "value": 316, + "name": "Versions", + "path": "Frameworks/AppleShareClientCore.framework/Versions" + } + ] + }, + { + "value": 77200, + "name": "ApplicationServices.framework", + "path": "Frameworks/ApplicationServices.framework", + "children": [ + { + "value": 77188, + "name": "Versions", + "path": "Frameworks/ApplicationServices.framework/Versions" + } + ] + }, + { + "value": 1792, + "name": "AudioToolbox.framework", + "path": "Frameworks/AudioToolbox.framework", + "children": [ + { + "value": 1716, + "name": "Versions", + "path": "Frameworks/AudioToolbox.framework/Versions" + }, + { + "value": 68, + "name": "XPCServices", + "path": "Frameworks/AudioToolbox.framework/XPCServices" + } + ] + }, + { + "value": 40, + "name": "AudioUnit.framework", + "path": "Frameworks/AudioUnit.framework", + "children": [ + { + "value": 32, + "name": "Versions", + "path": "Frameworks/AudioUnit.framework/Versions" + } + ] + }, + { + "value": 736, + "name": "AudioVideoBridging.framework", + "path": "Frameworks/AudioVideoBridging.framework", + "children": [ + { + "value": 728, + "name": "Versions", + "path": "Frameworks/AudioVideoBridging.framework/Versions" + } + ] + }, + { + "value": 11496, + "name": "Automator.framework", + "path": "Frameworks/Automator.framework", + "children": [ + { + "value": 4, + "name": "Frameworks", + "path": "Frameworks/Automator.framework/Frameworks" + }, + { + "value": 11484, + "name": "Versions", + "path": "Frameworks/Automator.framework/Versions" + } + ] + }, + { + "value": 1648, + "name": "AVFoundation.framework", + "path": "Frameworks/AVFoundation.framework", + "children": [ + { + "value": 1640, + "name": "Versions", + "path": "Frameworks/AVFoundation.framework/Versions" + } + ] + }, + { + "value": 408, + "name": "AVKit.framework", + "path": "Frameworks/AVKit.framework", + "children": [ + { + "value": 400, + "name": "Versions", + "path": "Frameworks/AVKit.framework/Versions" + } + ] + }, + { + "value": 1132, + "name": "CalendarStore.framework", + "path": "Frameworks/CalendarStore.framework", + "children": [ + { + "value": 1124, + "name": "Versions", + "path": "Frameworks/CalendarStore.framework/Versions" + } + ] + }, + { + "value": 25920, + "name": "Carbon.framework", + "path": "Frameworks/Carbon.framework", + "children": [ + { + "value": 25908, + "name": "Versions", + "path": "Frameworks/Carbon.framework/Versions" + } + ] + }, + { + "value": 2000, + "name": "CFNetwork.framework", + "path": "Frameworks/CFNetwork.framework", + "children": [ + { + "value": 1992, + "name": "Versions", + "path": "Frameworks/CFNetwork.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "Cocoa.framework", + "path": "Frameworks/Cocoa.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "Frameworks/Cocoa.framework/Versions" + } + ] + }, + { + "value": 900, + "name": "Collaboration.framework", + "path": "Frameworks/Collaboration.framework", + "children": [ + { + "value": 892, + "name": "Versions", + "path": "Frameworks/Collaboration.framework/Versions" + } + ] + }, + { + "value": 432, + "name": "CoreAudio.framework", + "path": "Frameworks/CoreAudio.framework", + "children": [ + { + "value": 420, + "name": "Versions", + "path": "Frameworks/CoreAudio.framework/Versions" + } + ] + }, + { + "value": 716, + "name": "CoreAudioKit.framework", + "path": "Frameworks/CoreAudioKit.framework", + "children": [ + { + "value": 708, + "name": "Versions", + "path": "Frameworks/CoreAudioKit.framework/Versions" + } + ] + }, + { + "value": 2632, + "name": "CoreData.framework", + "path": "Frameworks/CoreData.framework", + "children": [ + { + "value": 2624, + "name": "Versions", + "path": "Frameworks/CoreData.framework/Versions" + } + ] + }, + { + "value": 2608, + "name": "CoreFoundation.framework", + "path": "Frameworks/CoreFoundation.framework", + "children": [ + { + "value": 2600, + "name": "Versions", + "path": "Frameworks/CoreFoundation.framework/Versions" + } + ] + }, + { + "value": 9152, + "name": "CoreGraphics.framework", + "path": "Frameworks/CoreGraphics.framework", + "children": [ + { + "value": 9144, + "name": "Versions", + "path": "Frameworks/CoreGraphics.framework/Versions" + } + ] + }, + { + "value": 14552, + "name": "CoreLocation.framework", + "path": "Frameworks/CoreLocation.framework", + "children": [ + { + "value": 14540, + "name": "Versions", + "path": "Frameworks/CoreLocation.framework/Versions" + } + ] + }, + { + "value": 452, + "name": "CoreMedia.framework", + "path": "Frameworks/CoreMedia.framework", + "children": [ + { + "value": 440, + "name": "Versions", + "path": "Frameworks/CoreMedia.framework/Versions" + } + ] + }, + { + "value": 2876, + "name": "CoreMediaIO.framework", + "path": "Frameworks/CoreMediaIO.framework", + "children": [ + { + "value": 2864, + "name": "Versions", + "path": "Frameworks/CoreMediaIO.framework/Versions" + } + ] + }, + { + "value": 320, + "name": "CoreMIDI.framework", + "path": "Frameworks/CoreMIDI.framework", + "children": [ + { + "value": 308, + "name": "Versions", + "path": "Frameworks/CoreMIDI.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "CoreMIDIServer.framework", + "path": "Frameworks/CoreMIDIServer.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "Frameworks/CoreMIDIServer.framework/Versions" + } + ] + }, + { + "value": 12024, + "name": "CoreServices.framework", + "path": "Frameworks/CoreServices.framework", + "children": [ + { + "value": 12012, + "name": "Versions", + "path": "Frameworks/CoreServices.framework/Versions" + } + ] + }, + { + "value": 1472, + "name": "CoreText.framework", + "path": "Frameworks/CoreText.framework", + "children": [ + { + "value": 1464, + "name": "Versions", + "path": "Frameworks/CoreText.framework/Versions" + } + ] + }, + { + "value": 204, + "name": "CoreVideo.framework", + "path": "Frameworks/CoreVideo.framework", + "children": [ + { + "value": 196, + "name": "Versions", + "path": "Frameworks/CoreVideo.framework/Versions" + } + ] + }, + { + "value": 520, + "name": "CoreWiFi.framework", + "path": "Frameworks/CoreWiFi.framework", + "children": [ + { + "value": 512, + "name": "Versions", + "path": "Frameworks/CoreWiFi.framework/Versions" + } + ] + }, + { + "value": 536, + "name": "CoreWLAN.framework", + "path": "Frameworks/CoreWLAN.framework", + "children": [ + { + "value": 528, + "name": "Versions", + "path": "Frameworks/CoreWLAN.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "DirectoryService.framework", + "path": "Frameworks/DirectoryService.framework", + "children": [ + { + "value": 80, + "name": "Versions", + "path": "Frameworks/DirectoryService.framework/Versions" + } + ] + }, + { + "value": 1352, + "name": "DiscRecording.framework", + "path": "Frameworks/DiscRecording.framework", + "children": [ + { + "value": 1344, + "name": "Versions", + "path": "Frameworks/DiscRecording.framework/Versions" + } + ] + }, + { + "value": 1384, + "name": "DiscRecordingUI.framework", + "path": "Frameworks/DiscRecordingUI.framework", + "children": [ + { + "value": 1376, + "name": "Versions", + "path": "Frameworks/DiscRecordingUI.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "DiskArbitration.framework", + "path": "Frameworks/DiskArbitration.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "Frameworks/DiskArbitration.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "DrawSprocket.framework", + "path": "Frameworks/DrawSprocket.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "Frameworks/DrawSprocket.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "DVComponentGlue.framework", + "path": "Frameworks/DVComponentGlue.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "Frameworks/DVComponentGlue.framework/Versions" + } + ] + }, + { + "value": 1420, + "name": "DVDPlayback.framework", + "path": "Frameworks/DVDPlayback.framework", + "children": [ + { + "value": 1412, + "name": "Versions", + "path": "Frameworks/DVDPlayback.framework/Versions" + } + ] + }, + { + "value": 232, + "name": "EventKit.framework", + "path": "Frameworks/EventKit.framework", + "children": [ + { + "value": 224, + "name": "Versions", + "path": "Frameworks/EventKit.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "ExceptionHandling.framework", + "path": "Frameworks/ExceptionHandling.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "Frameworks/ExceptionHandling.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "ForceFeedback.framework", + "path": "Frameworks/ForceFeedback.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "Frameworks/ForceFeedback.framework/Versions" + } + ] + }, + { + "value": 4228, + "name": "Foundation.framework", + "path": "Frameworks/Foundation.framework", + "children": [ + { + "value": 4216, + "name": "Versions", + "path": "Frameworks/Foundation.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "FWAUserLib.framework", + "path": "Frameworks/FWAUserLib.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "Frameworks/FWAUserLib.framework/Versions" + } + ] + }, + { + "value": 60, + "name": "GameController.framework", + "path": "Frameworks/GameController.framework", + "children": [ + { + "value": 52, + "name": "Versions", + "path": "Frameworks/GameController.framework/Versions" + } + ] + }, + { + "value": 44244, + "name": "GameKit.framework", + "path": "Frameworks/GameKit.framework", + "children": [ + { + "value": 44236, + "name": "Versions", + "path": "Frameworks/GameKit.framework/Versions" + } + ] + }, + { + "value": 132, + "name": "GLKit.framework", + "path": "Frameworks/GLKit.framework", + "children": [ + { + "value": 124, + "name": "Versions", + "path": "Frameworks/GLKit.framework/Versions" + } + ] + }, + { + "value": 1740, + "name": "GLUT.framework", + "path": "Frameworks/GLUT.framework", + "children": [ + { + "value": 1732, + "name": "Versions", + "path": "Frameworks/GLUT.framework/Versions" + } + ] + }, + { + "value": 280, + "name": "GSS.framework", + "path": "Frameworks/GSS.framework", + "children": [ + { + "value": 272, + "name": "Versions", + "path": "Frameworks/GSS.framework/Versions" + } + ] + }, + { + "value": 236, + "name": "ICADevices.framework", + "path": "Frameworks/ICADevices.framework", + "children": [ + { + "value": 228, + "name": "Versions", + "path": "Frameworks/ICADevices.framework/Versions" + } + ] + }, + { + "value": 392, + "name": "ImageCaptureCore.framework", + "path": "Frameworks/ImageCaptureCore.framework", + "children": [ + { + "value": 384, + "name": "Versions", + "path": "Frameworks/ImageCaptureCore.framework/Versions" + } + ] + }, + { + "value": 4008, + "name": "ImageIO.framework", + "path": "Frameworks/ImageIO.framework", + "children": [ + { + "value": 4000, + "name": "Versions", + "path": "Frameworks/ImageIO.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "IMServicePlugIn.framework", + "path": "Frameworks/IMServicePlugIn.framework", + "children": [ + { + "value": 28, + "name": "IMServicePlugInAgent.app", + "path": "Frameworks/IMServicePlugIn.framework/IMServicePlugInAgent.app" + }, + { + "value": 64, + "name": "Versions", + "path": "Frameworks/IMServicePlugIn.framework/Versions" + } + ] + }, + { + "value": 368, + "name": "InputMethodKit.framework", + "path": "Frameworks/InputMethodKit.framework", + "children": [ + { + "value": 356, + "name": "Versions", + "path": "Frameworks/InputMethodKit.framework/Versions" + } + ] + }, + { + "value": 360, + "name": "InstallerPlugins.framework", + "path": "Frameworks/InstallerPlugins.framework", + "children": [ + { + "value": 352, + "name": "Versions", + "path": "Frameworks/InstallerPlugins.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "InstantMessage.framework", + "path": "Frameworks/InstantMessage.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "Frameworks/InstantMessage.framework/Versions" + } + ] + }, + { + "value": 904, + "name": "IOBluetooth.framework", + "path": "Frameworks/IOBluetooth.framework", + "children": [ + { + "value": 892, + "name": "Versions", + "path": "Frameworks/IOBluetooth.framework/Versions" + } + ] + }, + { + "value": 4592, + "name": "IOBluetoothUI.framework", + "path": "Frameworks/IOBluetoothUI.framework", + "children": [ + { + "value": 4584, + "name": "Versions", + "path": "Frameworks/IOBluetoothUI.framework/Versions" + } + ] + }, + { + "value": 688, + "name": "IOKit.framework", + "path": "Frameworks/IOKit.framework", + "children": [ + { + "value": 680, + "name": "Versions", + "path": "Frameworks/IOKit.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "IOSurface.framework", + "path": "Frameworks/IOSurface.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "Frameworks/IOSurface.framework/Versions" + } + ] + }, + { + "value": 28, + "name": "JavaFrameEmbedding.framework", + "path": "Frameworks/JavaFrameEmbedding.framework", + "children": [ + { + "value": 20, + "name": "Versions", + "path": "Frameworks/JavaFrameEmbedding.framework/Versions" + } + ] + }, + { + "value": 3336, + "name": "JavaScriptCore.framework", + "path": "Frameworks/JavaScriptCore.framework", + "children": [ + { + "value": 3328, + "name": "Versions", + "path": "Frameworks/JavaScriptCore.framework/Versions" + } + ] + }, + { + "value": 2756, + "name": "JavaVM.framework", + "path": "Frameworks/JavaVM.framework", + "children": [ + { + "value": 2728, + "name": "Versions", + "path": "Frameworks/JavaVM.framework/Versions" + } + ] + }, + { + "value": 168, + "name": "Kerberos.framework", + "path": "Frameworks/Kerberos.framework", + "children": [ + { + "value": 160, + "name": "Versions", + "path": "Frameworks/Kerberos.framework/Versions" + } + ] + }, + { + "value": 36, + "name": "Kernel.framework", + "path": "Frameworks/Kernel.framework", + "children": [ + { + "value": 32, + "name": "Versions", + "path": "Frameworks/Kernel.framework/Versions" + } + ] + }, + { + "value": 200, + "name": "LatentSemanticMapping.framework", + "path": "Frameworks/LatentSemanticMapping.framework", + "children": [ + { + "value": 192, + "name": "Versions", + "path": "Frameworks/LatentSemanticMapping.framework/Versions" + } + ] + }, + { + "value": 284, + "name": "LDAP.framework", + "path": "Frameworks/LDAP.framework", + "children": [ + { + "value": 276, + "name": "Versions", + "path": "Frameworks/LDAP.framework/Versions" + } + ] + }, + { + "value": 1872, + "name": "MapKit.framework", + "path": "Frameworks/MapKit.framework", + "children": [ + { + "value": 1864, + "name": "Versions", + "path": "Frameworks/MapKit.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "MediaAccessibility.framework", + "path": "Frameworks/MediaAccessibility.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "Frameworks/MediaAccessibility.framework/Versions" + } + ] + }, + { + "value": 100, + "name": "MediaLibrary.framework", + "path": "Frameworks/MediaLibrary.framework", + "children": [ + { + "value": 88, + "name": "Versions", + "path": "Frameworks/MediaLibrary.framework/Versions" + } + ] + }, + { + "value": 3708, + "name": "MediaToolbox.framework", + "path": "Frameworks/MediaToolbox.framework", + "children": [ + { + "value": 3700, + "name": "Versions", + "path": "Frameworks/MediaToolbox.framework/Versions" + } + ] + }, + { + "value": 16, + "name": "Message.framework", + "path": "Frameworks/Message.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "Frameworks/Message.framework/Versions" + } + ] + }, + { + "value": 64, + "name": "NetFS.framework", + "path": "Frameworks/NetFS.framework", + "children": [ + { + "value": 56, + "name": "Versions", + "path": "Frameworks/NetFS.framework/Versions" + } + ] + }, + { + "value": 192, + "name": "OpenAL.framework", + "path": "Frameworks/OpenAL.framework", + "children": [ + { + "value": 184, + "name": "Versions", + "path": "Frameworks/OpenAL.framework/Versions" + } + ] + }, + { + "value": 78380, + "name": "OpenCL.framework", + "path": "Frameworks/OpenCL.framework", + "children": [ + { + "value": 78368, + "name": "Versions", + "path": "Frameworks/OpenCL.framework/Versions" + } + ] + }, + { + "value": 288, + "name": "OpenDirectory.framework", + "path": "Frameworks/OpenDirectory.framework", + "children": [ + { + "value": 252, + "name": "Versions", + "path": "Frameworks/OpenDirectory.framework/Versions" + } + ] + }, + { + "value": 25628, + "name": "OpenGL.framework", + "path": "Frameworks/OpenGL.framework", + "children": [ + { + "value": 25616, + "name": "Versions", + "path": "Frameworks/OpenGL.framework/Versions" + } + ] + }, + { + "value": 1136, + "name": "OSAKit.framework", + "path": "Frameworks/OSAKit.framework", + "children": [ + { + "value": 1128, + "name": "Versions", + "path": "Frameworks/OSAKit.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "PCSC.framework", + "path": "Frameworks/PCSC.framework", + "children": [ + { + "value": 80, + "name": "Versions", + "path": "Frameworks/PCSC.framework/Versions" + } + ] + }, + { + "value": 192, + "name": "PreferencePanes.framework", + "path": "Frameworks/PreferencePanes.framework", + "children": [ + { + "value": 180, + "name": "Versions", + "path": "Frameworks/PreferencePanes.framework/Versions" + } + ] + }, + { + "value": 1012, + "name": "PubSub.framework", + "path": "Frameworks/PubSub.framework", + "children": [ + { + "value": 1004, + "name": "Versions", + "path": "Frameworks/PubSub.framework/Versions" + } + ] + }, + { + "value": 129696, + "name": "Python.framework", + "path": "Frameworks/Python.framework", + "children": [ + { + "value": 129684, + "name": "Versions", + "path": "Frameworks/Python.framework/Versions" + } + ] + }, + { + "value": 2516, + "name": "QTKit.framework", + "path": "Frameworks/QTKit.framework", + "children": [ + { + "value": 2504, + "name": "Versions", + "path": "Frameworks/QTKit.framework/Versions" + } + ] + }, + { + "value": 23712, + "name": "Quartz.framework", + "path": "Frameworks/Quartz.framework", + "children": [ + { + "value": 23700, + "name": "Versions", + "path": "Frameworks/Quartz.framework/Versions" + } + ] + }, + { + "value": 6644, + "name": "QuartzCore.framework", + "path": "Frameworks/QuartzCore.framework", + "children": [ + { + "value": 6632, + "name": "Versions", + "path": "Frameworks/QuartzCore.framework/Versions" + } + ] + }, + { + "value": 3960, + "name": "QuickLook.framework", + "path": "Frameworks/QuickLook.framework", + "children": [ + { + "value": 3948, + "name": "Versions", + "path": "Frameworks/QuickLook.framework/Versions" + } + ] + }, + { + "value": 3460, + "name": "QuickTime.framework", + "path": "Frameworks/QuickTime.framework", + "children": [ + { + "value": 3452, + "name": "Versions", + "path": "Frameworks/QuickTime.framework/Versions" + } + ] + }, + { + "value": 13168, + "name": "Ruby.framework", + "path": "Frameworks/Ruby.framework", + "children": [ + { + "value": 13160, + "name": "Versions", + "path": "Frameworks/Ruby.framework/Versions" + } + ] + }, + { + "value": 204, + "name": "RubyCocoa.framework", + "path": "Frameworks/RubyCocoa.framework", + "children": [ + { + "value": 196, + "name": "Versions", + "path": "Frameworks/RubyCocoa.framework/Versions" + } + ] + }, + { + "value": 3628, + "name": "SceneKit.framework", + "path": "Frameworks/SceneKit.framework", + "children": [ + { + "value": 3616, + "name": "Versions", + "path": "Frameworks/SceneKit.framework/Versions" + } + ] + }, + { + "value": 1812, + "name": "ScreenSaver.framework", + "path": "Frameworks/ScreenSaver.framework", + "children": [ + { + "value": 1804, + "name": "Versions", + "path": "Frameworks/ScreenSaver.framework/Versions" + } + ] + }, + { + "value": 12, + "name": "Scripting.framework", + "path": "Frameworks/Scripting.framework", + "children": [ + { + "value": 4, + "name": "Versions", + "path": "Frameworks/Scripting.framework/Versions" + } + ] + }, + { + "value": 144, + "name": "ScriptingBridge.framework", + "path": "Frameworks/ScriptingBridge.framework", + "children": [ + { + "value": 136, + "name": "Versions", + "path": "Frameworks/ScriptingBridge.framework/Versions" + } + ] + }, + { + "value": 6224, + "name": "Security.framework", + "path": "Frameworks/Security.framework", + "children": [ + { + "value": 124, + "name": "PlugIns", + "path": "Frameworks/Security.framework/PlugIns" + }, + { + "value": 6088, + "name": "Versions", + "path": "Frameworks/Security.framework/Versions" + } + ] + }, + { + "value": 2076, + "name": "SecurityFoundation.framework", + "path": "Frameworks/SecurityFoundation.framework", + "children": [ + { + "value": 2068, + "name": "Versions", + "path": "Frameworks/SecurityFoundation.framework/Versions" + } + ] + }, + { + "value": 8660, + "name": "SecurityInterface.framework", + "path": "Frameworks/SecurityInterface.framework", + "children": [ + { + "value": 8652, + "name": "Versions", + "path": "Frameworks/SecurityInterface.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "ServiceManagement.framework", + "path": "Frameworks/ServiceManagement.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "Frameworks/ServiceManagement.framework/Versions" + }, + { + "value": 12, + "name": "XPCServices", + "path": "Frameworks/ServiceManagement.framework/XPCServices" + } + ] + }, + { + "value": 1112, + "name": "Social.framework", + "path": "Frameworks/Social.framework", + "children": [ + { + "value": 516, + "name": "Versions", + "path": "Frameworks/Social.framework/Versions" + }, + { + "value": 588, + "name": "XPCServices", + "path": "Frameworks/Social.framework/XPCServices" + } + ] + }, + { + "value": 500, + "name": "SpriteKit.framework", + "path": "Frameworks/SpriteKit.framework", + "children": [ + { + "value": 492, + "name": "Versions", + "path": "Frameworks/SpriteKit.framework/Versions" + } + ] + }, + { + "value": 96, + "name": "StoreKit.framework", + "path": "Frameworks/StoreKit.framework", + "children": [ + { + "value": 88, + "name": "Versions", + "path": "Frameworks/StoreKit.framework/Versions" + } + ] + }, + { + "value": 1608, + "name": "SyncServices.framework", + "path": "Frameworks/SyncServices.framework", + "children": [ + { + "value": 1600, + "name": "Versions", + "path": "Frameworks/SyncServices.framework/Versions" + } + ] + }, + { + "value": 44, + "name": "System.framework", + "path": "Frameworks/System.framework", + "children": [ + { + "value": 36, + "name": "Versions", + "path": "Frameworks/System.framework/Versions" + } + ] + }, + { + "value": 576, + "name": "SystemConfiguration.framework", + "path": "Frameworks/SystemConfiguration.framework", + "children": [ + { + "value": 568, + "name": "Versions", + "path": "Frameworks/SystemConfiguration.framework/Versions" + } + ] + }, + { + "value": 3208, + "name": "Tcl.framework", + "path": "Frameworks/Tcl.framework", + "children": [ + { + "value": 3200, + "name": "Versions", + "path": "Frameworks/Tcl.framework/Versions" + } + ] + }, + { + "value": 3172, + "name": "Tk.framework", + "path": "Frameworks/Tk.framework", + "children": [ + { + "value": 3160, + "name": "Versions", + "path": "Frameworks/Tk.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "TWAIN.framework", + "path": "Frameworks/TWAIN.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "Frameworks/TWAIN.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "VideoDecodeAcceleration.framework", + "path": "Frameworks/VideoDecodeAcceleration.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "Frameworks/VideoDecodeAcceleration.framework/Versions" + } + ] + }, + { + "value": 3648, + "name": "VideoToolbox.framework", + "path": "Frameworks/VideoToolbox.framework", + "children": [ + { + "value": 3636, + "name": "Versions", + "path": "Frameworks/VideoToolbox.framework/Versions" + } + ] + }, + { + "value": 17668, + "name": "WebKit.framework", + "path": "Frameworks/WebKit.framework", + "children": [ + { + "value": 17512, + "name": "Versions", + "path": "Frameworks/WebKit.framework/Versions" + }, + { + "value": 116, + "name": "WebKitPluginHost.app", + "path": "Frameworks/WebKit.framework/WebKitPluginHost.app" + } + ] + } + ] + }, + { + "value": 1076, + "name": "Graphics", + "path": "Graphics", + "children": [ + { + "value": 876, + "name": "QuartzComposer Patches", + "path": "Graphics/QuartzComposer Patches", + "children": [ + { + "value": 148, + "name": "Backdrops.plugin", + "path": "Graphics/QuartzComposer Patches/Backdrops.plugin" + }, + { + "value": 36, + "name": "FaceEffects.plugin", + "path": "Graphics/QuartzComposer Patches/FaceEffects.plugin" + } + ] + }, + { + "value": 200, + "name": "QuartzComposer Plug-Ins", + "path": "Graphics/QuartzComposer Plug-Ins", + "children": [ + { + "value": 200, + "name": "WOTD.plugin", + "path": "Graphics/QuartzComposer Plug-Ins/WOTD.plugin" + } + ] + } + ] + }, + { + "value": 0, + "name": "IdentityServices", + "path": "IdentityServices", + "children": [ + { + "value": 0, + "name": "ServiceDefinitions", + "path": "IdentityServices/ServiceDefinitions" + } + ] + }, + { + "value": 2900, + "name": "ImageCapture", + "path": "ImageCapture", + "children": [ + { + "value": 200, + "name": "Automatic Tasks", + "path": "ImageCapture/Automatic Tasks", + "children": [ + { + "value": 52, + "name": "Build Web Page.app", + "path": "ImageCapture/Automatic Tasks/Build Web Page.app" + }, + { + "value": 148, + "name": "MakePDF.app", + "path": "ImageCapture/Automatic Tasks/MakePDF.app" + } + ] + }, + { + "value": 480, + "name": "Devices", + "path": "ImageCapture/Devices", + "children": [ + { + "value": 84, + "name": "AirScanScanner.app", + "path": "ImageCapture/Devices/AirScanScanner.app" + }, + { + "value": 44, + "name": "MassStorageCamera.app", + "path": "ImageCapture/Devices/MassStorageCamera.app" + }, + { + "value": 124, + "name": "PTPCamera.app", + "path": "ImageCapture/Devices/PTPCamera.app" + }, + { + "value": 36, + "name": "Type4Camera.app", + "path": "ImageCapture/Devices/Type4Camera.app" + }, + { + "value": 32, + "name": "Type5Camera.app", + "path": "ImageCapture/Devices/Type5Camera.app" + }, + { + "value": 36, + "name": "Type8Camera.app", + "path": "ImageCapture/Devices/Type8Camera.app" + }, + { + "value": 124, + "name": "VirtualScanner.app", + "path": "ImageCapture/Devices/VirtualScanner.app" + } + ] + }, + { + "value": 2212, + "name": "Support", + "path": "ImageCapture/Support", + "children": [ + { + "value": 432, + "name": "Application", + "path": "ImageCapture/Support/Application" + }, + { + "value": 1608, + "name": "Icons", + "path": "ImageCapture/Support/Icons" + }, + { + "value": 172, + "name": "Image Capture Extension.app", + "path": "ImageCapture/Support/Image Capture Extension.app" + }, + { + "value": 3184, + "name": "CoreDeploy.bundle", + "path": "Java/Support/CoreDeploy.bundle" + }, + { + "value": 2732, + "name": "Deploy.bundle", + "path": "Java/Support/Deploy.bundle" + } + ] + }, + { + "value": 8, + "name": "Tools", + "path": "ImageCapture/Tools" + }, + { + "value": 0, + "name": "TWAIN Data Sources", + "path": "ImageCapture/TWAIN Data Sources" + } + ] + }, + { + "value": 23668, + "name": "InputMethods", + "path": "InputMethods", + "children": [ + { + "value": 1400, + "name": "50onPaletteServer.app", + "path": "InputMethods/50onPaletteServer.app", + "children": [ + { + "value": 1400, + "name": "Contents", + "path": "InputMethods/50onPaletteServer.app/Contents" + } + ] + }, + { + "value": 5728, + "name": "CharacterPalette.app", + "path": "InputMethods/CharacterPalette.app", + "children": [ + { + "value": 5728, + "name": "Contents", + "path": "InputMethods/CharacterPalette.app/Contents" + } + ] + }, + { + "value": 2476, + "name": "DictationIM.app", + "path": "InputMethods/DictationIM.app", + "children": [ + { + "value": 2476, + "name": "Contents", + "path": "InputMethods/DictationIM.app/Contents" + } + ] + }, + { + "value": 88, + "name": "InkServer.app", + "path": "InputMethods/InkServer.app", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "InputMethods/InkServer.app/Contents" + } + ] + }, + { + "value": 736, + "name": "KeyboardViewer.app", + "path": "InputMethods/KeyboardViewer.app", + "children": [ + { + "value": 736, + "name": "Contents", + "path": "InputMethods/KeyboardViewer.app/Contents" + } + ] + }, + { + "value": 1144, + "name": "KoreanIM.app", + "path": "InputMethods/KoreanIM.app", + "children": [ + { + "value": 1144, + "name": "Contents", + "path": "InputMethods/KoreanIM.app/Contents" + } + ] + }, + { + "value": 2484, + "name": "Kotoeri.app", + "path": "InputMethods/Kotoeri.app", + "children": [ + { + "value": 2484, + "name": "Contents", + "path": "InputMethods/Kotoeri.app/Contents" + } + ] + }, + { + "value": 40, + "name": "PluginIM.app", + "path": "InputMethods/PluginIM.app", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "InputMethods/PluginIM.app/Contents" + } + ] + }, + { + "value": 24, + "name": "PressAndHold.app", + "path": "InputMethods/PressAndHold.app", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "InputMethods/PressAndHold.app/Contents" + } + ] + }, + { + "value": 64, + "name": "SCIM.app", + "path": "InputMethods/SCIM.app", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "InputMethods/SCIM.app/Contents" + } + ] + }, + { + "value": 6916, + "name": "Switch Control.app", + "path": "InputMethods/Switch Control.app", + "children": [ + { + "value": 6916, + "name": "Contents", + "path": "InputMethods/Switch Control.app/Contents" + } + ] + }, + { + "value": 104, + "name": "TamilIM.app", + "path": "InputMethods/TamilIM.app", + "children": [ + { + "value": 104, + "name": "Contents", + "path": "InputMethods/TamilIM.app/Contents" + } + ] + }, + { + "value": 92, + "name": "TCIM.app", + "path": "InputMethods/TCIM.app", + "children": [ + { + "value": 92, + "name": "Contents", + "path": "InputMethods/TCIM.app/Contents" + } + ] + }, + { + "value": 1820, + "name": "TrackpadIM.app", + "path": "InputMethods/TrackpadIM.app", + "children": [ + { + "value": 1820, + "name": "Contents", + "path": "InputMethods/TrackpadIM.app/Contents" + } + ] + }, + { + "value": 552, + "name": "VietnameseIM.app", + "path": "InputMethods/VietnameseIM.app", + "children": [ + { + "value": 552, + "name": "Contents", + "path": "InputMethods/VietnameseIM.app/Contents" + } + ] + } + ] + }, + { + "value": 17668, + "name": "InternetAccounts", + "path": "InternetAccounts", + "children": [ + { + "value": 336, + "name": "126.iaplugin", + "path": "InternetAccounts/126.iaplugin", + "children": [ + { + "value": 336, + "name": "Contents", + "path": "InternetAccounts/126.iaplugin/Contents" + } + ] + }, + { + "value": 332, + "name": "163.iaplugin", + "path": "InternetAccounts/163.iaplugin", + "children": [ + { + "value": 332, + "name": "Contents", + "path": "InternetAccounts/163.iaplugin/Contents" + } + ] + }, + { + "value": 48, + "name": "AddressBook.iaplugin", + "path": "InternetAccounts/AddressBook.iaplugin", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "InternetAccounts/AddressBook.iaplugin/Contents" + } + ] + }, + { + "value": 304, + "name": "AOL.iaplugin", + "path": "InternetAccounts/AOL.iaplugin", + "children": [ + { + "value": 304, + "name": "Contents", + "path": "InternetAccounts/AOL.iaplugin/Contents" + } + ] + }, + { + "value": 44, + "name": "Calendar.iaplugin", + "path": "InternetAccounts/Calendar.iaplugin", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "InternetAccounts/Calendar.iaplugin/Contents" + } + ] + }, + { + "value": 784, + "name": "Exchange.iaplugin", + "path": "InternetAccounts/Exchange.iaplugin", + "children": [ + { + "value": 784, + "name": "Contents", + "path": "InternetAccounts/Exchange.iaplugin/Contents" + } + ] + }, + { + "value": 996, + "name": "Facebook.iaplugin", + "path": "InternetAccounts/Facebook.iaplugin", + "children": [ + { + "value": 996, + "name": "Contents", + "path": "InternetAccounts/Facebook.iaplugin/Contents" + } + ] + }, + { + "value": 596, + "name": "Flickr.iaplugin", + "path": "InternetAccounts/Flickr.iaplugin", + "children": [ + { + "value": 596, + "name": "Contents", + "path": "InternetAccounts/Flickr.iaplugin/Contents" + } + ] + }, + { + "value": 384, + "name": "Google.iaplugin", + "path": "InternetAccounts/Google.iaplugin", + "children": [ + { + "value": 384, + "name": "Contents", + "path": "InternetAccounts/Google.iaplugin/Contents" + } + ] + }, + { + "value": 32, + "name": "iChat.iaplugin", + "path": "InternetAccounts/iChat.iaplugin", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "InternetAccounts/iChat.iaplugin/Contents" + } + ] + }, + { + "value": 7436, + "name": "iCloud.iaplugin", + "path": "InternetAccounts/iCloud.iaplugin", + "children": [ + { + "value": 7436, + "name": "Contents", + "path": "InternetAccounts/iCloud.iaplugin/Contents" + } + ] + }, + { + "value": 840, + "name": "LinkedIn.iaplugin", + "path": "InternetAccounts/LinkedIn.iaplugin", + "children": [ + { + "value": 840, + "name": "Contents", + "path": "InternetAccounts/LinkedIn.iaplugin/Contents" + } + ] + }, + { + "value": 28, + "name": "Mail.iaplugin", + "path": "InternetAccounts/Mail.iaplugin", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "InternetAccounts/Mail.iaplugin/Contents" + } + ] + }, + { + "value": 32, + "name": "Notes.iaplugin", + "path": "InternetAccounts/Notes.iaplugin", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "InternetAccounts/Notes.iaplugin/Contents" + } + ] + }, + { + "value": 416, + "name": "OSXServer.iaplugin", + "path": "InternetAccounts/OSXServer.iaplugin", + "children": [ + { + "value": 416, + "name": "Contents", + "path": "InternetAccounts/OSXServer.iaplugin/Contents" + } + ] + }, + { + "value": 376, + "name": "QQ.iaplugin", + "path": "InternetAccounts/QQ.iaplugin", + "children": [ + { + "value": 376, + "name": "Contents", + "path": "InternetAccounts/QQ.iaplugin/Contents" + } + ] + }, + { + "value": 32, + "name": "Reminders.iaplugin", + "path": "InternetAccounts/Reminders.iaplugin", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "InternetAccounts/Reminders.iaplugin/Contents" + } + ] + }, + { + "value": 1024, + "name": "SetupPlugins", + "path": "InternetAccounts/SetupPlugins", + "children": [ + { + "value": 412, + "name": "CalUIAccountSetup.iaplugin", + "path": "InternetAccounts/SetupPlugins/CalUIAccountSetup.iaplugin" + }, + { + "value": 580, + "name": "Contacts.iaplugin", + "path": "InternetAccounts/SetupPlugins/Contacts.iaplugin" + }, + { + "value": 8, + "name": "MailAccountSetup.iaplugin", + "path": "InternetAccounts/SetupPlugins/MailAccountSetup.iaplugin" + }, + { + "value": 16, + "name": "Messages.iaplugin", + "path": "InternetAccounts/SetupPlugins/Messages.iaplugin" + }, + { + "value": 8, + "name": "NotesAccountSetup.iaplugin", + "path": "InternetAccounts/SetupPlugins/NotesAccountSetup.iaplugin" + } + ] + }, + { + "value": 392, + "name": "TencentWeibo.iaplugin", + "path": "InternetAccounts/TencentWeibo.iaplugin", + "children": [ + { + "value": 392, + "name": "Contents", + "path": "InternetAccounts/TencentWeibo.iaplugin/Contents" + } + ] + }, + { + "value": 612, + "name": "Tudou.iaplugin", + "path": "InternetAccounts/Tudou.iaplugin", + "children": [ + { + "value": 612, + "name": "Contents", + "path": "InternetAccounts/Tudou.iaplugin/Contents" + } + ] + }, + { + "value": 608, + "name": "TwitterPlugin.iaplugin", + "path": "InternetAccounts/TwitterPlugin.iaplugin", + "children": [ + { + "value": 608, + "name": "Contents", + "path": "InternetAccounts/TwitterPlugin.iaplugin/Contents" + } + ] + }, + { + "value": 584, + "name": "Vimeo.iaplugin", + "path": "InternetAccounts/Vimeo.iaplugin", + "children": [ + { + "value": 584, + "name": "Contents", + "path": "InternetAccounts/Vimeo.iaplugin/Contents" + } + ] + }, + { + "value": 468, + "name": "Weibo.iaplugin", + "path": "InternetAccounts/Weibo.iaplugin", + "children": [ + { + "value": 468, + "name": "Contents", + "path": "InternetAccounts/Weibo.iaplugin/Contents" + } + ] + }, + { + "value": 316, + "name": "Yahoo.iaplugin", + "path": "InternetAccounts/Yahoo.iaplugin", + "children": [ + { + "value": 316, + "name": "Contents", + "path": "InternetAccounts/Yahoo.iaplugin/Contents" + } + ] + }, + { + "value": 648, + "name": "Youku.iaplugin", + "path": "InternetAccounts/Youku.iaplugin", + "children": [ + { + "value": 648, + "name": "Contents", + "path": "InternetAccounts/Youku.iaplugin/Contents" + } + ] + } + ] + }, + { + "value": 68776, + "name": "Java", + "path": "Java", + "children": [ + { + "value": 8848, + "name": "Extensions", + "path": "Java/Extensions" + }, + { + "value": 54012, + "name": "JavaVirtualMachines", + "path": "Java/JavaVirtualMachines", + "children": [ + { + "value": 54012, + "name": "1.6.0.jdk", + "path": "Java/JavaVirtualMachines/1.6.0.jdk" + } + ] + }, + { + "value": 5916, + "name": "Support", + "path": "Java/Support", + "children": [ + { + "value": 432, + "name": "Application", + "path": "ImageCapture/Support/Application" + }, + { + "value": 1608, + "name": "Icons", + "path": "ImageCapture/Support/Icons" + }, + { + "value": 172, + "name": "Image Capture Extension.app", + "path": "ImageCapture/Support/Image Capture Extension.app" + }, + { + "value": 3184, + "name": "CoreDeploy.bundle", + "path": "Java/Support/CoreDeploy.bundle" + }, + { + "value": 2732, + "name": "Deploy.bundle", + "path": "Java/Support/Deploy.bundle" + } + ] + } + ] + }, + { + "value": 48, + "name": "KerberosPlugins", + "path": "KerberosPlugins", + "children": [ + { + "value": 48, + "name": "KerberosFrameworkPlugins", + "path": "KerberosPlugins/KerberosFrameworkPlugins", + "children": [ + { + "value": 8, + "name": "heimdalodpac.bundle", + "path": "KerberosPlugins/KerberosFrameworkPlugins/heimdalodpac.bundle" + }, + { + "value": 16, + "name": "LKDCLocate.bundle", + "path": "KerberosPlugins/KerberosFrameworkPlugins/LKDCLocate.bundle" + }, + { + "value": 12, + "name": "Reachability.bundle", + "path": "KerberosPlugins/KerberosFrameworkPlugins/Reachability.bundle" + }, + { + "value": 12, + "name": "SCKerberosConfig.bundle", + "path": "KerberosPlugins/KerberosFrameworkPlugins/SCKerberosConfig.bundle" + } + ] + } + ] + }, + { + "value": 276, + "name": "KeyboardLayouts", + "path": "KeyboardLayouts", + "children": [ + { + "value": 276, + "name": "AppleKeyboardLayouts.bundle", + "path": "KeyboardLayouts/AppleKeyboardLayouts.bundle", + "children": [ + { + "value": 276, + "name": "Contents", + "path": "KeyboardLayouts/AppleKeyboardLayouts.bundle/Contents" + } + ] + } + ] + }, + { + "value": 408, + "name": "Keychains", + "path": "Keychains" + }, + { + "value": 4, + "name": "LaunchAgents", + "path": "LaunchAgents" + }, + { + "value": 20, + "name": "LaunchDaemons", + "path": "LaunchDaemons" + }, + { + "value": 96532, + "name": "LinguisticData", + "path": "LinguisticData", + "children": [ + { + "value": 8, + "name": "da", + "path": "LinguisticData/da" + }, + { + "value": 16476, + "name": "de", + "path": "LinguisticData/de" + }, + { + "value": 9788, + "name": "en", + "path": "LinguisticData/en", + "children": [ + { + "value": 36, + "name": "GB", + "path": "LinguisticData/en/GB" + }, + { + "value": 28, + "name": "US", + "path": "LinguisticData/en/US" + } + ] + }, + { + "value": 10276, + "name": "es", + "path": "LinguisticData/es" + }, + { + "value": 0, + "name": "fi", + "path": "LinguisticData/fi" + }, + { + "value": 12468, + "name": "fr", + "path": "LinguisticData/fr" + }, + { + "value": 7336, + "name": "it", + "path": "LinguisticData/it" + }, + { + "value": 192, + "name": "ko", + "path": "LinguisticData/ko" + }, + { + "value": 48, + "name": "nl", + "path": "LinguisticData/nl" + }, + { + "value": 112, + "name": "no", + "path": "LinguisticData/no" + }, + { + "value": 4496, + "name": "pt", + "path": "LinguisticData/pt" + }, + { + "value": 24, + "name": "ru", + "path": "LinguisticData/ru" + }, + { + "value": 20, + "name": "sv", + "path": "LinguisticData/sv" + }, + { + "value": 0, + "name": "tr", + "path": "LinguisticData/tr" + }, + { + "value": 35288, + "name": "zh", + "path": "LinguisticData/zh", + "children": [ + { + "value": 2604, + "name": "Hans", + "path": "LinguisticData/zh/Hans" + }, + { + "value": 2868, + "name": "Hant", + "path": "LinguisticData/zh/Hant" + } + ] + } + ] + }, + { + "value": 4, + "name": "LocationBundles", + "path": "LocationBundles" + }, + { + "value": 800, + "name": "LoginPlugins", + "path": "LoginPlugins", + "children": [ + { + "value": 348, + "name": "BezelServices.loginPlugin", + "path": "LoginPlugins/BezelServices.loginPlugin", + "children": [ + { + "value": 348, + "name": "Contents", + "path": "LoginPlugins/BezelServices.loginPlugin/Contents" + } + ] + }, + { + "value": 108, + "name": "DisplayServices.loginPlugin", + "path": "LoginPlugins/DisplayServices.loginPlugin", + "children": [ + { + "value": 108, + "name": "Contents", + "path": "LoginPlugins/DisplayServices.loginPlugin/Contents" + } + ] + }, + { + "value": 344, + "name": "FSDisconnect.loginPlugin", + "path": "LoginPlugins/FSDisconnect.loginPlugin", + "children": [ + { + "value": 344, + "name": "Contents", + "path": "LoginPlugins/FSDisconnect.loginPlugin/Contents" + } + ] + } + ] + }, + { + "value": 188, + "name": "Messages", + "path": "Messages", + "children": [ + { + "value": 188, + "name": "PlugIns", + "path": "Messages/PlugIns", + "children": [ + { + "value": 12, + "name": "Balloons.transcriptstyle", + "path": "Messages/PlugIns/Balloons.transcriptstyle" + }, + { + "value": 8, + "name": "Boxes.transcriptstyle", + "path": "Messages/PlugIns/Boxes.transcriptstyle" + }, + { + "value": 8, + "name": "Compact.transcriptstyle", + "path": "Messages/PlugIns/Compact.transcriptstyle" + }, + { + "value": 76, + "name": "FaceTime.imservice", + "path": "Messages/PlugIns/FaceTime.imservice" + }, + { + "value": 84, + "name": "iMessage.imservice", + "path": "Messages/PlugIns/iMessage.imservice" + } + ] + } + ] + }, + { + "value": 0, + "name": "Metadata", + "path": "Metadata", + "children": [ + { + "value": 0, + "name": "com.apple.finder.legacy.mdlabels", + "path": "Metadata/com.apple.finder.legacy.mdlabels", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Metadata/com.apple.finder.legacy.mdlabels/Contents" + } + ] + } + ] + }, + { + "value": 3276, + "name": "MonitorPanels", + "path": "MonitorPanels", + "children": [ + { + "value": 860, + "name": "AppleDisplay.monitorPanels", + "path": "MonitorPanels/AppleDisplay.monitorPanels", + "children": [ + { + "value": 860, + "name": "Contents", + "path": "MonitorPanels/AppleDisplay.monitorPanels/Contents" + } + ] + }, + { + "value": 36, + "name": "Arrange.monitorPanel", + "path": "MonitorPanels/Arrange.monitorPanel", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "MonitorPanels/Arrange.monitorPanel/Contents" + } + ] + }, + { + "value": 2080, + "name": "Display.monitorPanel", + "path": "MonitorPanels/Display.monitorPanel", + "children": [ + { + "value": 2080, + "name": "Contents", + "path": "MonitorPanels/Display.monitorPanel/Contents" + } + ] + }, + { + "value": 300, + "name": "Profile.monitorPanel", + "path": "MonitorPanels/Profile.monitorPanel", + "children": [ + { + "value": 300, + "name": "Contents", + "path": "MonitorPanels/Profile.monitorPanel/Contents" + } + ] + } + ] + }, + { + "value": 652, + "name": "OpenDirectory", + "path": "OpenDirectory", + "children": [ + { + "value": 8, + "name": "Configurations", + "path": "OpenDirectory/Configurations" + }, + { + "value": 0, + "name": "DynamicNodeTemplates", + "path": "OpenDirectory/DynamicNodeTemplates" + }, + { + "value": 0, + "name": "ManagedClient", + "path": "OpenDirectory/ManagedClient" + }, + { + "value": 12, + "name": "Mappings", + "path": "OpenDirectory/Mappings" + }, + { + "value": 612, + "name": "Modules", + "path": "OpenDirectory/Modules", + "children": [ + { + "value": 68, + "name": "ActiveDirectory.bundle", + "path": "OpenDirectory/Modules/ActiveDirectory.bundle" + }, + { + "value": 12, + "name": "AppleID.bundle", + "path": "OpenDirectory/Modules/AppleID.bundle" + }, + { + "value": 76, + "name": "AppleODClientLDAP.bundle", + "path": "OpenDirectory/Modules/AppleODClientLDAP.bundle" + }, + { + "value": 68, + "name": "AppleODClientPWS.bundle", + "path": "OpenDirectory/Modules/AppleODClientPWS.bundle" + }, + { + "value": 12, + "name": "ConfigurationProfiles.bundle", + "path": "OpenDirectory/Modules/ConfigurationProfiles.bundle" + }, + { + "value": 20, + "name": "configure.bundle", + "path": "OpenDirectory/Modules/configure.bundle" + }, + { + "value": 8, + "name": "FDESupport.bundle", + "path": "OpenDirectory/Modules/FDESupport.bundle" + }, + { + "value": 12, + "name": "Kerberosv5.bundle", + "path": "OpenDirectory/Modules/Kerberosv5.bundle" + }, + { + "value": 8, + "name": "keychain.bundle", + "path": "OpenDirectory/Modules/keychain.bundle" + }, + { + "value": 44, + "name": "ldap.bundle", + "path": "OpenDirectory/Modules/ldap.bundle" + }, + { + "value": 12, + "name": "legacy.bundle", + "path": "OpenDirectory/Modules/legacy.bundle" + }, + { + "value": 12, + "name": "NetLogon.bundle", + "path": "OpenDirectory/Modules/NetLogon.bundle" + }, + { + "value": 24, + "name": "nis.bundle", + "path": "OpenDirectory/Modules/nis.bundle" + }, + { + "value": 68, + "name": "PlistFile.bundle", + "path": "OpenDirectory/Modules/PlistFile.bundle" + }, + { + "value": 16, + "name": "proxy.bundle", + "path": "OpenDirectory/Modules/proxy.bundle" + }, + { + "value": 20, + "name": "search.bundle", + "path": "OpenDirectory/Modules/search.bundle" + }, + { + "value": 8, + "name": "statistics.bundle", + "path": "OpenDirectory/Modules/statistics.bundle" + }, + { + "value": 124, + "name": "SystemCache.bundle", + "path": "OpenDirectory/Modules/SystemCache.bundle" + } + ] + }, + { + "value": 8, + "name": "Templates", + "path": "OpenDirectory/Templates", + "children": [ + { + "value": 0, + "name": "LDAPv3", + "path": "DirectoryServices/Templates/LDAPv3" + } + ] + } + ] + }, + { + "value": 0, + "name": "OpenSSL", + "path": "OpenSSL", + "children": [ + { + "value": 0, + "name": "certs", + "path": "OpenSSL/certs" + }, + { + "value": 0, + "name": "misc", + "path": "OpenSSL/misc" + }, + { + "value": 0, + "name": "private", + "path": "OpenSSL/private" + } + ] + }, + { + "value": 8, + "name": "PasswordServer Filters", + "path": "PasswordServer Filters" + }, + { + "value": 0, + "name": "PerformanceMetrics", + "path": "PerformanceMetrics" + }, + { + "value": 57236, + "name": "Perl", + "path": "Perl", + "children": [ + { + "value": 14848, + "name": "5.12", + "path": "Perl/5.12", + "children": [ + { + "value": 20, + "name": "App", + "path": "Perl/5.12/App" + }, + { + "value": 48, + "name": "Archive", + "path": "Perl/5.12/Archive" + }, + { + "value": 12, + "name": "Attribute", + "path": "Perl/5.12/Attribute" + }, + { + "value": 16, + "name": "autodie", + "path": "Perl/5.12/autodie" + }, + { + "value": 56, + "name": "B", + "path": "Perl/5.12/B" + }, + { + "value": 0, + "name": "Carp", + "path": "Perl/5.12/Carp" + }, + { + "value": 32, + "name": "CGI", + "path": "Perl/5.12/CGI" + }, + { + "value": 8, + "name": "Class", + "path": "Perl/5.12/Class" + }, + { + "value": 12, + "name": "Compress", + "path": "Perl/5.12/Compress" + }, + { + "value": 0, + "name": "Config", + "path": "Perl/5.12/Config" + }, + { + "value": 120, + "name": "CPAN", + "path": "Perl/5.12/CPAN" + }, + { + "value": 180, + "name": "CPANPLUS", + "path": "Perl/5.12/CPANPLUS" + }, + { + "value": 7064, + "name": "darwin-thread-multi-2level", + "path": "Perl/5.12/darwin-thread-multi-2level" + }, + { + "value": 0, + "name": "DBM_Filter", + "path": "Perl/5.12/DBM_Filter" + }, + { + "value": 0, + "name": "Devel", + "path": "Perl/5.12/Devel" + }, + { + "value": 0, + "name": "Digest", + "path": "Perl/5.12/Digest" + }, + { + "value": 12, + "name": "Encode", + "path": "Perl/5.12/Encode" + }, + { + "value": 0, + "name": "encoding", + "path": "Perl/5.12/encoding" + }, + { + "value": 0, + "name": "Exporter", + "path": "Perl/5.12/Exporter" + }, + { + "value": 224, + "name": "ExtUtils", + "path": "Perl/5.12/ExtUtils" + }, + { + "value": 104, + "name": "File", + "path": "Perl/5.12/File" + }, + { + "value": 12, + "name": "Filter", + "path": "Perl/5.12/Filter" + }, + { + "value": 28, + "name": "Getopt", + "path": "Perl/5.12/Getopt" + }, + { + "value": 24, + "name": "I18N", + "path": "Perl/5.12/I18N" + }, + { + "value": 0, + "name": "inc", + "path": "Perl/5.12/inc" + }, + { + "value": 152, + "name": "IO", + "path": "Perl/5.12/IO" + }, + { + "value": 24, + "name": "IPC", + "path": "Perl/5.12/IPC" + }, + { + "value": 60, + "name": "Locale", + "path": "Perl/5.12/Locale" + }, + { + "value": 8, + "name": "Log", + "path": "Perl/5.12/Log" + }, + { + "value": 144, + "name": "Math", + "path": "Perl/5.12/Math" + }, + { + "value": 8, + "name": "Memoize", + "path": "Perl/5.12/Memoize" + }, + { + "value": 284, + "name": "Module", + "path": "Perl/5.12/Module" + }, + { + "value": 80, + "name": "Net", + "path": "Perl/5.12/Net" + }, + { + "value": 8, + "name": "Object", + "path": "Perl/5.12/Object" + }, + { + "value": 0, + "name": "overload", + "path": "Perl/5.12/overload" + }, + { + "value": 0, + "name": "Package", + "path": "Perl/5.12/Package" + }, + { + "value": 8, + "name": "Params", + "path": "Perl/5.12/Params" + }, + { + "value": 0, + "name": "Parse", + "path": "Perl/5.12/Parse" + }, + { + "value": 0, + "name": "PerlIO", + "path": "Perl/5.12/PerlIO" + }, + { + "value": 312, + "name": "Pod", + "path": "Perl/5.12/Pod" + }, + { + "value": 2452, + "name": "pods", + "path": "Perl/5.12/pods" + }, + { + "value": 0, + "name": "Search", + "path": "Perl/5.12/Search" + }, + { + "value": 32, + "name": "TAP", + "path": "Perl/5.12/TAP" + }, + { + "value": 36, + "name": "Term", + "path": "Perl/5.12/Term" + }, + { + "value": 60, + "name": "Test", + "path": "Perl/5.12/Test" + }, + { + "value": 20, + "name": "Text", + "path": "Perl/5.12/Text" + }, + { + "value": 8, + "name": "Thread", + "path": "Perl/5.12/Thread" + }, + { + "value": 28, + "name": "Tie", + "path": "Perl/5.12/Tie" + }, + { + "value": 8, + "name": "Time", + "path": "Perl/5.12/Time" + }, + { + "value": 280, + "name": "Unicode", + "path": "Perl/5.12/Unicode" + }, + { + "value": 2348, + "name": "unicore", + "path": "Perl/5.12/unicore" + }, + { + "value": 8, + "name": "User", + "path": "Perl/5.12/User" + }, + { + "value": 12, + "name": "version", + "path": "Perl/5.12/version" + }, + { + "value": 0, + "name": "warnings", + "path": "Perl/5.12/warnings" + } + ] + }, + { + "value": 14072, + "name": "5.16", + "path": "Perl/5.16", + "children": [ + { + "value": 20, + "name": "App", + "path": "Perl/5.16/App" + }, + { + "value": 48, + "name": "Archive", + "path": "Perl/5.16/Archive" + }, + { + "value": 12, + "name": "Attribute", + "path": "Perl/5.16/Attribute" + }, + { + "value": 16, + "name": "autodie", + "path": "Perl/5.16/autodie" + }, + { + "value": 56, + "name": "B", + "path": "Perl/5.16/B" + }, + { + "value": 0, + "name": "Carp", + "path": "Perl/5.16/Carp" + }, + { + "value": 32, + "name": "CGI", + "path": "Perl/5.16/CGI" + }, + { + "value": 8, + "name": "Class", + "path": "Perl/5.16/Class" + }, + { + "value": 12, + "name": "Compress", + "path": "Perl/5.16/Compress" + }, + { + "value": 0, + "name": "Config", + "path": "Perl/5.16/Config" + }, + { + "value": 192, + "name": "CPAN", + "path": "Perl/5.16/CPAN" + }, + { + "value": 180, + "name": "CPANPLUS", + "path": "Perl/5.16/CPANPLUS" + }, + { + "value": 7328, + "name": "darwin-thread-multi-2level", + "path": "Perl/5.16/darwin-thread-multi-2level" + }, + { + "value": 0, + "name": "DBM_Filter", + "path": "Perl/5.16/DBM_Filter" + }, + { + "value": 0, + "name": "Devel", + "path": "Perl/5.16/Devel" + }, + { + "value": 0, + "name": "Digest", + "path": "Perl/5.16/Digest" + }, + { + "value": 12, + "name": "Encode", + "path": "Perl/5.16/Encode" + }, + { + "value": 0, + "name": "encoding", + "path": "Perl/5.16/encoding" + }, + { + "value": 0, + "name": "Exporter", + "path": "Perl/5.16/Exporter" + }, + { + "value": 248, + "name": "ExtUtils", + "path": "Perl/5.16/ExtUtils" + }, + { + "value": 96, + "name": "File", + "path": "Perl/5.16/File" + }, + { + "value": 12, + "name": "Filter", + "path": "Perl/5.16/Filter" + }, + { + "value": 28, + "name": "Getopt", + "path": "Perl/5.16/Getopt" + }, + { + "value": 12, + "name": "HTTP", + "path": "Perl/5.16/HTTP" + }, + { + "value": 24, + "name": "I18N", + "path": "Perl/5.16/I18N" + }, + { + "value": 0, + "name": "inc", + "path": "Perl/5.16/inc" + }, + { + "value": 168, + "name": "IO", + "path": "Perl/5.16/IO" + }, + { + "value": 28, + "name": "IPC", + "path": "Perl/5.16/IPC" + }, + { + "value": 28, + "name": "JSON", + "path": "Perl/5.16/JSON" + }, + { + "value": 372, + "name": "Locale", + "path": "Perl/5.16/Locale" + }, + { + "value": 8, + "name": "Log", + "path": "Perl/5.16/Log" + }, + { + "value": 148, + "name": "Math", + "path": "Perl/5.16/Math" + }, + { + "value": 8, + "name": "Memoize", + "path": "Perl/5.16/Memoize" + }, + { + "value": 212, + "name": "Module", + "path": "Perl/5.16/Module" + }, + { + "value": 80, + "name": "Net", + "path": "Perl/5.16/Net" + }, + { + "value": 8, + "name": "Object", + "path": "Perl/5.16/Object" + }, + { + "value": 0, + "name": "overload", + "path": "Perl/5.16/overload" + }, + { + "value": 0, + "name": "Package", + "path": "Perl/5.16/Package" + }, + { + "value": 8, + "name": "Params", + "path": "Perl/5.16/Params" + }, + { + "value": 0, + "name": "Parse", + "path": "Perl/5.16/Parse" + }, + { + "value": 0, + "name": "Perl", + "path": "Perl/5.16/Perl" + }, + { + "value": 0, + "name": "PerlIO", + "path": "Perl/5.16/PerlIO" + }, + { + "value": 324, + "name": "Pod", + "path": "Perl/5.16/Pod" + }, + { + "value": 2452, + "name": "pods", + "path": "Perl/5.16/pods" + }, + { + "value": 0, + "name": "Search", + "path": "Perl/5.16/Search" + }, + { + "value": 44, + "name": "TAP", + "path": "Perl/5.16/TAP" + }, + { + "value": 36, + "name": "Term", + "path": "Perl/5.16/Term" + }, + { + "value": 60, + "name": "Test", + "path": "Perl/5.16/Test" + }, + { + "value": 20, + "name": "Text", + "path": "Perl/5.16/Text" + }, + { + "value": 8, + "name": "Thread", + "path": "Perl/5.16/Thread" + }, + { + "value": 28, + "name": "Tie", + "path": "Perl/5.16/Tie" + }, + { + "value": 8, + "name": "Time", + "path": "Perl/5.16/Time" + }, + { + "value": 684, + "name": "Unicode", + "path": "Perl/5.16/Unicode" + }, + { + "value": 468, + "name": "unicore", + "path": "Perl/5.16/unicore" + }, + { + "value": 8, + "name": "User", + "path": "Perl/5.16/User" + }, + { + "value": 12, + "name": "version", + "path": "Perl/5.16/version" + }, + { + "value": 0, + "name": "warnings", + "path": "Perl/5.16/warnings" + } + ] + }, + { + "value": 28316, + "name": "Extras", + "path": "Perl/Extras", + "children": [ + { + "value": 14188, + "name": "5.12", + "path": "Perl/Extras/5.12" + }, + { + "value": 14128, + "name": "5.16", + "path": "Perl/Extras/5.16" + } + ] + } + ] + }, + { + "value": 226552, + "name": "PreferencePanes", + "path": "PreferencePanes", + "children": [ + { + "value": 5380, + "name": "Accounts.prefPane", + "path": "PreferencePanes/Accounts.prefPane", + "children": [ + { + "value": 5380, + "name": "Contents", + "path": "PreferencePanes/Accounts.prefPane/Contents" + } + ] + }, + { + "value": 1448, + "name": "Appearance.prefPane", + "path": "PreferencePanes/Appearance.prefPane", + "children": [ + { + "value": 1448, + "name": "Contents", + "path": "PreferencePanes/Appearance.prefPane/Contents" + } + ] + }, + { + "value": 2008, + "name": "AppStore.prefPane", + "path": "PreferencePanes/AppStore.prefPane", + "children": [ + { + "value": 2008, + "name": "Contents", + "path": "PreferencePanes/AppStore.prefPane/Contents" + } + ] + }, + { + "value": 1636, + "name": "Bluetooth.prefPane", + "path": "PreferencePanes/Bluetooth.prefPane", + "children": [ + { + "value": 1636, + "name": "Contents", + "path": "PreferencePanes/Bluetooth.prefPane/Contents" + } + ] + }, + { + "value": 2348, + "name": "DateAndTime.prefPane", + "path": "PreferencePanes/DateAndTime.prefPane", + "children": [ + { + "value": 2348, + "name": "Contents", + "path": "PreferencePanes/DateAndTime.prefPane/Contents" + } + ] + }, + { + "value": 4644, + "name": "DesktopScreenEffectsPref.prefPane", + "path": "PreferencePanes/DesktopScreenEffectsPref.prefPane", + "children": [ + { + "value": 4644, + "name": "Contents", + "path": "PreferencePanes/DesktopScreenEffectsPref.prefPane/Contents" + } + ] + }, + { + "value": 2148, + "name": "DigiHubDiscs.prefPane", + "path": "PreferencePanes/DigiHubDiscs.prefPane", + "children": [ + { + "value": 2148, + "name": "Contents", + "path": "PreferencePanes/DigiHubDiscs.prefPane/Contents" + } + ] + }, + { + "value": 624, + "name": "Displays.prefPane", + "path": "PreferencePanes/Displays.prefPane", + "children": [ + { + "value": 624, + "name": "Contents", + "path": "PreferencePanes/Displays.prefPane/Contents" + } + ] + }, + { + "value": 1012, + "name": "Dock.prefPane", + "path": "PreferencePanes/Dock.prefPane", + "children": [ + { + "value": 1012, + "name": "Contents", + "path": "PreferencePanes/Dock.prefPane/Contents" + } + ] + }, + { + "value": 2568, + "name": "EnergySaver.prefPane", + "path": "PreferencePanes/EnergySaver.prefPane", + "children": [ + { + "value": 2568, + "name": "Contents", + "path": "PreferencePanes/EnergySaver.prefPane/Contents" + } + ] + }, + { + "value": 3056, + "name": "Expose.prefPane", + "path": "PreferencePanes/Expose.prefPane", + "children": [ + { + "value": 3056, + "name": "Contents", + "path": "PreferencePanes/Expose.prefPane/Contents" + } + ] + }, + { + "value": 156, + "name": "FibreChannel.prefPane", + "path": "PreferencePanes/FibreChannel.prefPane", + "children": [ + { + "value": 156, + "name": "Contents", + "path": "PreferencePanes/FibreChannel.prefPane/Contents" + } + ] + }, + { + "value": 252, + "name": "iCloudPref.prefPane", + "path": "PreferencePanes/iCloudPref.prefPane", + "children": [ + { + "value": 252, + "name": "Contents", + "path": "PreferencePanes/iCloudPref.prefPane/Contents" + } + ] + }, + { + "value": 1588, + "name": "Ink.prefPane", + "path": "PreferencePanes/Ink.prefPane", + "children": [ + { + "value": 1588, + "name": "Contents", + "path": "PreferencePanes/Ink.prefPane/Contents" + } + ] + }, + { + "value": 4616, + "name": "InternetAccounts.prefPane", + "path": "PreferencePanes/InternetAccounts.prefPane", + "children": [ + { + "value": 4616, + "name": "Contents", + "path": "PreferencePanes/InternetAccounts.prefPane/Contents" + } + ] + }, + { + "value": 3676, + "name": "Keyboard.prefPane", + "path": "PreferencePanes/Keyboard.prefPane", + "children": [ + { + "value": 3676, + "name": "Contents", + "path": "PreferencePanes/Keyboard.prefPane/Contents" + } + ] + }, + { + "value": 3468, + "name": "Localization.prefPane", + "path": "PreferencePanes/Localization.prefPane", + "children": [ + { + "value": 3468, + "name": "Contents", + "path": "PreferencePanes/Localization.prefPane/Contents" + } + ] + }, + { + "value": 23180, + "name": "Mouse.prefPane", + "path": "PreferencePanes/Mouse.prefPane", + "children": [ + { + "value": 23180, + "name": "Contents", + "path": "PreferencePanes/Mouse.prefPane/Contents" + } + ] + }, + { + "value": 20588, + "name": "Network.prefPane", + "path": "PreferencePanes/Network.prefPane", + "children": [ + { + "value": 20588, + "name": "Contents", + "path": "PreferencePanes/Network.prefPane/Contents" + } + ] + }, + { + "value": 1512, + "name": "Notifications.prefPane", + "path": "PreferencePanes/Notifications.prefPane", + "children": [ + { + "value": 1512, + "name": "Contents", + "path": "PreferencePanes/Notifications.prefPane/Contents" + } + ] + }, + { + "value": 7648, + "name": "ParentalControls.prefPane", + "path": "PreferencePanes/ParentalControls.prefPane", + "children": [ + { + "value": 7648, + "name": "Contents", + "path": "PreferencePanes/ParentalControls.prefPane/Contents" + } + ] + }, + { + "value": 4060, + "name": "PrintAndScan.prefPane", + "path": "PreferencePanes/PrintAndScan.prefPane", + "children": [ + { + "value": 4060, + "name": "Contents", + "path": "PreferencePanes/PrintAndScan.prefPane/Contents" + } + ] + }, + { + "value": 1904, + "name": "Profiles.prefPane", + "path": "PreferencePanes/Profiles.prefPane", + "children": [ + { + "value": 1904, + "name": "Contents", + "path": "PreferencePanes/Profiles.prefPane/Contents" + } + ] + }, + { + "value": 6280, + "name": "Security.prefPane", + "path": "PreferencePanes/Security.prefPane", + "children": [ + { + "value": 6280, + "name": "Contents", + "path": "PreferencePanes/Security.prefPane/Contents" + } + ] + }, + { + "value": 9608, + "name": "SharingPref.prefPane", + "path": "PreferencePanes/SharingPref.prefPane", + "children": [ + { + "value": 9608, + "name": "Contents", + "path": "PreferencePanes/SharingPref.prefPane/Contents" + } + ] + }, + { + "value": 2204, + "name": "Sound.prefPane", + "path": "PreferencePanes/Sound.prefPane", + "children": [ + { + "value": 2204, + "name": "Contents", + "path": "PreferencePanes/Sound.prefPane/Contents" + } + ] + }, + { + "value": 1072, + "name": "Speech.prefPane", + "path": "PreferencePanes/Speech.prefPane", + "children": [ + { + "value": 1072, + "name": "Contents", + "path": "PreferencePanes/Speech.prefPane/Contents" + } + ] + }, + { + "value": 1112, + "name": "Spotlight.prefPane", + "path": "PreferencePanes/Spotlight.prefPane", + "children": [ + { + "value": 1112, + "name": "Contents", + "path": "PreferencePanes/Spotlight.prefPane/Contents" + } + ] + }, + { + "value": 2040, + "name": "StartupDisk.prefPane", + "path": "PreferencePanes/StartupDisk.prefPane", + "children": [ + { + "value": 2040, + "name": "Contents", + "path": "PreferencePanes/StartupDisk.prefPane/Contents" + } + ] + }, + { + "value": 3080, + "name": "TimeMachine.prefPane", + "path": "PreferencePanes/TimeMachine.prefPane", + "children": [ + { + "value": 3080, + "name": "Contents", + "path": "PreferencePanes/TimeMachine.prefPane/Contents" + } + ] + }, + { + "value": 93312, + "name": "Trackpad.prefPane", + "path": "PreferencePanes/Trackpad.prefPane", + "children": [ + { + "value": 93312, + "name": "Contents", + "path": "PreferencePanes/Trackpad.prefPane/Contents" + } + ] + }, + { + "value": 7680, + "name": "UniversalAccessPref.prefPane", + "path": "PreferencePanes/UniversalAccessPref.prefPane", + "children": [ + { + "value": 7680, + "name": "Contents", + "path": "PreferencePanes/UniversalAccessPref.prefPane/Contents" + } + ] + }, + { + "value": 640, + "name": "Xsan.prefPane", + "path": "PreferencePanes/Xsan.prefPane", + "children": [ + { + "value": 640, + "name": "Contents", + "path": "PreferencePanes/Xsan.prefPane/Contents" + } + ] + } + ] + }, + { + "value": 224, + "name": "Printers", + "path": "Printers", + "children": [ + { + "value": 224, + "name": "Libraries", + "path": "Printers/Libraries", + "children": [ + { + "value": 24, + "name": "USBGenericPrintingClass.plugin", + "path": "Printers/Libraries/USBGenericPrintingClass.plugin" + }, + { + "value": 24, + "name": "USBGenericTOPrintingClass.plugin", + "path": "Printers/Libraries/USBGenericTOPrintingClass.plugin" + } + ] + } + ] + }, + { + "value": 586092, + "name": "PrivateFrameworks", + "path": "PrivateFrameworks", + "children": [ + { + "value": 52, + "name": "AccessibilityBundles.framework", + "path": "PrivateFrameworks/AccessibilityBundles.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/AccessibilityBundles.framework/Versions" + } + ] + }, + { + "value": 348, + "name": "AccountsDaemon.framework", + "path": "PrivateFrameworks/AccountsDaemon.framework", + "children": [ + { + "value": 332, + "name": "Versions", + "path": "PrivateFrameworks/AccountsDaemon.framework/Versions" + }, + { + "value": 8, + "name": "XPCServices", + "path": "PrivateFrameworks/AccountsDaemon.framework/XPCServices" + } + ] + }, + { + "value": 168, + "name": "Admin.framework", + "path": "PrivateFrameworks/Admin.framework", + "children": [ + { + "value": 160, + "name": "Versions", + "path": "PrivateFrameworks/Admin.framework/Versions" + } + ] + }, + { + "value": 408, + "name": "AirPortDevices.framework", + "path": "PrivateFrameworks/AirPortDevices.framework", + "children": [ + { + "value": 408, + "name": "Versions", + "path": "PrivateFrameworks/AirPortDevices.framework/Versions" + } + ] + }, + { + "value": 1324, + "name": "AirTrafficHost.framework", + "path": "PrivateFrameworks/AirTrafficHost.framework", + "children": [ + { + "value": 1276, + "name": "Versions", + "path": "PrivateFrameworks/AirTrafficHost.framework/Versions" + } + ] + }, + { + "value": 2408, + "name": "Altitude.framework", + "path": "PrivateFrameworks/Altitude.framework", + "children": [ + { + "value": 2400, + "name": "Versions", + "path": "PrivateFrameworks/Altitude.framework/Versions" + } + ] + }, + { + "value": 224, + "name": "AOSAccounts.framework", + "path": "PrivateFrameworks/AOSAccounts.framework", + "children": [ + { + "value": 216, + "name": "Versions", + "path": "PrivateFrameworks/AOSAccounts.framework/Versions" + } + ] + }, + { + "value": 4672, + "name": "AOSKit.framework", + "path": "PrivateFrameworks/AOSKit.framework", + "children": [ + { + "value": 4656, + "name": "Versions", + "path": "PrivateFrameworks/AOSKit.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "AOSMigrate.framework", + "path": "PrivateFrameworks/AOSMigrate.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "PrivateFrameworks/AOSMigrate.framework/Versions" + } + ] + }, + { + "value": 1300, + "name": "AOSNotification.framework", + "path": "PrivateFrameworks/AOSNotification.framework", + "children": [ + { + "value": 52, + "name": "Versions", + "path": "PrivateFrameworks/AOSNotification.framework/Versions" + } + ] + }, + { + "value": 16500, + "name": "AOSUI.framework", + "path": "PrivateFrameworks/AOSUI.framework", + "children": [ + { + "value": 16492, + "name": "Versions", + "path": "PrivateFrameworks/AOSUI.framework/Versions" + } + ] + }, + { + "value": 124, + "name": "AppContainer.framework", + "path": "PrivateFrameworks/AppContainer.framework", + "children": [ + { + "value": 116, + "name": "Versions", + "path": "PrivateFrameworks/AppContainer.framework/Versions" + } + ] + }, + { + "value": 324, + "name": "Apple80211.framework", + "path": "PrivateFrameworks/Apple80211.framework", + "children": [ + { + "value": 316, + "name": "Versions", + "path": "PrivateFrameworks/Apple80211.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "AppleAppSupport.framework", + "path": "PrivateFrameworks/AppleAppSupport.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "PrivateFrameworks/AppleAppSupport.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "AppleFSCompression.framework", + "path": "PrivateFrameworks/AppleFSCompression.framework", + "children": [ + { + "value": 80, + "name": "Versions", + "path": "PrivateFrameworks/AppleFSCompression.framework/Versions" + } + ] + }, + { + "value": 712, + "name": "AppleGVA.framework", + "path": "PrivateFrameworks/AppleGVA.framework", + "children": [ + { + "value": 704, + "name": "Versions", + "path": "PrivateFrameworks/AppleGVA.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "AppleGVACore.framework", + "path": "PrivateFrameworks/AppleGVACore.framework", + "children": [ + { + "value": 80, + "name": "Versions", + "path": "PrivateFrameworks/AppleGVACore.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "AppleLDAP.framework", + "path": "PrivateFrameworks/AppleLDAP.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/AppleLDAP.framework/Versions" + } + ] + }, + { + "value": 588, + "name": "AppleProfileFamily.framework", + "path": "PrivateFrameworks/AppleProfileFamily.framework", + "children": [ + { + "value": 580, + "name": "Versions", + "path": "PrivateFrameworks/AppleProfileFamily.framework/Versions" + } + ] + }, + { + "value": 508, + "name": "ApplePushService.framework", + "path": "PrivateFrameworks/ApplePushService.framework", + "children": [ + { + "value": 128, + "name": "Versions", + "path": "PrivateFrameworks/ApplePushService.framework/Versions" + } + ] + }, + { + "value": 672, + "name": "AppleScript.framework", + "path": "PrivateFrameworks/AppleScript.framework", + "children": [ + { + "value": 664, + "name": "Versions", + "path": "PrivateFrameworks/AppleScript.framework/Versions" + } + ] + }, + { + "value": 68, + "name": "AppleSRP.framework", + "path": "PrivateFrameworks/AppleSRP.framework", + "children": [ + { + "value": 60, + "name": "Versions", + "path": "PrivateFrameworks/AppleSRP.framework/Versions" + } + ] + }, + { + "value": 44, + "name": "AppleSystemInfo.framework", + "path": "PrivateFrameworks/AppleSystemInfo.framework", + "children": [ + { + "value": 36, + "name": "Versions", + "path": "PrivateFrameworks/AppleSystemInfo.framework/Versions" + } + ] + }, + { + "value": 336, + "name": "AppleVA.framework", + "path": "PrivateFrameworks/AppleVA.framework", + "children": [ + { + "value": 328, + "name": "Versions", + "path": "PrivateFrameworks/AppleVA.framework/Versions" + } + ] + }, + { + "value": 72, + "name": "AppSandbox.framework", + "path": "PrivateFrameworks/AppSandbox.framework", + "children": [ + { + "value": 64, + "name": "Versions", + "path": "PrivateFrameworks/AppSandbox.framework/Versions" + } + ] + }, + { + "value": 380, + "name": "Assistant.framework", + "path": "PrivateFrameworks/Assistant.framework", + "children": [ + { + "value": 372, + "name": "Versions", + "path": "PrivateFrameworks/Assistant.framework/Versions" + } + ] + }, + { + "value": 1772, + "name": "AssistantServices.framework", + "path": "PrivateFrameworks/AssistantServices.framework", + "children": [ + { + "value": 116, + "name": "Versions", + "path": "PrivateFrameworks/AssistantServices.framework/Versions" + } + ] + }, + { + "value": 684, + "name": "AssistiveControlSupport.framework", + "path": "PrivateFrameworks/AssistiveControlSupport.framework", + "children": [ + { + "value": 224, + "name": "Frameworks", + "path": "PrivateFrameworks/AssistiveControlSupport.framework/Frameworks" + }, + { + "value": 452, + "name": "Versions", + "path": "PrivateFrameworks/AssistiveControlSupport.framework/Versions" + } + ] + }, + { + "value": 1880, + "name": "AVConference.framework", + "path": "PrivateFrameworks/AVConference.framework", + "children": [ + { + "value": 388, + "name": "Frameworks", + "path": "PrivateFrameworks/AVConference.framework/Frameworks" + }, + { + "value": 1484, + "name": "Versions", + "path": "PrivateFrameworks/AVConference.framework/Versions" + } + ] + }, + { + "value": 168, + "name": "AVCore.framework", + "path": "PrivateFrameworks/AVCore.framework", + "children": [ + { + "value": 160, + "name": "Versions", + "path": "PrivateFrameworks/AVCore.framework/Versions" + } + ] + }, + { + "value": 296, + "name": "AVFoundationCF.framework", + "path": "PrivateFrameworks/AVFoundationCF.framework", + "children": [ + { + "value": 288, + "name": "Versions", + "path": "PrivateFrameworks/AVFoundationCF.framework/Versions" + } + ] + }, + { + "value": 3728, + "name": "Backup.framework", + "path": "PrivateFrameworks/Backup.framework", + "children": [ + { + "value": 3720, + "name": "Versions", + "path": "PrivateFrameworks/Backup.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "BezelServices.framework", + "path": "PrivateFrameworks/BezelServices.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/BezelServices.framework/Versions" + } + ] + }, + { + "value": 316, + "name": "Bom.framework", + "path": "PrivateFrameworks/Bom.framework", + "children": [ + { + "value": 308, + "name": "Versions", + "path": "PrivateFrameworks/Bom.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "BookKit.framework", + "path": "PrivateFrameworks/BookKit.framework", + "children": [ + { + "value": 76, + "name": "Versions", + "path": "PrivateFrameworks/BookKit.framework/Versions" + } + ] + }, + { + "value": 124, + "name": "BookmarkDAV.framework", + "path": "PrivateFrameworks/BookmarkDAV.framework", + "children": [ + { + "value": 108, + "name": "Versions", + "path": "PrivateFrameworks/BookmarkDAV.framework/Versions" + } + ] + }, + { + "value": 1732, + "name": "BrowserKit.framework", + "path": "PrivateFrameworks/BrowserKit.framework", + "children": [ + { + "value": 1724, + "name": "Versions", + "path": "PrivateFrameworks/BrowserKit.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "ByteRangeLocking.framework", + "path": "PrivateFrameworks/ByteRangeLocking.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/ByteRangeLocking.framework/Versions" + } + ] + }, + { + "value": 64, + "name": "Calculate.framework", + "path": "PrivateFrameworks/Calculate.framework", + "children": [ + { + "value": 56, + "name": "Versions", + "path": "PrivateFrameworks/Calculate.framework/Versions" + } + ] + }, + { + "value": 356, + "name": "CalDAV.framework", + "path": "PrivateFrameworks/CalDAV.framework", + "children": [ + { + "value": 348, + "name": "Versions", + "path": "PrivateFrameworks/CalDAV.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "CalendarAgent.framework", + "path": "PrivateFrameworks/CalendarAgent.framework", + "children": [ + { + "value": 8, + "name": "Executables", + "path": "PrivateFrameworks/CalendarAgent.framework/Executables" + }, + { + "value": 88, + "name": "Versions", + "path": "PrivateFrameworks/CalendarAgent.framework/Versions" + } + ] + }, + { + "value": 88, + "name": "CalendarAgentLink.framework", + "path": "PrivateFrameworks/CalendarAgentLink.framework", + "children": [ + { + "value": 80, + "name": "Versions", + "path": "PrivateFrameworks/CalendarAgentLink.framework/Versions" + } + ] + }, + { + "value": 220, + "name": "CalendarDraw.framework", + "path": "PrivateFrameworks/CalendarDraw.framework", + "children": [ + { + "value": 212, + "name": "Versions", + "path": "PrivateFrameworks/CalendarDraw.framework/Versions" + } + ] + }, + { + "value": 196, + "name": "CalendarFoundation.framework", + "path": "PrivateFrameworks/CalendarFoundation.framework", + "children": [ + { + "value": 188, + "name": "Versions", + "path": "PrivateFrameworks/CalendarFoundation.framework/Versions" + } + ] + }, + { + "value": 4872, + "name": "CalendarPersistence.framework", + "path": "PrivateFrameworks/CalendarPersistence.framework", + "children": [ + { + "value": 4864, + "name": "Versions", + "path": "PrivateFrameworks/CalendarPersistence.framework/Versions" + } + ] + }, + { + "value": 900, + "name": "CalendarUI.framework", + "path": "PrivateFrameworks/CalendarUI.framework", + "children": [ + { + "value": 892, + "name": "Versions", + "path": "PrivateFrameworks/CalendarUI.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "CaptiveNetwork.framework", + "path": "PrivateFrameworks/CaptiveNetwork.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "PrivateFrameworks/CaptiveNetwork.framework/Versions" + } + ] + }, + { + "value": 1180, + "name": "CharacterPicker.framework", + "path": "PrivateFrameworks/CharacterPicker.framework", + "children": [ + { + "value": 1168, + "name": "Versions", + "path": "PrivateFrameworks/CharacterPicker.framework/Versions" + } + ] + }, + { + "value": 192, + "name": "ChunkingLibrary.framework", + "path": "PrivateFrameworks/ChunkingLibrary.framework", + "children": [ + { + "value": 184, + "name": "Versions", + "path": "PrivateFrameworks/ChunkingLibrary.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "ClockMenuExtraPreferences.framework", + "path": "PrivateFrameworks/ClockMenuExtraPreferences.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/ClockMenuExtraPreferences.framework/Versions" + } + ] + }, + { + "value": 160, + "name": "CloudServices.framework", + "path": "PrivateFrameworks/CloudServices.framework", + "children": [ + { + "value": 104, + "name": "Versions", + "path": "PrivateFrameworks/CloudServices.framework/Versions" + }, + { + "value": 48, + "name": "XPCServices", + "path": "PrivateFrameworks/CloudServices.framework/XPCServices" + } + ] + }, + { + "value": 10768, + "name": "CommerceKit.framework", + "path": "PrivateFrameworks/CommerceKit.framework", + "children": [ + { + "value": 10752, + "name": "Versions", + "path": "PrivateFrameworks/CommerceKit.framework/Versions" + } + ] + }, + { + "value": 68, + "name": "CommonAuth.framework", + "path": "PrivateFrameworks/CommonAuth.framework", + "children": [ + { + "value": 60, + "name": "Versions", + "path": "PrivateFrameworks/CommonAuth.framework/Versions" + } + ] + }, + { + "value": 120, + "name": "CommonCandidateWindow.framework", + "path": "PrivateFrameworks/CommonCandidateWindow.framework", + "children": [ + { + "value": 112, + "name": "Versions", + "path": "PrivateFrameworks/CommonCandidateWindow.framework/Versions" + } + ] + }, + { + "value": 72, + "name": "CommunicationsFilter.framework", + "path": "PrivateFrameworks/CommunicationsFilter.framework", + "children": [ + { + "value": 28, + "name": "CMFSyncAgent.app", + "path": "PrivateFrameworks/CommunicationsFilter.framework/CMFSyncAgent.app" + }, + { + "value": 36, + "name": "Versions", + "path": "PrivateFrameworks/CommunicationsFilter.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "ConfigProfileHelper.framework", + "path": "PrivateFrameworks/ConfigProfileHelper.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/ConfigProfileHelper.framework/Versions" + } + ] + }, + { + "value": 156, + "name": "ConfigurationProfiles.framework", + "path": "PrivateFrameworks/ConfigurationProfiles.framework", + "children": [ + { + "value": 148, + "name": "Versions", + "path": "PrivateFrameworks/ConfigurationProfiles.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "ContactsAssistantServices.framework", + "path": "PrivateFrameworks/ContactsAssistantServices.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "PrivateFrameworks/ContactsAssistantServices.framework/Versions" + } + ] + }, + { + "value": 72, + "name": "ContactsAutocomplete.framework", + "path": "PrivateFrameworks/ContactsAutocomplete.framework", + "children": [ + { + "value": 64, + "name": "Versions", + "path": "PrivateFrameworks/ContactsAutocomplete.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "ContactsData.framework", + "path": "PrivateFrameworks/ContactsData.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/ContactsData.framework/Versions" + } + ] + }, + { + "value": 60, + "name": "ContactsFoundation.framework", + "path": "PrivateFrameworks/ContactsFoundation.framework", + "children": [ + { + "value": 52, + "name": "Versions", + "path": "PrivateFrameworks/ContactsFoundation.framework/Versions" + } + ] + }, + { + "value": 100, + "name": "ContactsUI.framework", + "path": "PrivateFrameworks/ContactsUI.framework", + "children": [ + { + "value": 92, + "name": "Versions", + "path": "PrivateFrameworks/ContactsUI.framework/Versions" + } + ] + }, + { + "value": 1668, + "name": "CoreADI.framework", + "path": "PrivateFrameworks/CoreADI.framework", + "children": [ + { + "value": 1660, + "name": "Versions", + "path": "PrivateFrameworks/CoreADI.framework/Versions" + } + ] + }, + { + "value": 4092, + "name": "CoreAUC.framework", + "path": "PrivateFrameworks/CoreAUC.framework", + "children": [ + { + "value": 4084, + "name": "Versions", + "path": "PrivateFrameworks/CoreAUC.framework/Versions" + } + ] + }, + { + "value": 200, + "name": "CoreAVCHD.framework", + "path": "PrivateFrameworks/CoreAVCHD.framework", + "children": [ + { + "value": 192, + "name": "Versions", + "path": "PrivateFrameworks/CoreAVCHD.framework/Versions" + } + ] + }, + { + "value": 2624, + "name": "CoreChineseEngine.framework", + "path": "PrivateFrameworks/CoreChineseEngine.framework", + "children": [ + { + "value": 2616, + "name": "Versions", + "path": "PrivateFrameworks/CoreChineseEngine.framework/Versions" + } + ] + }, + { + "value": 240, + "name": "CoreDaemon.framework", + "path": "PrivateFrameworks/CoreDaemon.framework", + "children": [ + { + "value": 232, + "name": "Versions", + "path": "PrivateFrameworks/CoreDaemon.framework/Versions" + } + ] + }, + { + "value": 488, + "name": "CoreDAV.framework", + "path": "PrivateFrameworks/CoreDAV.framework", + "children": [ + { + "value": 480, + "name": "Versions", + "path": "PrivateFrameworks/CoreDAV.framework/Versions" + } + ] + }, + { + "value": 19280, + "name": "CoreFP.framework", + "path": "PrivateFrameworks/CoreFP.framework", + "children": [ + { + "value": 19268, + "name": "Versions", + "path": "PrivateFrameworks/CoreFP.framework/Versions" + } + ] + }, + { + "value": 16124, + "name": "CoreHandwriting.framework", + "path": "PrivateFrameworks/CoreHandwriting.framework", + "children": [ + { + "value": 16116, + "name": "Versions", + "path": "PrivateFrameworks/CoreHandwriting.framework/Versions" + } + ] + }, + { + "value": 2124, + "name": "CoreKE.framework", + "path": "PrivateFrameworks/CoreKE.framework", + "children": [ + { + "value": 2116, + "name": "Versions", + "path": "PrivateFrameworks/CoreKE.framework/Versions" + } + ] + }, + { + "value": 7856, + "name": "CoreLSKD.framework", + "path": "PrivateFrameworks/CoreLSKD.framework", + "children": [ + { + "value": 7848, + "name": "Versions", + "path": "PrivateFrameworks/CoreLSKD.framework/Versions" + } + ] + }, + { + "value": 824, + "name": "CoreMediaAuthoring.framework", + "path": "PrivateFrameworks/CoreMediaAuthoring.framework", + "children": [ + { + "value": 816, + "name": "Versions", + "path": "PrivateFrameworks/CoreMediaAuthoring.framework/Versions" + } + ] + }, + { + "value": 784, + "name": "CoreMediaIOServicesPrivate.framework", + "path": "PrivateFrameworks/CoreMediaIOServicesPrivate.framework", + "children": [ + { + "value": 776, + "name": "Versions", + "path": "PrivateFrameworks/CoreMediaIOServicesPrivate.framework/Versions" + } + ] + }, + { + "value": 116, + "name": "CoreMediaPrivate.framework", + "path": "PrivateFrameworks/CoreMediaPrivate.framework", + "children": [ + { + "value": 108, + "name": "Versions", + "path": "PrivateFrameworks/CoreMediaPrivate.framework/Versions" + } + ] + }, + { + "value": 292, + "name": "CoreMediaStream.framework", + "path": "PrivateFrameworks/CoreMediaStream.framework", + "children": [ + { + "value": 284, + "name": "Versions", + "path": "PrivateFrameworks/CoreMediaStream.framework/Versions" + } + ] + }, + { + "value": 1436, + "name": "CorePDF.framework", + "path": "PrivateFrameworks/CorePDF.framework", + "children": [ + { + "value": 1428, + "name": "Versions", + "path": "PrivateFrameworks/CorePDF.framework/Versions" + } + ] + }, + { + "value": 1324, + "name": "CoreProfile.framework", + "path": "PrivateFrameworks/CoreProfile.framework", + "children": [ + { + "value": 1312, + "name": "Versions", + "path": "PrivateFrameworks/CoreProfile.framework/Versions" + } + ] + }, + { + "value": 1384, + "name": "CoreRAID.framework", + "path": "PrivateFrameworks/CoreRAID.framework", + "children": [ + { + "value": 1372, + "name": "Versions", + "path": "PrivateFrameworks/CoreRAID.framework/Versions" + } + ] + }, + { + "value": 128, + "name": "CoreRecents.framework", + "path": "PrivateFrameworks/CoreRecents.framework", + "children": [ + { + "value": 120, + "name": "Versions", + "path": "PrivateFrameworks/CoreRecents.framework/Versions" + } + ] + }, + { + "value": 832, + "name": "CoreRecognition.framework", + "path": "PrivateFrameworks/CoreRecognition.framework", + "children": [ + { + "value": 824, + "name": "Versions", + "path": "PrivateFrameworks/CoreRecognition.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "CoreSDB.framework", + "path": "PrivateFrameworks/CoreSDB.framework", + "children": [ + { + "value": 96, + "name": "Versions", + "path": "PrivateFrameworks/CoreSDB.framework/Versions" + } + ] + }, + { + "value": 280, + "name": "CoreServicesInternal.framework", + "path": "PrivateFrameworks/CoreServicesInternal.framework", + "children": [ + { + "value": 272, + "name": "Versions", + "path": "PrivateFrameworks/CoreServicesInternal.framework/Versions" + } + ] + }, + { + "value": 576, + "name": "CoreSymbolication.framework", + "path": "PrivateFrameworks/CoreSymbolication.framework", + "children": [ + { + "value": 536, + "name": "Versions", + "path": "PrivateFrameworks/CoreSymbolication.framework/Versions" + } + ] + }, + { + "value": 476, + "name": "CoreThemeDefinition.framework", + "path": "PrivateFrameworks/CoreThemeDefinition.framework", + "children": [ + { + "value": 468, + "name": "Versions", + "path": "PrivateFrameworks/CoreThemeDefinition.framework/Versions" + } + ] + }, + { + "value": 4976, + "name": "CoreUI.framework", + "path": "PrivateFrameworks/CoreUI.framework", + "children": [ + { + "value": 4968, + "name": "Versions", + "path": "PrivateFrameworks/CoreUI.framework/Versions" + } + ] + }, + { + "value": 576, + "name": "CoreUtils.framework", + "path": "PrivateFrameworks/CoreUtils.framework", + "children": [ + { + "value": 568, + "name": "Versions", + "path": "PrivateFrameworks/CoreUtils.framework/Versions" + } + ] + }, + { + "value": 3476, + "name": "CoreWLANKit.framework", + "path": "PrivateFrameworks/CoreWLANKit.framework", + "children": [ + { + "value": 3468, + "name": "Versions", + "path": "PrivateFrameworks/CoreWLANKit.framework/Versions" + } + ] + }, + { + "value": 92, + "name": "CrashReporterSupport.framework", + "path": "PrivateFrameworks/CrashReporterSupport.framework", + "children": [ + { + "value": 84, + "name": "Versions", + "path": "PrivateFrameworks/CrashReporterSupport.framework/Versions" + } + ] + }, + { + "value": 132, + "name": "DashboardClient.framework", + "path": "PrivateFrameworks/DashboardClient.framework", + "children": [ + { + "value": 124, + "name": "Versions", + "path": "PrivateFrameworks/DashboardClient.framework/Versions" + } + ] + }, + { + "value": 1716, + "name": "DataDetectors.framework", + "path": "PrivateFrameworks/DataDetectors.framework", + "children": [ + { + "value": 1708, + "name": "Versions", + "path": "PrivateFrameworks/DataDetectors.framework/Versions" + } + ] + }, + { + "value": 4952, + "name": "DataDetectorsCore.framework", + "path": "PrivateFrameworks/DataDetectorsCore.framework", + "children": [ + { + "value": 4940, + "name": "Versions", + "path": "PrivateFrameworks/DataDetectorsCore.framework/Versions" + } + ] + }, + { + "value": 500, + "name": "DCERPC.framework", + "path": "PrivateFrameworks/DCERPC.framework", + "children": [ + { + "value": 492, + "name": "Versions", + "path": "PrivateFrameworks/DCERPC.framework/Versions" + } + ] + }, + { + "value": 232, + "name": "DebugSymbols.framework", + "path": "PrivateFrameworks/DebugSymbols.framework", + "children": [ + { + "value": 224, + "name": "Versions", + "path": "PrivateFrameworks/DebugSymbols.framework/Versions" + } + ] + }, + { + "value": 1792, + "name": "DesktopServicesPriv.framework", + "path": "PrivateFrameworks/DesktopServicesPriv.framework", + "children": [ + { + "value": 1780, + "name": "Versions", + "path": "PrivateFrameworks/DesktopServicesPriv.framework/Versions" + } + ] + }, + { + "value": 128, + "name": "DeviceLink.framework", + "path": "PrivateFrameworks/DeviceLink.framework", + "children": [ + { + "value": 120, + "name": "Versions", + "path": "PrivateFrameworks/DeviceLink.framework/Versions" + } + ] + }, + { + "value": 464, + "name": "DeviceToDeviceKit.framework", + "path": "PrivateFrameworks/DeviceToDeviceKit.framework", + "children": [ + { + "value": 456, + "name": "Versions", + "path": "PrivateFrameworks/DeviceToDeviceKit.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "DeviceToDeviceManager.framework", + "path": "PrivateFrameworks/DeviceToDeviceManager.framework", + "children": [ + { + "value": 28, + "name": "PlugIns", + "path": "PrivateFrameworks/DeviceToDeviceManager.framework/PlugIns" + }, + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/DeviceToDeviceManager.framework/Versions" + } + ] + }, + { + "value": 28, + "name": "DiagnosticLogCollection.framework", + "path": "PrivateFrameworks/DiagnosticLogCollection.framework", + "children": [ + { + "value": 20, + "name": "Versions", + "path": "PrivateFrameworks/DiagnosticLogCollection.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "DigiHubPreference.framework", + "path": "PrivateFrameworks/DigiHubPreference.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/DigiHubPreference.framework/Versions" + } + ] + }, + { + "value": 1344, + "name": "DirectoryEditor.framework", + "path": "PrivateFrameworks/DirectoryEditor.framework", + "children": [ + { + "value": 1336, + "name": "Versions", + "path": "PrivateFrameworks/DirectoryEditor.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "DirectoryServer.framework", + "path": "PrivateFrameworks/DirectoryServer.framework", + "children": [ + { + "value": 52, + "name": "Frameworks", + "path": "PrivateFrameworks/DirectoryServer.framework/Frameworks" + }, + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/DirectoryServer.framework/Versions" + } + ] + }, + { + "value": 1596, + "name": "DiskImages.framework", + "path": "PrivateFrameworks/DiskImages.framework", + "children": [ + { + "value": 1588, + "name": "Versions", + "path": "PrivateFrameworks/DiskImages.framework/Versions" + } + ] + }, + { + "value": 1168, + "name": "DiskManagement.framework", + "path": "PrivateFrameworks/DiskManagement.framework", + "children": [ + { + "value": 1160, + "name": "Versions", + "path": "PrivateFrameworks/DiskManagement.framework/Versions" + } + ] + }, + { + "value": 80, + "name": "DisplayServices.framework", + "path": "PrivateFrameworks/DisplayServices.framework", + "children": [ + { + "value": 72, + "name": "Versions", + "path": "PrivateFrameworks/DisplayServices.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "DMNotification.framework", + "path": "PrivateFrameworks/DMNotification.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "PrivateFrameworks/DMNotification.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "DVD.framework", + "path": "PrivateFrameworks/DVD.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/DVD.framework/Versions" + } + ] + }, + { + "value": 272, + "name": "EAP8021X.framework", + "path": "PrivateFrameworks/EAP8021X.framework", + "children": [ + { + "value": 20, + "name": "Support", + "path": "PrivateFrameworks/EAP8021X.framework/Support" + }, + { + "value": 244, + "name": "Versions", + "path": "PrivateFrameworks/EAP8021X.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "EasyConfig.framework", + "path": "PrivateFrameworks/EasyConfig.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/EasyConfig.framework/Versions" + } + ] + }, + { + "value": 872, + "name": "EFILogin.framework", + "path": "PrivateFrameworks/EFILogin.framework", + "children": [ + { + "value": 864, + "name": "Versions", + "path": "PrivateFrameworks/EFILogin.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "EmailAddressing.framework", + "path": "PrivateFrameworks/EmailAddressing.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "PrivateFrameworks/EmailAddressing.framework/Versions" + } + ] + }, + { + "value": 444, + "name": "ExchangeWebServices.framework", + "path": "PrivateFrameworks/ExchangeWebServices.framework", + "children": [ + { + "value": 436, + "name": "Versions", + "path": "PrivateFrameworks/ExchangeWebServices.framework/Versions" + } + ] + }, + { + "value": 23556, + "name": "FaceCore.framework", + "path": "PrivateFrameworks/FaceCore.framework", + "children": [ + { + "value": 23548, + "name": "Versions", + "path": "PrivateFrameworks/FaceCore.framework/Versions" + } + ] + }, + { + "value": 12, + "name": "FaceCoreLight.framework", + "path": "PrivateFrameworks/FaceCoreLight.framework", + "children": [ + { + "value": 8, + "name": "Versions", + "path": "PrivateFrameworks/FaceCoreLight.framework/Versions" + } + ] + }, + { + "value": 2836, + "name": "FamilyControls.framework", + "path": "PrivateFrameworks/FamilyControls.framework", + "children": [ + { + "value": 2828, + "name": "Versions", + "path": "PrivateFrameworks/FamilyControls.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "FileSync.framework", + "path": "PrivateFrameworks/FileSync.framework", + "children": [ + { + "value": 96, + "name": "Versions", + "path": "PrivateFrameworks/FileSync.framework/Versions" + } + ] + }, + { + "value": 12048, + "name": "FinderKit.framework", + "path": "PrivateFrameworks/FinderKit.framework", + "children": [ + { + "value": 12040, + "name": "Versions", + "path": "PrivateFrameworks/FinderKit.framework/Versions" + } + ] + }, + { + "value": 1068, + "name": "FindMyMac.framework", + "path": "PrivateFrameworks/FindMyMac.framework", + "children": [ + { + "value": 1044, + "name": "Versions", + "path": "PrivateFrameworks/FindMyMac.framework/Versions" + }, + { + "value": 16, + "name": "XPCServices", + "path": "PrivateFrameworks/FindMyMac.framework/XPCServices" + } + ] + }, + { + "value": 32, + "name": "FTClientServices.framework", + "path": "PrivateFrameworks/FTClientServices.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "PrivateFrameworks/FTClientServices.framework/Versions" + } + ] + }, + { + "value": 156, + "name": "FTServices.framework", + "path": "PrivateFrameworks/FTServices.framework", + "children": [ + { + "value": 148, + "name": "Versions", + "path": "PrivateFrameworks/FTServices.framework/Versions" + } + ] + }, + { + "value": 216, + "name": "FWAVC.framework", + "path": "PrivateFrameworks/FWAVC.framework", + "children": [ + { + "value": 208, + "name": "Versions", + "path": "PrivateFrameworks/FWAVC.framework/Versions" + } + ] + }, + { + "value": 116, + "name": "FWAVCPrivate.framework", + "path": "PrivateFrameworks/FWAVCPrivate.framework", + "children": [ + { + "value": 108, + "name": "Versions", + "path": "PrivateFrameworks/FWAVCPrivate.framework/Versions" + } + ] + }, + { + "value": 624, + "name": "GameKitServices.framework", + "path": "PrivateFrameworks/GameKitServices.framework", + "children": [ + { + "value": 616, + "name": "Versions", + "path": "PrivateFrameworks/GameKitServices.framework/Versions" + } + ] + }, + { + "value": 312, + "name": "GenerationalStorage.framework", + "path": "PrivateFrameworks/GenerationalStorage.framework", + "children": [ + { + "value": 300, + "name": "Versions", + "path": "PrivateFrameworks/GenerationalStorage.framework/Versions" + } + ] + }, + { + "value": 14920, + "name": "GeoKit.framework", + "path": "PrivateFrameworks/GeoKit.framework", + "children": [ + { + "value": 14912, + "name": "Versions", + "path": "PrivateFrameworks/GeoKit.framework/Versions" + } + ] + }, + { + "value": 27272, + "name": "GeoServices.framework", + "path": "PrivateFrameworks/GeoServices.framework", + "children": [ + { + "value": 2104, + "name": "Versions", + "path": "PrivateFrameworks/GeoServices.framework/Versions" + } + ] + }, + { + "value": 152, + "name": "GPUSupport.framework", + "path": "PrivateFrameworks/GPUSupport.framework", + "children": [ + { + "value": 144, + "name": "Versions", + "path": "PrivateFrameworks/GPUSupport.framework/Versions" + } + ] + }, + { + "value": 28, + "name": "GraphicsAppSupport.framework", + "path": "PrivateFrameworks/GraphicsAppSupport.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/GraphicsAppSupport.framework/Versions" + } + ] + }, + { + "value": 336, + "name": "GraphKit.framework", + "path": "PrivateFrameworks/GraphKit.framework", + "children": [ + { + "value": 328, + "name": "Versions", + "path": "PrivateFrameworks/GraphKit.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "HDAInterface.framework", + "path": "PrivateFrameworks/HDAInterface.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/HDAInterface.framework/Versions" + } + ] + }, + { + "value": 1044, + "name": "Heimdal.framework", + "path": "PrivateFrameworks/Heimdal.framework", + "children": [ + { + "value": 508, + "name": "Helpers", + "path": "PrivateFrameworks/Heimdal.framework/Helpers" + }, + { + "value": 528, + "name": "Versions", + "path": "PrivateFrameworks/Heimdal.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "HeimODAdmin.framework", + "path": "PrivateFrameworks/HeimODAdmin.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/HeimODAdmin.framework/Versions" + } + ] + }, + { + "value": 232, + "name": "HelpData.framework", + "path": "PrivateFrameworks/HelpData.framework", + "children": [ + { + "value": 224, + "name": "Versions", + "path": "PrivateFrameworks/HelpData.framework/Versions" + } + ] + }, + { + "value": 104, + "name": "IASUtilities.framework", + "path": "PrivateFrameworks/IASUtilities.framework", + "children": [ + { + "value": 92, + "name": "Versions", + "path": "PrivateFrameworks/IASUtilities.framework/Versions" + } + ] + }, + { + "value": 224, + "name": "iCalendar.framework", + "path": "PrivateFrameworks/iCalendar.framework", + "children": [ + { + "value": 216, + "name": "Versions", + "path": "PrivateFrameworks/iCalendar.framework/Versions" + } + ] + }, + { + "value": 116, + "name": "ICANotifications.framework", + "path": "PrivateFrameworks/ICANotifications.framework", + "children": [ + { + "value": 108, + "name": "Versions", + "path": "PrivateFrameworks/ICANotifications.framework/Versions" + } + ] + }, + { + "value": 308, + "name": "IconServices.framework", + "path": "PrivateFrameworks/IconServices.framework", + "children": [ + { + "value": 296, + "name": "Versions", + "path": "PrivateFrameworks/IconServices.framework/Versions" + } + ] + }, + { + "value": 256, + "name": "IDS.framework", + "path": "PrivateFrameworks/IDS.framework", + "children": [ + { + "value": 248, + "name": "Versions", + "path": "PrivateFrameworks/IDS.framework/Versions" + } + ] + }, + { + "value": 4572, + "name": "IDSCore.framework", + "path": "PrivateFrameworks/IDSCore.framework", + "children": [ + { + "value": 1300, + "name": "identityservicesd.app", + "path": "PrivateFrameworks/IDSCore.framework/identityservicesd.app" + }, + { + "value": 3264, + "name": "Versions", + "path": "PrivateFrameworks/IDSCore.framework/Versions" + } + ] + }, + { + "value": 116, + "name": "IDSFoundation.framework", + "path": "PrivateFrameworks/IDSFoundation.framework", + "children": [ + { + "value": 108, + "name": "Versions", + "path": "PrivateFrameworks/IDSFoundation.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "IDSSystemPreferencesSignIn.framework", + "path": "PrivateFrameworks/IDSSystemPreferencesSignIn.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/IDSSystemPreferencesSignIn.framework/Versions" + } + ] + }, + { + "value": 16772, + "name": "iLifeMediaBrowser.framework", + "path": "PrivateFrameworks/iLifeMediaBrowser.framework", + "children": [ + { + "value": 16764, + "name": "Versions", + "path": "PrivateFrameworks/iLifeMediaBrowser.framework/Versions" + } + ] + }, + { + "value": 252, + "name": "IMAP.framework", + "path": "PrivateFrameworks/IMAP.framework", + "children": [ + { + "value": 244, + "name": "Versions", + "path": "PrivateFrameworks/IMAP.framework/Versions" + } + ] + }, + { + "value": 396, + "name": "IMAVCore.framework", + "path": "PrivateFrameworks/IMAVCore.framework", + "children": [ + { + "value": 388, + "name": "Versions", + "path": "PrivateFrameworks/IMAVCore.framework/Versions" + } + ] + }, + { + "value": 856, + "name": "IMCore.framework", + "path": "PrivateFrameworks/IMCore.framework", + "children": [ + { + "value": 148, + "name": "imagent.app", + "path": "PrivateFrameworks/IMCore.framework/imagent.app" + }, + { + "value": 700, + "name": "Versions", + "path": "PrivateFrameworks/IMCore.framework/Versions" + } + ] + }, + { + "value": 364, + "name": "IMDaemonCore.framework", + "path": "PrivateFrameworks/IMDaemonCore.framework", + "children": [ + { + "value": 356, + "name": "Versions", + "path": "PrivateFrameworks/IMDaemonCore.framework/Versions" + } + ] + }, + { + "value": 68, + "name": "IMDMessageServices.framework", + "path": "PrivateFrameworks/IMDMessageServices.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/IMDMessageServices.framework/Versions" + }, + { + "value": 44, + "name": "XPCServices", + "path": "PrivateFrameworks/IMDMessageServices.framework/XPCServices" + } + ] + }, + { + "value": 316, + "name": "IMDPersistence.framework", + "path": "PrivateFrameworks/IMDPersistence.framework", + "children": [ + { + "value": 240, + "name": "Versions", + "path": "PrivateFrameworks/IMDPersistence.framework/Versions" + }, + { + "value": 68, + "name": "XPCServices", + "path": "PrivateFrameworks/IMDPersistence.framework/XPCServices" + } + ] + }, + { + "value": 596, + "name": "IMFoundation.framework", + "path": "PrivateFrameworks/IMFoundation.framework", + "children": [ + { + "value": 484, + "name": "Versions", + "path": "PrivateFrameworks/IMFoundation.framework/Versions" + }, + { + "value": 24, + "name": "XPCServices", + "path": "PrivateFrameworks/IMFoundation.framework/XPCServices" + } + ] + }, + { + "value": 88, + "name": "IMTranscoding.framework", + "path": "PrivateFrameworks/IMTranscoding.framework", + "children": [ + { + "value": 20, + "name": "Versions", + "path": "PrivateFrameworks/IMTranscoding.framework/Versions" + }, + { + "value": 60, + "name": "XPCServices", + "path": "PrivateFrameworks/IMTranscoding.framework/XPCServices" + } + ] + }, + { + "value": 92, + "name": "IMTransferServices.framework", + "path": "PrivateFrameworks/IMTransferServices.framework", + "children": [ + { + "value": 28, + "name": "Versions", + "path": "PrivateFrameworks/IMTransferServices.framework/Versions" + }, + { + "value": 56, + "name": "XPCServices", + "path": "PrivateFrameworks/IMTransferServices.framework/XPCServices" + } + ] + }, + { + "value": 48, + "name": "IncomingCallFilter.framework", + "path": "PrivateFrameworks/IncomingCallFilter.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/IncomingCallFilter.framework/Versions" + } + ] + }, + { + "value": 1668, + "name": "Install.framework", + "path": "PrivateFrameworks/Install.framework", + "children": [ + { + "value": 644, + "name": "Frameworks", + "path": "PrivateFrameworks/Install.framework/Frameworks" + }, + { + "value": 1016, + "name": "Versions", + "path": "PrivateFrameworks/Install.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "International.framework", + "path": "PrivateFrameworks/International.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/International.framework/Versions" + } + ] + }, + { + "value": 2052, + "name": "InternetAccounts.framework", + "path": "PrivateFrameworks/InternetAccounts.framework", + "children": [ + { + "value": 2040, + "name": "Versions", + "path": "PrivateFrameworks/InternetAccounts.framework/Versions" + } + ] + }, + { + "value": 216, + "name": "IntlPreferences.framework", + "path": "PrivateFrameworks/IntlPreferences.framework", + "children": [ + { + "value": 208, + "name": "Versions", + "path": "PrivateFrameworks/IntlPreferences.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "IOAccelerator.framework", + "path": "PrivateFrameworks/IOAccelerator.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/IOAccelerator.framework/Versions" + } + ] + }, + { + "value": 68, + "name": "IOAccelMemoryInfo.framework", + "path": "PrivateFrameworks/IOAccelMemoryInfo.framework", + "children": [ + { + "value": 60, + "name": "Versions", + "path": "PrivateFrameworks/IOAccelMemoryInfo.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "IOPlatformPluginFamily.framework", + "path": "PrivateFrameworks/IOPlatformPluginFamily.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "PrivateFrameworks/IOPlatformPluginFamily.framework/Versions" + } + ] + }, + { + "value": 44, + "name": "iPod.framework", + "path": "PrivateFrameworks/iPod.framework", + "children": [ + { + "value": 36, + "name": "Versions", + "path": "PrivateFrameworks/iPod.framework/Versions" + } + ] + }, + { + "value": 160, + "name": "iPodSync.framework", + "path": "PrivateFrameworks/iPodSync.framework", + "children": [ + { + "value": 152, + "name": "Versions", + "path": "PrivateFrameworks/iPodSync.framework/Versions" + } + ] + }, + { + "value": 516, + "name": "ISSupport.framework", + "path": "PrivateFrameworks/ISSupport.framework", + "children": [ + { + "value": 508, + "name": "Versions", + "path": "PrivateFrameworks/ISSupport.framework/Versions" + } + ] + }, + { + "value": 644, + "name": "iTunesAccess.framework", + "path": "PrivateFrameworks/iTunesAccess.framework", + "children": [ + { + "value": 636, + "name": "Versions", + "path": "PrivateFrameworks/iTunesAccess.framework/Versions" + } + ] + }, + { + "value": 92, + "name": "JavaApplicationLauncher.framework", + "path": "PrivateFrameworks/JavaApplicationLauncher.framework", + "children": [ + { + "value": 84, + "name": "Versions", + "path": "PrivateFrameworks/JavaApplicationLauncher.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "JavaLaunching.framework", + "path": "PrivateFrameworks/JavaLaunching.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/JavaLaunching.framework/Versions" + } + ] + }, + { + "value": 8, + "name": "KerberosHelper", + "path": "PrivateFrameworks/KerberosHelper", + "children": [ + { + "value": 8, + "name": "Helpers", + "path": "PrivateFrameworks/KerberosHelper/Helpers" + } + ] + }, + { + "value": 132, + "name": "KerberosHelper.framework", + "path": "PrivateFrameworks/KerberosHelper.framework", + "children": [ + { + "value": 40, + "name": "Helpers", + "path": "PrivateFrameworks/KerberosHelper.framework/Helpers" + }, + { + "value": 84, + "name": "Versions", + "path": "PrivateFrameworks/KerberosHelper.framework/Versions" + } + ] + }, + { + "value": 44, + "name": "kperf.framework", + "path": "PrivateFrameworks/kperf.framework", + "children": [ + { + "value": 36, + "name": "Versions", + "path": "PrivateFrameworks/kperf.framework/Versions" + } + ] + }, + { + "value": 100, + "name": "Librarian.framework", + "path": "PrivateFrameworks/Librarian.framework", + "children": [ + { + "value": 92, + "name": "Versions", + "path": "PrivateFrameworks/Librarian.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "LibraryRepair.framework", + "path": "PrivateFrameworks/LibraryRepair.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/LibraryRepair.framework/Versions" + } + ] + }, + { + "value": 144, + "name": "login.framework", + "path": "PrivateFrameworks/login.framework", + "children": [ + { + "value": 132, + "name": "Versions", + "path": "PrivateFrameworks/login.framework/Versions" + } + ] + }, + { + "value": 4060, + "name": "LoginUIKit.framework", + "path": "PrivateFrameworks/LoginUIKit.framework", + "children": [ + { + "value": 4048, + "name": "Versions", + "path": "PrivateFrameworks/LoginUIKit.framework/Versions" + } + ] + }, + { + "value": 576, + "name": "Lookup.framework", + "path": "PrivateFrameworks/Lookup.framework", + "children": [ + { + "value": 568, + "name": "Versions", + "path": "PrivateFrameworks/Lookup.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "MachineSettings.framework", + "path": "PrivateFrameworks/MachineSettings.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "PrivateFrameworks/MachineSettings.framework/Versions" + } + ] + }, + { + "value": 2812, + "name": "Mail.framework", + "path": "PrivateFrameworks/Mail.framework", + "children": [ + { + "value": 2800, + "name": "Versions", + "path": "PrivateFrameworks/Mail.framework/Versions" + } + ] + }, + { + "value": 1856, + "name": "MailCore.framework", + "path": "PrivateFrameworks/MailCore.framework", + "children": [ + { + "value": 1848, + "name": "Versions", + "path": "PrivateFrameworks/MailCore.framework/Versions" + } + ] + }, + { + "value": 68, + "name": "MailService.framework", + "path": "PrivateFrameworks/MailService.framework", + "children": [ + { + "value": 56, + "name": "Versions", + "path": "PrivateFrameworks/MailService.framework/Versions" + } + ] + }, + { + "value": 292, + "name": "MailUI.framework", + "path": "PrivateFrameworks/MailUI.framework", + "children": [ + { + "value": 280, + "name": "Versions", + "path": "PrivateFrameworks/MailUI.framework/Versions" + } + ] + }, + { + "value": 80, + "name": "ManagedClient.framework", + "path": "PrivateFrameworks/ManagedClient.framework", + "children": [ + { + "value": 72, + "name": "Versions", + "path": "PrivateFrameworks/ManagedClient.framework/Versions" + } + ] + }, + { + "value": 44, + "name": "Mangrove.framework", + "path": "PrivateFrameworks/Mangrove.framework", + "children": [ + { + "value": 32, + "name": "Versions", + "path": "PrivateFrameworks/Mangrove.framework/Versions" + } + ] + }, + { + "value": 28, + "name": "Marco.framework", + "path": "PrivateFrameworks/Marco.framework", + "children": [ + { + "value": 20, + "name": "Versions", + "path": "PrivateFrameworks/Marco.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "MDSChannel.framework", + "path": "PrivateFrameworks/MDSChannel.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/MDSChannel.framework/Versions" + } + ] + }, + { + "value": 1488, + "name": "MediaControlSender.framework", + "path": "PrivateFrameworks/MediaControlSender.framework", + "children": [ + { + "value": 1480, + "name": "Versions", + "path": "PrivateFrameworks/MediaControlSender.framework/Versions" + } + ] + }, + { + "value": 480, + "name": "MediaKit.framework", + "path": "PrivateFrameworks/MediaKit.framework", + "children": [ + { + "value": 468, + "name": "Versions", + "path": "PrivateFrameworks/MediaKit.framework/Versions" + } + ] + }, + { + "value": 288, + "name": "MediaUI.framework", + "path": "PrivateFrameworks/MediaUI.framework", + "children": [ + { + "value": 280, + "name": "Versions", + "path": "PrivateFrameworks/MediaUI.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "MessageProtection.framework", + "path": "PrivateFrameworks/MessageProtection.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/MessageProtection.framework/Versions" + } + ] + }, + { + "value": 680, + "name": "MessagesHelperKit.framework", + "path": "PrivateFrameworks/MessagesHelperKit.framework", + "children": [ + { + "value": 640, + "name": "PlugIns", + "path": "PrivateFrameworks/MessagesHelperKit.framework/PlugIns" + }, + { + "value": 32, + "name": "Versions", + "path": "PrivateFrameworks/MessagesHelperKit.framework/Versions" + } + ] + }, + { + "value": 160, + "name": "MessagesKit.framework", + "path": "PrivateFrameworks/MessagesKit.framework", + "children": [ + { + "value": 112, + "name": "Versions", + "path": "PrivateFrameworks/MessagesKit.framework/Versions" + }, + { + "value": 40, + "name": "XPCServices", + "path": "PrivateFrameworks/MessagesKit.framework/XPCServices" + } + ] + }, + { + "value": 372, + "name": "MMCS.framework", + "path": "PrivateFrameworks/MMCS.framework", + "children": [ + { + "value": 364, + "name": "Versions", + "path": "PrivateFrameworks/MMCS.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "MMCSServices.framework", + "path": "PrivateFrameworks/MMCSServices.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/MMCSServices.framework/Versions" + } + ] + }, + { + "value": 1932, + "name": "MobileDevice.framework", + "path": "PrivateFrameworks/MobileDevice.framework", + "children": [ + { + "value": 1924, + "name": "Versions", + "path": "PrivateFrameworks/MobileDevice.framework/Versions" + } + ] + }, + { + "value": 80, + "name": "MonitorPanel.framework", + "path": "PrivateFrameworks/MonitorPanel.framework", + "children": [ + { + "value": 72, + "name": "Versions", + "path": "PrivateFrameworks/MonitorPanel.framework/Versions" + } + ] + }, + { + "value": 132, + "name": "MultitouchSupport.framework", + "path": "PrivateFrameworks/MultitouchSupport.framework", + "children": [ + { + "value": 124, + "name": "Versions", + "path": "PrivateFrameworks/MultitouchSupport.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "NetAuth.framework", + "path": "PrivateFrameworks/NetAuth.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "PrivateFrameworks/NetAuth.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "NetFSServer.framework", + "path": "PrivateFrameworks/NetFSServer.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/NetFSServer.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "NetworkDiagnosticsUI.framework", + "path": "PrivateFrameworks/NetworkDiagnosticsUI.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/NetworkDiagnosticsUI.framework/Versions" + } + ] + }, + { + "value": 84, + "name": "NetworkMenusCommon.framework", + "path": "PrivateFrameworks/NetworkMenusCommon.framework", + "children": [ + { + "value": 0, + "name": "_CodeSignature", + "path": "PrivateFrameworks/NetworkMenusCommon.framework/_CodeSignature" + } + ] + }, + { + "value": 32, + "name": "NetworkStatistics.framework", + "path": "PrivateFrameworks/NetworkStatistics.framework", + "children": [ + { + "value": 24, + "name": "Versions", + "path": "PrivateFrameworks/NetworkStatistics.framework/Versions" + } + ] + }, + { + "value": 416, + "name": "Notes.framework", + "path": "PrivateFrameworks/Notes.framework", + "children": [ + { + "value": 400, + "name": "Versions", + "path": "PrivateFrameworks/Notes.framework/Versions" + } + ] + }, + { + "value": 84, + "name": "nt.framework", + "path": "PrivateFrameworks/nt.framework", + "children": [ + { + "value": 76, + "name": "Versions", + "path": "PrivateFrameworks/nt.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "OAuth.framework", + "path": "PrivateFrameworks/OAuth.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/OAuth.framework/Versions" + } + ] + }, + { + "value": 6676, + "name": "OfficeImport.framework", + "path": "PrivateFrameworks/OfficeImport.framework", + "children": [ + { + "value": 6668, + "name": "Versions", + "path": "PrivateFrameworks/OfficeImport.framework/Versions" + } + ] + }, + { + "value": 160, + "name": "oncrpc.framework", + "path": "PrivateFrameworks/oncrpc.framework", + "children": [ + { + "value": 36, + "name": "bin", + "path": "PrivateFrameworks/oncrpc.framework/bin" + }, + { + "value": 116, + "name": "Versions", + "path": "PrivateFrameworks/oncrpc.framework/Versions" + } + ] + }, + { + "value": 140, + "name": "OpenDirectoryConfig.framework", + "path": "PrivateFrameworks/OpenDirectoryConfig.framework", + "children": [ + { + "value": 132, + "name": "Versions", + "path": "PrivateFrameworks/OpenDirectoryConfig.framework/Versions" + } + ] + }, + { + "value": 1292, + "name": "OpenDirectoryConfigUI.framework", + "path": "PrivateFrameworks/OpenDirectoryConfigUI.framework", + "children": [ + { + "value": 1284, + "name": "Versions", + "path": "PrivateFrameworks/OpenDirectoryConfigUI.framework/Versions" + } + ] + }, + { + "value": 1140, + "name": "PackageKit.framework", + "path": "PrivateFrameworks/PackageKit.framework", + "children": [ + { + "value": 272, + "name": "Frameworks", + "path": "PrivateFrameworks/PackageKit.framework/Frameworks" + }, + { + "value": 860, + "name": "Versions", + "path": "PrivateFrameworks/PackageKit.framework/Versions" + } + ] + }, + { + "value": 64, + "name": "PacketFilter.framework", + "path": "PrivateFrameworks/PacketFilter.framework", + "children": [ + { + "value": 56, + "name": "Versions", + "path": "PrivateFrameworks/PacketFilter.framework/Versions" + } + ] + }, + { + "value": 3312, + "name": "PassKit.framework", + "path": "PrivateFrameworks/PassKit.framework", + "children": [ + { + "value": 3300, + "name": "Versions", + "path": "PrivateFrameworks/PassKit.framework/Versions" + } + ] + }, + { + "value": 216, + "name": "PasswordServer.framework", + "path": "PrivateFrameworks/PasswordServer.framework", + "children": [ + { + "value": 208, + "name": "Versions", + "path": "PrivateFrameworks/PasswordServer.framework/Versions" + } + ] + }, + { + "value": 400, + "name": "PerformanceAnalysis.framework", + "path": "PrivateFrameworks/PerformanceAnalysis.framework", + "children": [ + { + "value": 360, + "name": "Versions", + "path": "PrivateFrameworks/PerformanceAnalysis.framework/Versions" + }, + { + "value": 32, + "name": "XPCServices", + "path": "PrivateFrameworks/PerformanceAnalysis.framework/XPCServices" + } + ] + }, + { + "value": 80, + "name": "PhoneNumbers.framework", + "path": "PrivateFrameworks/PhoneNumbers.framework", + "children": [ + { + "value": 72, + "name": "Versions", + "path": "PrivateFrameworks/PhoneNumbers.framework/Versions" + } + ] + }, + { + "value": 152, + "name": "PhysicsKit.framework", + "path": "PrivateFrameworks/PhysicsKit.framework", + "children": [ + { + "value": 144, + "name": "Versions", + "path": "PrivateFrameworks/PhysicsKit.framework/Versions" + } + ] + }, + { + "value": 112, + "name": "PlatformHardwareManagement.framework", + "path": "PrivateFrameworks/PlatformHardwareManagement.framework", + "children": [ + { + "value": 104, + "name": "Versions", + "path": "PrivateFrameworks/PlatformHardwareManagement.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "PodcastProducerCore.framework", + "path": "PrivateFrameworks/PodcastProducerCore.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "PrivateFrameworks/PodcastProducerCore.framework/Versions" + } + ] + }, + { + "value": 612, + "name": "PodcastProducerKit.framework", + "path": "PrivateFrameworks/PodcastProducerKit.framework", + "children": [ + { + "value": 604, + "name": "Versions", + "path": "PrivateFrameworks/PodcastProducerKit.framework/Versions" + } + ] + }, + { + "value": 956, + "name": "PreferencePanesSupport.framework", + "path": "PrivateFrameworks/PreferencePanesSupport.framework", + "children": [ + { + "value": 948, + "name": "Versions", + "path": "PrivateFrameworks/PreferencePanesSupport.framework/Versions" + } + ] + }, + { + "value": 9580, + "name": "PrintingPrivate.framework", + "path": "PrivateFrameworks/PrintingPrivate.framework", + "children": [ + { + "value": 9572, + "name": "Versions", + "path": "PrivateFrameworks/PrintingPrivate.framework/Versions" + } + ] + }, + { + "value": 104432, + "name": "ProKit.framework", + "path": "PrivateFrameworks/ProKit.framework", + "children": [ + { + "value": 104424, + "name": "Versions", + "path": "PrivateFrameworks/ProKit.framework/Versions" + } + ] + }, + { + "value": 9784, + "name": "ProofReader.framework", + "path": "PrivateFrameworks/ProofReader.framework", + "children": [ + { + "value": 9776, + "name": "Versions", + "path": "PrivateFrameworks/ProofReader.framework/Versions" + } + ] + }, + { + "value": 76, + "name": "ProtocolBuffer.framework", + "path": "PrivateFrameworks/ProtocolBuffer.framework", + "children": [ + { + "value": 68, + "name": "Versions", + "path": "PrivateFrameworks/ProtocolBuffer.framework/Versions" + } + ] + }, + { + "value": 7628, + "name": "PSNormalizer.framework", + "path": "PrivateFrameworks/PSNormalizer.framework", + "children": [ + { + "value": 7616, + "name": "Versions", + "path": "PrivateFrameworks/PSNormalizer.framework/Versions" + } + ] + }, + { + "value": 96, + "name": "RemotePacketCapture.framework", + "path": "PrivateFrameworks/RemotePacketCapture.framework", + "children": [ + { + "value": 88, + "name": "Versions", + "path": "PrivateFrameworks/RemotePacketCapture.framework/Versions" + } + ] + }, + { + "value": 388, + "name": "RemoteViewServices.framework", + "path": "PrivateFrameworks/RemoteViewServices.framework", + "children": [ + { + "value": 304, + "name": "Versions", + "path": "PrivateFrameworks/RemoteViewServices.framework/Versions" + }, + { + "value": 76, + "name": "XPCServices", + "path": "PrivateFrameworks/RemoteViewServices.framework/XPCServices" + } + ] + }, + { + "value": 420, + "name": "Restore.framework", + "path": "PrivateFrameworks/Restore.framework", + "children": [ + { + "value": 412, + "name": "Versions", + "path": "PrivateFrameworks/Restore.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "RTCReporting.framework", + "path": "PrivateFrameworks/RTCReporting.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/RTCReporting.framework/Versions" + } + ] + }, + { + "value": 6168, + "name": "Safari.framework", + "path": "PrivateFrameworks/Safari.framework", + "children": [ + { + "value": 6156, + "name": "Versions", + "path": "PrivateFrameworks/Safari.framework/Versions" + } + ] + }, + { + "value": 40, + "name": "SafariServices.framework", + "path": "PrivateFrameworks/SafariServices.framework", + "children": [ + { + "value": 28, + "name": "Versions", + "path": "PrivateFrameworks/SafariServices.framework/Versions" + } + ] + }, + { + "value": 432, + "name": "SAObjects.framework", + "path": "PrivateFrameworks/SAObjects.framework", + "children": [ + { + "value": 424, + "name": "Versions", + "path": "PrivateFrameworks/SAObjects.framework/Versions" + } + ] + }, + { + "value": 84, + "name": "SCEP.framework", + "path": "PrivateFrameworks/SCEP.framework", + "children": [ + { + "value": 76, + "name": "Versions", + "path": "PrivateFrameworks/SCEP.framework/Versions" + } + ] + }, + { + "value": 24256, + "name": "ScreenReader.framework", + "path": "PrivateFrameworks/ScreenReader.framework", + "children": [ + { + "value": 24244, + "name": "Versions", + "path": "PrivateFrameworks/ScreenReader.framework/Versions" + } + ] + }, + { + "value": 528, + "name": "ScreenSharing.framework", + "path": "PrivateFrameworks/ScreenSharing.framework", + "children": [ + { + "value": 520, + "name": "Versions", + "path": "PrivateFrameworks/ScreenSharing.framework/Versions" + } + ] + }, + { + "value": 36, + "name": "SecCodeWrapper.framework", + "path": "PrivateFrameworks/SecCodeWrapper.framework", + "children": [ + { + "value": 28, + "name": "Versions", + "path": "PrivateFrameworks/SecCodeWrapper.framework/Versions" + } + ] + }, + { + "value": 36, + "name": "SecureNetworking.framework", + "path": "PrivateFrameworks/SecureNetworking.framework", + "children": [ + { + "value": 28, + "name": "Versions", + "path": "PrivateFrameworks/SecureNetworking.framework/Versions" + } + ] + }, + { + "value": 60, + "name": "SecurityTokend.framework", + "path": "PrivateFrameworks/SecurityTokend.framework", + "children": [ + { + "value": 52, + "name": "Versions", + "path": "PrivateFrameworks/SecurityTokend.framework/Versions" + } + ] + }, + { + "value": 280, + "name": "SemanticDocumentManagement.framework", + "path": "PrivateFrameworks/SemanticDocumentManagement.framework", + "children": [ + { + "value": 272, + "name": "Versions", + "path": "PrivateFrameworks/SemanticDocumentManagement.framework/Versions" + } + ] + }, + { + "value": 720, + "name": "ServerFoundation.framework", + "path": "PrivateFrameworks/ServerFoundation.framework", + "children": [ + { + "value": 712, + "name": "Versions", + "path": "PrivateFrameworks/ServerFoundation.framework/Versions" + } + ] + }, + { + "value": 320, + "name": "ServerInformation.framework", + "path": "PrivateFrameworks/ServerInformation.framework", + "children": [ + { + "value": 312, + "name": "Versions", + "path": "PrivateFrameworks/ServerInformation.framework/Versions" + } + ] + }, + { + "value": 176, + "name": "SetupAssistantSupport.framework", + "path": "PrivateFrameworks/SetupAssistantSupport.framework", + "children": [ + { + "value": 168, + "name": "Versions", + "path": "PrivateFrameworks/SetupAssistantSupport.framework/Versions" + } + ] + }, + { + "value": 5512, + "name": "ShareKit.framework", + "path": "PrivateFrameworks/ShareKit.framework", + "children": [ + { + "value": 5496, + "name": "Versions", + "path": "PrivateFrameworks/ShareKit.framework/Versions" + } + ] + }, + { + "value": 100, + "name": "Sharing.framework", + "path": "PrivateFrameworks/Sharing.framework", + "children": [ + { + "value": 92, + "name": "Versions", + "path": "PrivateFrameworks/Sharing.framework/Versions" + } + ] + }, + { + "value": 616, + "name": "Shortcut.framework", + "path": "PrivateFrameworks/Shortcut.framework", + "children": [ + { + "value": 608, + "name": "Versions", + "path": "PrivateFrameworks/Shortcut.framework/Versions" + } + ] + }, + { + "value": 20, + "name": "SleepServices.framework", + "path": "PrivateFrameworks/SleepServices.framework", + "children": [ + { + "value": 12, + "name": "Versions", + "path": "PrivateFrameworks/SleepServices.framework/Versions" + } + ] + }, + { + "value": 62320, + "name": "Slideshows.framework", + "path": "PrivateFrameworks/Slideshows.framework", + "children": [ + { + "value": 62312, + "name": "Versions", + "path": "PrivateFrameworks/Slideshows.framework/Versions" + } + ] + }, + { + "value": 144, + "name": "SMBClient.framework", + "path": "PrivateFrameworks/SMBClient.framework", + "children": [ + { + "value": 136, + "name": "Versions", + "path": "PrivateFrameworks/SMBClient.framework/Versions" + } + ] + }, + { + "value": 112, + "name": "SocialAppsCore.framework", + "path": "PrivateFrameworks/SocialAppsCore.framework", + "children": [ + { + "value": 104, + "name": "Versions", + "path": "PrivateFrameworks/SocialAppsCore.framework/Versions" + } + ] + }, + { + "value": 936, + "name": "SocialUI.framework", + "path": "PrivateFrameworks/SocialUI.framework", + "children": [ + { + "value": 924, + "name": "Versions", + "path": "PrivateFrameworks/SocialUI.framework/Versions" + } + ] + }, + { + "value": 444, + "name": "SoftwareUpdate.framework", + "path": "PrivateFrameworks/SoftwareUpdate.framework", + "children": [ + { + "value": 436, + "name": "Versions", + "path": "PrivateFrameworks/SoftwareUpdate.framework/Versions" + } + ] + }, + { + "value": 2112, + "name": "SpeechDictionary.framework", + "path": "PrivateFrameworks/SpeechDictionary.framework", + "children": [ + { + "value": 2104, + "name": "Versions", + "path": "PrivateFrameworks/SpeechDictionary.framework/Versions" + } + ] + }, + { + "value": 8492, + "name": "SpeechObjects.framework", + "path": "PrivateFrameworks/SpeechObjects.framework", + "children": [ + { + "value": 8484, + "name": "Versions", + "path": "PrivateFrameworks/SpeechObjects.framework/Versions" + } + ] + }, + { + "value": 4248, + "name": "SpeechRecognitionCore.framework", + "path": "PrivateFrameworks/SpeechRecognitionCore.framework", + "children": [ + { + "value": 4236, + "name": "Versions", + "path": "PrivateFrameworks/SpeechRecognitionCore.framework/Versions" + } + ] + }, + { + "value": 2212, + "name": "SpotlightIndex.framework", + "path": "PrivateFrameworks/SpotlightIndex.framework", + "children": [ + { + "value": 2204, + "name": "Versions", + "path": "PrivateFrameworks/SpotlightIndex.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "SPSupport.framework", + "path": "PrivateFrameworks/SPSupport.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/SPSupport.framework/Versions" + } + ] + }, + { + "value": 184, + "name": "StoreJavaScript.framework", + "path": "PrivateFrameworks/StoreJavaScript.framework", + "children": [ + { + "value": 176, + "name": "Versions", + "path": "PrivateFrameworks/StoreJavaScript.framework/Versions" + } + ] + }, + { + "value": 844, + "name": "StoreUI.framework", + "path": "PrivateFrameworks/StoreUI.framework", + "children": [ + { + "value": 836, + "name": "Versions", + "path": "PrivateFrameworks/StoreUI.framework/Versions" + } + ] + }, + { + "value": 32, + "name": "StoreXPCServices.framework", + "path": "PrivateFrameworks/StoreXPCServices.framework", + "children": [ + { + "value": 20, + "name": "Versions", + "path": "PrivateFrameworks/StoreXPCServices.framework/Versions" + } + ] + }, + { + "value": 72, + "name": "StreamingZip.framework", + "path": "PrivateFrameworks/StreamingZip.framework", + "children": [ + { + "value": 60, + "name": "Versions", + "path": "PrivateFrameworks/StreamingZip.framework/Versions" + } + ] + }, + { + "value": 456, + "name": "Suggestions.framework", + "path": "PrivateFrameworks/Suggestions.framework", + "children": [ + { + "value": 448, + "name": "Versions", + "path": "PrivateFrameworks/Suggestions.framework/Versions" + } + ] + }, + { + "value": 504, + "name": "Symbolication.framework", + "path": "PrivateFrameworks/Symbolication.framework", + "children": [ + { + "value": 496, + "name": "Versions", + "path": "PrivateFrameworks/Symbolication.framework/Versions" + } + ] + }, + { + "value": 320, + "name": "Symptoms.framework", + "path": "PrivateFrameworks/Symptoms.framework", + "children": [ + { + "value": 312, + "name": "Frameworks", + "path": "PrivateFrameworks/Symptoms.framework/Frameworks" + }, + { + "value": 4, + "name": "Versions", + "path": "PrivateFrameworks/Symptoms.framework/Versions" + } + ] + }, + { + "value": 280, + "name": "SyncedDefaults.framework", + "path": "PrivateFrameworks/SyncedDefaults.framework", + "children": [ + { + "value": 216, + "name": "Support", + "path": "PrivateFrameworks/SyncedDefaults.framework/Support" + }, + { + "value": 56, + "name": "Versions", + "path": "PrivateFrameworks/SyncedDefaults.framework/Versions" + } + ] + }, + { + "value": 5272, + "name": "SyncServicesUI.framework", + "path": "PrivateFrameworks/SyncServicesUI.framework", + "children": [ + { + "value": 5264, + "name": "Versions", + "path": "PrivateFrameworks/SyncServicesUI.framework/Versions" + } + ] + }, + { + "value": 932, + "name": "SystemAdministration.framework", + "path": "PrivateFrameworks/SystemAdministration.framework", + "children": [ + { + "value": 864, + "name": "Versions", + "path": "PrivateFrameworks/SystemAdministration.framework/Versions" + }, + { + "value": 60, + "name": "XPCServices", + "path": "PrivateFrameworks/SystemAdministration.framework/XPCServices" + } + ] + }, + { + "value": 5656, + "name": "SystemMigration.framework", + "path": "PrivateFrameworks/SystemMigration.framework", + "children": [ + { + "value": 508, + "name": "Frameworks", + "path": "PrivateFrameworks/SystemMigration.framework/Frameworks" + }, + { + "value": 5140, + "name": "Versions", + "path": "PrivateFrameworks/SystemMigration.framework/Versions" + } + ] + }, + { + "value": 52, + "name": "SystemUIPlugin.framework", + "path": "PrivateFrameworks/SystemUIPlugin.framework", + "children": [ + { + "value": 44, + "name": "Versions", + "path": "PrivateFrameworks/SystemUIPlugin.framework/Versions" + } + ] + }, + { + "value": 144, + "name": "TCC.framework", + "path": "PrivateFrameworks/TCC.framework", + "children": [ + { + "value": 136, + "name": "Versions", + "path": "PrivateFrameworks/TCC.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "TrustEvaluationAgent.framework", + "path": "PrivateFrameworks/TrustEvaluationAgent.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/TrustEvaluationAgent.framework/Versions" + } + ] + }, + { + "value": 720, + "name": "Ubiquity.framework", + "path": "PrivateFrameworks/Ubiquity.framework", + "children": [ + { + "value": 708, + "name": "Versions", + "path": "PrivateFrameworks/Ubiquity.framework/Versions" + } + ] + }, + { + "value": 136, + "name": "UIRecording.framework", + "path": "PrivateFrameworks/UIRecording.framework", + "children": [ + { + "value": 128, + "name": "Versions", + "path": "PrivateFrameworks/UIRecording.framework/Versions" + } + ] + }, + { + "value": 56, + "name": "Uninstall.framework", + "path": "PrivateFrameworks/Uninstall.framework", + "children": [ + { + "value": 48, + "name": "Versions", + "path": "PrivateFrameworks/Uninstall.framework/Versions" + } + ] + }, + { + "value": 2320, + "name": "UniversalAccess.framework", + "path": "PrivateFrameworks/UniversalAccess.framework", + "children": [ + { + "value": 2308, + "name": "Versions", + "path": "PrivateFrameworks/UniversalAccess.framework/Versions" + } + ] + }, + { + "value": 1248, + "name": "VCXMPP.framework", + "path": "PrivateFrameworks/VCXMPP.framework", + "children": [ + { + "value": 1232, + "name": "Versions", + "path": "PrivateFrameworks/VCXMPP.framework/Versions" + } + ] + }, + { + "value": 2016, + "name": "VectorKit.framework", + "path": "PrivateFrameworks/VectorKit.framework", + "children": [ + { + "value": 2008, + "name": "Versions", + "path": "PrivateFrameworks/VectorKit.framework/Versions" + } + ] + }, + { + "value": 1164, + "name": "VideoConference.framework", + "path": "PrivateFrameworks/VideoConference.framework", + "children": [ + { + "value": 1156, + "name": "Versions", + "path": "PrivateFrameworks/VideoConference.framework/Versions" + } + ] + }, + { + "value": 2152, + "name": "VideoProcessing.framework", + "path": "PrivateFrameworks/VideoProcessing.framework", + "children": [ + { + "value": 2144, + "name": "Versions", + "path": "PrivateFrameworks/VideoProcessing.framework/Versions" + } + ] + }, + { + "value": 420, + "name": "ViewBridge.framework", + "path": "PrivateFrameworks/ViewBridge.framework", + "children": [ + { + "value": 412, + "name": "Versions", + "path": "PrivateFrameworks/ViewBridge.framework/Versions" + } + ] + }, + { + "value": 164, + "name": "vmutils.framework", + "path": "PrivateFrameworks/vmutils.framework", + "children": [ + { + "value": 156, + "name": "Versions", + "path": "PrivateFrameworks/vmutils.framework/Versions" + } + ] + }, + { + "value": 284, + "name": "WeatherKit.framework", + "path": "PrivateFrameworks/WeatherKit.framework", + "children": [ + { + "value": 272, + "name": "Versions", + "path": "PrivateFrameworks/WeatherKit.framework/Versions" + } + ] + }, + { + "value": 2228, + "name": "WebContentAnalysis.framework", + "path": "PrivateFrameworks/WebContentAnalysis.framework", + "children": [ + { + "value": 2220, + "name": "Versions", + "path": "PrivateFrameworks/WebContentAnalysis.framework/Versions" + } + ] + }, + { + "value": 24, + "name": "WebFilterDNS.framework", + "path": "PrivateFrameworks/WebFilterDNS.framework", + "children": [ + { + "value": 16, + "name": "Versions", + "path": "PrivateFrameworks/WebFilterDNS.framework/Versions" + } + ] + }, + { + "value": 132, + "name": "WebInspector.framework", + "path": "PrivateFrameworks/WebInspector.framework", + "children": [ + { + "value": 124, + "name": "Versions", + "path": "PrivateFrameworks/WebInspector.framework/Versions" + } + ] + }, + { + "value": 1228, + "name": "WebInspectorUI.framework", + "path": "PrivateFrameworks/WebInspectorUI.framework", + "children": [ + { + "value": 1220, + "name": "Versions", + "path": "PrivateFrameworks/WebInspectorUI.framework/Versions" + } + ] + }, + { + "value": 2672, + "name": "WebKit2.framework", + "path": "PrivateFrameworks/WebKit2.framework", + "children": [ + { + "value": 16, + "name": "NetworkProcess.app", + "path": "PrivateFrameworks/WebKit2.framework/NetworkProcess.app" + }, + { + "value": 8, + "name": "OfflineStorageProcess.app", + "path": "PrivateFrameworks/WebKit2.framework/OfflineStorageProcess.app" + }, + { + "value": 20, + "name": "PluginProcess.app", + "path": "PrivateFrameworks/WebKit2.framework/PluginProcess.app" + }, + { + "value": 8, + "name": "SharedWorkerProcess.app", + "path": "PrivateFrameworks/WebKit2.framework/SharedWorkerProcess.app" + }, + { + "value": 2592, + "name": "Versions", + "path": "PrivateFrameworks/WebKit2.framework/Versions" + }, + { + "value": 16, + "name": "WebProcess.app", + "path": "PrivateFrameworks/WebKit2.framework/WebProcess.app" + } + ] + }, + { + "value": 496, + "name": "WhitePages.framework", + "path": "PrivateFrameworks/WhitePages.framework", + "children": [ + { + "value": 488, + "name": "Versions", + "path": "PrivateFrameworks/WhitePages.framework/Versions" + } + ] + }, + { + "value": 36, + "name": "WiFiCloudSyncEngine.framework", + "path": "PrivateFrameworks/WiFiCloudSyncEngine.framework", + "children": [ + { + "value": 28, + "name": "Versions", + "path": "PrivateFrameworks/WiFiCloudSyncEngine.framework/Versions" + } + ] + }, + { + "value": 444, + "name": "WirelessDiagnosticsSupport.framework", + "path": "PrivateFrameworks/WirelessDiagnosticsSupport.framework", + "children": [ + { + "value": 436, + "name": "Versions", + "path": "PrivateFrameworks/WirelessDiagnosticsSupport.framework/Versions" + } + ] + }, + { + "value": 372, + "name": "XMPPCore.framework", + "path": "PrivateFrameworks/XMPPCore.framework", + "children": [ + { + "value": 364, + "name": "Versions", + "path": "PrivateFrameworks/XMPPCore.framework/Versions" + } + ] + }, + { + "value": 48, + "name": "XPCObjects.framework", + "path": "PrivateFrameworks/XPCObjects.framework", + "children": [ + { + "value": 40, + "name": "Versions", + "path": "PrivateFrameworks/XPCObjects.framework/Versions" + } + ] + }, + { + "value": 60, + "name": "XPCService.framework", + "path": "PrivateFrameworks/XPCService.framework", + "children": [ + { + "value": 52, + "name": "Versions", + "path": "PrivateFrameworks/XPCService.framework/Versions" + } + ] + }, + { + "value": 516, + "name": "XQuery.framework", + "path": "PrivateFrameworks/XQuery.framework", + "children": [ + { + "value": 508, + "name": "Versions", + "path": "PrivateFrameworks/XQuery.framework/Versions" + } + ] + } + ] + }, + { + "value": 2988, + "name": "QuickLook", + "path": "QuickLook", + "children": [ + { + "value": 8, + "name": "Audio.qlgenerator", + "path": "QuickLook/Audio.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/Audio.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "Bookmark.qlgenerator", + "path": "QuickLook/Bookmark.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/Bookmark.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "Clippings.qlgenerator", + "path": "QuickLook/Clippings.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/Clippings.qlgenerator/Contents" + } + ] + }, + { + "value": 232, + "name": "Contact.qlgenerator", + "path": "QuickLook/Contact.qlgenerator", + "children": [ + { + "value": 232, + "name": "Contents", + "path": "QuickLook/Contact.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "EPS.qlgenerator", + "path": "QuickLook/EPS.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/EPS.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "Font.qlgenerator", + "path": "QuickLook/Font.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/Font.qlgenerator/Contents" + } + ] + }, + { + "value": 1432, + "name": "iCal.qlgenerator", + "path": "QuickLook/iCal.qlgenerator", + "children": [ + { + "value": 1432, + "name": "Contents", + "path": "QuickLook/iCal.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "iChat.qlgenerator", + "path": "QuickLook/iChat.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/iChat.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "Icon.qlgenerator", + "path": "QuickLook/Icon.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/Icon.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "Image.qlgenerator", + "path": "QuickLook/Image.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/Image.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "LocPDF.qlgenerator", + "path": "QuickLook/LocPDF.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/LocPDF.qlgenerator/Contents" + } + ] + }, + { + "value": 28, + "name": "Mail.qlgenerator", + "path": "QuickLook/Mail.qlgenerator", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "QuickLook/Mail.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "Movie.qlgenerator", + "path": "QuickLook/Movie.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/Movie.qlgenerator/Contents" + } + ] + }, + { + "value": 20, + "name": "Notes.qlgenerator", + "path": "QuickLook/Notes.qlgenerator", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "QuickLook/Notes.qlgenerator/Contents" + } + ] + }, + { + "value": 24, + "name": "Office.qlgenerator", + "path": "QuickLook/Office.qlgenerator", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "QuickLook/Office.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "Package.qlgenerator", + "path": "QuickLook/Package.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/Package.qlgenerator/Contents" + } + ] + }, + { + "value": 20, + "name": "PDF.qlgenerator", + "path": "QuickLook/PDF.qlgenerator", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "QuickLook/PDF.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "SceneKit.qlgenerator", + "path": "QuickLook/SceneKit.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/SceneKit.qlgenerator/Contents" + } + ] + }, + { + "value": 36, + "name": "Security.qlgenerator", + "path": "QuickLook/Security.qlgenerator", + "children": [ + { + "value": 36, + "name": "Contents", + "path": "QuickLook/Security.qlgenerator/Contents" + } + ] + }, + { + "value": 1060, + "name": "StandardBundles.qlgenerator", + "path": "QuickLook/StandardBundles.qlgenerator", + "children": [ + { + "value": 1060, + "name": "Contents", + "path": "QuickLook/StandardBundles.qlgenerator/Contents" + } + ] + }, + { + "value": 12, + "name": "Text.qlgenerator", + "path": "QuickLook/Text.qlgenerator", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "QuickLook/Text.qlgenerator/Contents" + } + ] + }, + { + "value": 8, + "name": "Web.qlgenerator", + "path": "QuickLook/Web.qlgenerator", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "QuickLook/Web.qlgenerator/Contents" + } + ] + } + ] + }, + { + "value": 17888, + "name": "QuickTime", + "path": "QuickTime", + "children": [ + { + "value": 24, + "name": "AppleGVAHW.component", + "path": "QuickTime/AppleGVAHW.component", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "QuickTime/AppleGVAHW.component/Contents" + } + ] + }, + { + "value": 60, + "name": "ApplePixletVideo.component", + "path": "QuickTime/ApplePixletVideo.component", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "QuickTime/ApplePixletVideo.component/Contents" + } + ] + }, + { + "value": 216, + "name": "AppleProResDecoder.component", + "path": "QuickTime/AppleProResDecoder.component", + "children": [ + { + "value": 216, + "name": "Contents", + "path": "QuickTime/AppleProResDecoder.component/Contents" + } + ] + }, + { + "value": 756, + "name": "AppleVAH264HW.component", + "path": "QuickTime/AppleVAH264HW.component", + "children": [ + { + "value": 756, + "name": "Contents", + "path": "QuickTime/AppleVAH264HW.component/Contents" + } + ] + }, + { + "value": 24, + "name": "QuartzComposer.component", + "path": "QuickTime/QuartzComposer.component", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "QuickTime/QuartzComposer.component/Contents" + } + ] + }, + { + "value": 520, + "name": "QuickTime3GPP.component", + "path": "QuickTime/QuickTime3GPP.component", + "children": [ + { + "value": 520, + "name": "Contents", + "path": "QuickTime/QuickTime3GPP.component/Contents" + } + ] + }, + { + "value": 11548, + "name": "QuickTimeComponents.component", + "path": "QuickTime/QuickTimeComponents.component", + "children": [ + { + "value": 11548, + "name": "Contents", + "path": "QuickTime/QuickTimeComponents.component/Contents" + } + ] + }, + { + "value": 76, + "name": "QuickTimeFireWireDV.component", + "path": "QuickTime/QuickTimeFireWireDV.component", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "QuickTime/QuickTimeFireWireDV.component/Contents" + } + ] + }, + { + "value": 1592, + "name": "QuickTimeH264.component", + "path": "QuickTime/QuickTimeH264.component", + "children": [ + { + "value": 1592, + "name": "Contents", + "path": "QuickTime/QuickTimeH264.component/Contents" + } + ] + }, + { + "value": 64, + "name": "QuickTimeIIDCDigitizer.component", + "path": "QuickTime/QuickTimeIIDCDigitizer.component", + "children": [ + { + "value": 64, + "name": "Contents", + "path": "QuickTime/QuickTimeIIDCDigitizer.component/Contents" + } + ] + }, + { + "value": 832, + "name": "QuickTimeImporters.component", + "path": "QuickTime/QuickTimeImporters.component", + "children": [ + { + "value": 832, + "name": "Contents", + "path": "QuickTime/QuickTimeImporters.component/Contents" + } + ] + }, + { + "value": 200, + "name": "QuickTimeMPEG.component", + "path": "QuickTime/QuickTimeMPEG.component", + "children": [ + { + "value": 200, + "name": "Contents", + "path": "QuickTime/QuickTimeMPEG.component/Contents" + } + ] + }, + { + "value": 564, + "name": "QuickTimeMPEG4.component", + "path": "QuickTime/QuickTimeMPEG4.component", + "children": [ + { + "value": 564, + "name": "Contents", + "path": "QuickTime/QuickTimeMPEG4.component/Contents" + } + ] + }, + { + "value": 968, + "name": "QuickTimeStreaming.component", + "path": "QuickTime/QuickTimeStreaming.component", + "children": [ + { + "value": 968, + "name": "Contents", + "path": "QuickTime/QuickTimeStreaming.component/Contents" + } + ] + }, + { + "value": 120, + "name": "QuickTimeUSBVDCDigitizer.component", + "path": "QuickTime/QuickTimeUSBVDCDigitizer.component", + "children": [ + { + "value": 120, + "name": "Contents", + "path": "QuickTime/QuickTimeUSBVDCDigitizer.component/Contents" + } + ] + }, + { + "value": 324, + "name": "QuickTimeVR.component", + "path": "QuickTime/QuickTimeVR.component", + "children": [ + { + "value": 324, + "name": "Contents", + "path": "QuickTime/QuickTimeVR.component/Contents" + } + ] + } + ] + }, + { + "value": 28, + "name": "QuickTimeJava", + "path": "QuickTimeJava", + "children": [ + { + "value": 28, + "name": "QuickTimeJava.bundle", + "path": "QuickTimeJava/QuickTimeJava.bundle", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "QuickTimeJava/QuickTimeJava.bundle/Contents" + } + ] + } + ] + }, + { + "value": 20, + "name": "Recents", + "path": "Recents", + "children": [ + { + "value": 20, + "name": "Plugins", + "path": "Recents/Plugins", + "children": [ + { + "value": 36, + "name": "AddressBook.assistantBundle", + "path": "Assistant/Plugins/AddressBook.assistantBundle" + }, + { + "value": 8, + "name": "GenericAddressHandler.addresshandler", + "path": "Recents/Plugins/GenericAddressHandler.addresshandler" + }, + { + "value": 12, + "name": "MapsRecents.addresshandler", + "path": "Recents/Plugins/MapsRecents.addresshandler" + } + ] + } + ] + }, + { + "value": 12, + "name": "Sandbox", + "path": "Sandbox", + "children": [ + { + "value": 12, + "name": "Profiles", + "path": "Sandbox/Profiles" + } + ] + }, + { + "value": 1052, + "name": "ScreenSavers", + "path": "ScreenSavers", + "children": [ + { + "value": 8, + "name": "FloatingMessage.saver", + "path": "ScreenSavers/FloatingMessage.saver", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "ScreenSavers/FloatingMessage.saver/Contents" + } + ] + }, + { + "value": 360, + "name": "Flurry.saver", + "path": "ScreenSavers/Flurry.saver", + "children": [ + { + "value": 360, + "name": "Contents", + "path": "ScreenSavers/Flurry.saver/Contents" + } + ] + }, + { + "value": 568, + "name": "iTunes Artwork.saver", + "path": "ScreenSavers/iTunes Artwork.saver", + "children": [ + { + "value": 568, + "name": "Contents", + "path": "ScreenSavers/iTunes Artwork.saver/Contents" + } + ] + }, + { + "value": 52, + "name": "Random.saver", + "path": "ScreenSavers/Random.saver", + "children": [ + { + "value": 52, + "name": "Contents", + "path": "ScreenSavers/Random.saver/Contents" + } + ] + } + ] + }, + { + "value": 1848, + "name": "ScreenReader", + "path": "ScreenReader", + "children": [ + { + "value": 556, + "name": "BrailleDrivers", + "path": "ScreenReader/BrailleDrivers", + "children": [ + { + "value": 28, + "name": "Alva6 Series.brailledriver", + "path": "ScreenReader/BrailleDrivers/Alva6 Series.brailledriver" + }, + { + "value": 16, + "name": "Alva.brailledriver", + "path": "ScreenReader/BrailleDrivers/Alva.brailledriver" + }, + { + "value": 28, + "name": "BrailleConnect.brailledriver", + "path": "ScreenReader/BrailleDrivers/BrailleConnect.brailledriver" + }, + { + "value": 24, + "name": "BrailleNoteApex.brailledriver", + "path": "ScreenReader/BrailleDrivers/BrailleNoteApex.brailledriver" + }, + { + "value": 16, + "name": "BrailleNote.brailledriver", + "path": "ScreenReader/BrailleDrivers/BrailleNote.brailledriver" + }, + { + "value": 24, + "name": "BrailleSense.brailledriver", + "path": "ScreenReader/BrailleDrivers/BrailleSense.brailledriver" + }, + { + "value": 28, + "name": "Brailliant2.brailledriver", + "path": "ScreenReader/BrailleDrivers/Brailliant2.brailledriver" + }, + { + "value": 28, + "name": "Brailliant.brailledriver", + "path": "ScreenReader/BrailleDrivers/Brailliant.brailledriver" + }, + { + "value": 16, + "name": "Deininger.brailledriver", + "path": "ScreenReader/BrailleDrivers/Deininger.brailledriver" + }, + { + "value": 20, + "name": "EasyLink.brailledriver", + "path": "ScreenReader/BrailleDrivers/EasyLink.brailledriver" + }, + { + "value": 28, + "name": "Eurobraille.brailledriver", + "path": "ScreenReader/BrailleDrivers/Eurobraille.brailledriver" + }, + { + "value": 28, + "name": "FreedomScientific.brailledriver", + "path": "ScreenReader/BrailleDrivers/FreedomScientific.brailledriver" + }, + { + "value": 32, + "name": "HandyTech.brailledriver", + "path": "ScreenReader/BrailleDrivers/HandyTech.brailledriver" + }, + { + "value": 20, + "name": "HIMSDriver.brailledriver", + "path": "ScreenReader/BrailleDrivers/HIMSDriver.brailledriver" + }, + { + "value": 28, + "name": "KGSDriver.brailledriver", + "path": "ScreenReader/BrailleDrivers/KGSDriver.brailledriver" + }, + { + "value": 28, + "name": "MDV.brailledriver", + "path": "ScreenReader/BrailleDrivers/MDV.brailledriver" + }, + { + "value": 24, + "name": "NinepointSystems.brailledriver", + "path": "ScreenReader/BrailleDrivers/NinepointSystems.brailledriver" + }, + { + "value": 24, + "name": "Papenmeier.brailledriver", + "path": "ScreenReader/BrailleDrivers/Papenmeier.brailledriver" + }, + { + "value": 28, + "name": "Refreshabraille.brailledriver", + "path": "ScreenReader/BrailleDrivers/Refreshabraille.brailledriver" + }, + { + "value": 32, + "name": "Seika.brailledriver", + "path": "ScreenReader/BrailleDrivers/Seika.brailledriver" + }, + { + "value": 16, + "name": "SyncBraille.brailledriver", + "path": "ScreenReader/BrailleDrivers/SyncBraille.brailledriver" + }, + { + "value": 24, + "name": "VarioPro.brailledriver", + "path": "ScreenReader/BrailleDrivers/VarioPro.brailledriver" + }, + { + "value": 16, + "name": "Voyager.brailledriver", + "path": "ScreenReader/BrailleDrivers/Voyager.brailledriver" + } + ] + }, + { + "value": 1292, + "name": "BrailleTables", + "path": "ScreenReader/BrailleTables", + "children": [ + { + "value": 1292, + "name": "Duxbury.brailletable", + "path": "ScreenReader/BrailleTables/Duxbury.brailletable" + } + ] + } + ] + }, + { + "value": 1408, + "name": "ScriptingAdditions", + "path": "ScriptingAdditions", + "children": [ + { + "value": 8, + "name": "DigitalHub Scripting.osax", + "path": "ScriptingAdditions/DigitalHub Scripting.osax", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "ScriptingAdditions/DigitalHub Scripting.osax/Contents" + } + ] + }, + { + "value": 1400, + "name": "StandardAdditions.osax", + "path": "ScriptingAdditions/StandardAdditions.osax", + "children": [ + { + "value": 1400, + "name": "Contents", + "path": "ScriptingAdditions/StandardAdditions.osax/Contents" + } + ] + } + ] + }, + { + "value": 0, + "name": "ScriptingDefinitions", + "path": "ScriptingDefinitions" + }, + { + "value": 0, + "name": "SDKSettingsPlist", + "path": "SDKSettingsPlist" + }, + { + "value": 312, + "name": "Security", + "path": "Security", + "children": [ + { + "value": 100, + "name": "dotmac_tp.bundle", + "path": "Security/dotmac_tp.bundle", + "children": [ + { + "value": 100, + "name": "Contents", + "path": "Security/dotmac_tp.bundle/Contents" + } + ] + }, + { + "value": 72, + "name": "ldapdl.bundle", + "path": "Security/ldapdl.bundle", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Security/ldapdl.bundle/Contents" + } + ] + }, + { + "value": 132, + "name": "tokend", + "path": "Security/tokend", + "children": [ + { + "value": 132, + "name": "uiplugins", + "path": "Security/tokend/uiplugins" + } + ] + } + ] + }, + { + "value": 18208, + "name": "Services", + "path": "Services", + "children": [ + { + "value": 0, + "name": "Addto iTunes as a Spoken Track.workflow", + "path": "Services/Addto iTunes as a Spoken Track.workflow", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Services/Addto iTunes as a Spoken Track.workflow/Contents" + } + ] + }, + { + "value": 14308, + "name": "AppleSpell.service", + "path": "Services/AppleSpell.service", + "children": [ + { + "value": 14308, + "name": "Contents", + "path": "Services/AppleSpell.service/Contents" + } + ] + }, + { + "value": 556, + "name": "ChineseTextConverterService.app", + "path": "Services/ChineseTextConverterService.app", + "children": [ + { + "value": 556, + "name": "Contents", + "path": "Services/ChineseTextConverterService.app/Contents" + } + ] + }, + { + "value": 48, + "name": "EncodeSelected Audio Files.workflow", + "path": "Services/EncodeSelected Audio Files.workflow", + "children": [ + { + "value": 48, + "name": "Contents", + "path": "Services/EncodeSelected Audio Files.workflow/Contents" + } + ] + }, + { + "value": 40, + "name": "EncodeSelected Video Files.workflow", + "path": "Services/EncodeSelected Video Files.workflow", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "Services/EncodeSelected Video Files.workflow/Contents" + } + ] + }, + { + "value": 1344, + "name": "ImageCaptureService.app", + "path": "Services/ImageCaptureService.app", + "children": [ + { + "value": 1344, + "name": "Contents", + "path": "Services/ImageCaptureService.app/Contents" + } + ] + }, + { + "value": 16, + "name": "OpenSpell.service", + "path": "Services/OpenSpell.service", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Services/OpenSpell.service/Contents" + } + ] + }, + { + "value": 0, + "name": "SetDesktop Picture.workflow", + "path": "Services/SetDesktop Picture.workflow", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Services/SetDesktop Picture.workflow/Contents" + } + ] + }, + { + "value": 0, + "name": "ShowAddress in Google Maps.workflow", + "path": "Services/ShowAddress in Google Maps.workflow", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "Services/ShowAddress in Google Maps.workflow/Contents" + } + ] + }, + { + "value": 60, + "name": "ShowMap.workflow", + "path": "Services/ShowMap.workflow", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "Services/ShowMap.workflow/Contents" + } + ] + }, + { + "value": 12, + "name": "SpeechService.service", + "path": "Services/SpeechService.service", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Services/SpeechService.service/Contents" + } + ] + }, + { + "value": 8, + "name": "Spotlight.service", + "path": "Services/Spotlight.service", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Services/Spotlight.service/Contents" + } + ] + }, + { + "value": 1816, + "name": "SummaryService.app", + "path": "Services/SummaryService.app", + "children": [ + { + "value": 1816, + "name": "Contents", + "path": "Services/SummaryService.app/Contents" + } + ] + } + ] + }, + { + "value": 700, + "name": "Sounds", + "path": "Sounds" + }, + { + "value": 1512668, + "name": "Speech", + "path": "Speech", + "children": [ + { + "value": 2804, + "name": "Recognizers", + "path": "Speech/Recognizers", + "children": [ + { + "value": 2804, + "name": "AppleSpeakableItems.SpeechRecognizer", + "path": "Speech/Recognizers/AppleSpeakableItems.SpeechRecognizer" + } + ] + }, + { + "value": 6684, + "name": "Synthesizers", + "path": "Speech/Synthesizers", + "children": [ + { + "value": 800, + "name": "MacinTalk.SpeechSynthesizer", + "path": "Speech/Synthesizers/MacinTalk.SpeechSynthesizer" + }, + { + "value": 3468, + "name": "MultiLingual.SpeechSynthesizer", + "path": "Speech/Synthesizers/MultiLingual.SpeechSynthesizer" + }, + { + "value": 2416, + "name": "Polyglot.SpeechSynthesizer", + "path": "Speech/Synthesizers/Polyglot.SpeechSynthesizer" + } + ] + }, + { + "value": 1503180, + "name": "Voices", + "path": "Speech/Voices", + "children": [ + { + "value": 1540, + "name": "Agnes.SpeechVoice", + "path": "Speech/Voices/Agnes.SpeechVoice" + }, + { + "value": 20, + "name": "Albert.SpeechVoice", + "path": "Speech/Voices/Albert.SpeechVoice" + }, + { + "value": 412132, + "name": "Alex.SpeechVoice", + "path": "Speech/Voices/Alex.SpeechVoice" + }, + { + "value": 624, + "name": "AliceCompact.SpeechVoice", + "path": "Speech/Voices/AliceCompact.SpeechVoice" + }, + { + "value": 908, + "name": "AlvaCompact.SpeechVoice", + "path": "Speech/Voices/AlvaCompact.SpeechVoice" + }, + { + "value": 668, + "name": "AmelieCompact.SpeechVoice", + "path": "Speech/Voices/AmelieCompact.SpeechVoice" + }, + { + "value": 1016, + "name": "AnnaCompact.SpeechVoice", + "path": "Speech/Voices/AnnaCompact.SpeechVoice" + }, + { + "value": 12, + "name": "BadNews.SpeechVoice", + "path": "Speech/Voices/BadNews.SpeechVoice" + }, + { + "value": 20, + "name": "Bahh.SpeechVoice", + "path": "Speech/Voices/Bahh.SpeechVoice" + }, + { + "value": 48, + "name": "Bells.SpeechVoice", + "path": "Speech/Voices/Bells.SpeechVoice" + }, + { + "value": 20, + "name": "Boing.SpeechVoice", + "path": "Speech/Voices/Boing.SpeechVoice" + }, + { + "value": 1684, + "name": "Bruce.SpeechVoice", + "path": "Speech/Voices/Bruce.SpeechVoice" + }, + { + "value": 12, + "name": "Bubbles.SpeechVoice", + "path": "Speech/Voices/Bubbles.SpeechVoice" + }, + { + "value": 24, + "name": "Cellos.SpeechVoice", + "path": "Speech/Voices/Cellos.SpeechVoice" + }, + { + "value": 720, + "name": "DamayantiCompact.SpeechVoice", + "path": "Speech/Voices/DamayantiCompact.SpeechVoice" + }, + { + "value": 1000, + "name": "DanielCompact.SpeechVoice", + "path": "Speech/Voices/DanielCompact.SpeechVoice" + }, + { + "value": 24, + "name": "Deranged.SpeechVoice", + "path": "Speech/Voices/Deranged.SpeechVoice" + }, + { + "value": 740, + "name": "EllenCompact.SpeechVoice", + "path": "Speech/Voices/EllenCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Fred.SpeechVoice", + "path": "Speech/Voices/Fred.SpeechVoice" + }, + { + "value": 12, + "name": "GoodNews.SpeechVoice", + "path": "Speech/Voices/GoodNews.SpeechVoice" + }, + { + "value": 28, + "name": "Hysterical.SpeechVoice", + "path": "Speech/Voices/Hysterical.SpeechVoice" + }, + { + "value": 492, + "name": "IoanaCompact.SpeechVoice", + "path": "Speech/Voices/IoanaCompact.SpeechVoice" + }, + { + "value": 596, + "name": "JoanaCompact.SpeechVoice", + "path": "Speech/Voices/JoanaCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Junior.SpeechVoice", + "path": "Speech/Voices/Junior.SpeechVoice" + }, + { + "value": 1336, + "name": "KanyaCompact.SpeechVoice", + "path": "Speech/Voices/KanyaCompact.SpeechVoice" + }, + { + "value": 1004, + "name": "KarenCompact.SpeechVoice", + "path": "Speech/Voices/KarenCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Kathy.SpeechVoice", + "path": "Speech/Voices/Kathy.SpeechVoice" + }, + { + "value": 408836, + "name": "Kyoko.SpeechVoice", + "path": "Speech/Voices/Kyoko.SpeechVoice" + }, + { + "value": 2620, + "name": "KyokoCompact.SpeechVoice", + "path": "Speech/Voices/KyokoCompact.SpeechVoice" + }, + { + "value": 496, + "name": "LauraCompact.SpeechVoice", + "path": "Speech/Voices/LauraCompact.SpeechVoice" + }, + { + "value": 2104, + "name": "LekhaCompact.SpeechVoice", + "path": "Speech/Voices/LekhaCompact.SpeechVoice" + }, + { + "value": 548, + "name": "LucianaCompact.SpeechVoice", + "path": "Speech/Voices/LucianaCompact.SpeechVoice" + }, + { + "value": 504, + "name": "MariskaCompact.SpeechVoice", + "path": "Speech/Voices/MariskaCompact.SpeechVoice" + }, + { + "value": 2092, + "name": "Mei-JiaCompact.SpeechVoice", + "path": "Speech/Voices/Mei-JiaCompact.SpeechVoice" + }, + { + "value": 1020, + "name": "MelinaCompact.SpeechVoice", + "path": "Speech/Voices/MelinaCompact.SpeechVoice" + }, + { + "value": 2160, + "name": "MilenaCompact.SpeechVoice", + "path": "Speech/Voices/MilenaCompact.SpeechVoice" + }, + { + "value": 728, + "name": "MoiraCompact.SpeechVoice", + "path": "Speech/Voices/MoiraCompact.SpeechVoice" + }, + { + "value": 612, + "name": "MonicaCompact.SpeechVoice", + "path": "Speech/Voices/MonicaCompact.SpeechVoice" + }, + { + "value": 824, + "name": "NoraCompact.SpeechVoice", + "path": "Speech/Voices/NoraCompact.SpeechVoice" + }, + { + "value": 24, + "name": "Organ.SpeechVoice", + "path": "Speech/Voices/Organ.SpeechVoice" + }, + { + "value": 664, + "name": "PaulinaCompact.SpeechVoice", + "path": "Speech/Voices/PaulinaCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Princess.SpeechVoice", + "path": "Speech/Voices/Princess.SpeechVoice" + }, + { + "value": 12, + "name": "Ralph.SpeechVoice", + "path": "Speech/Voices/Ralph.SpeechVoice" + }, + { + "value": 908, + "name": "SamanthaCompact.SpeechVoice", + "path": "Speech/Voices/SamanthaCompact.SpeechVoice" + }, + { + "value": 828, + "name": "SaraCompact.SpeechVoice", + "path": "Speech/Voices/SaraCompact.SpeechVoice" + }, + { + "value": 664, + "name": "SatuCompact.SpeechVoice", + "path": "Speech/Voices/SatuCompact.SpeechVoice" + }, + { + "value": 2336, + "name": "Sin-jiCompact.SpeechVoice", + "path": "Speech/Voices/Sin-jiCompact.SpeechVoice" + }, + { + "value": 2856, + "name": "TarikCompact.SpeechVoice", + "path": "Speech/Voices/TarikCompact.SpeechVoice" + }, + { + "value": 948, + "name": "TessaCompact.SpeechVoice", + "path": "Speech/Voices/TessaCompact.SpeechVoice" + }, + { + "value": 660, + "name": "ThomasCompact.SpeechVoice", + "path": "Speech/Voices/ThomasCompact.SpeechVoice" + }, + { + "value": 610156, + "name": "Ting-Ting.SpeechVoice", + "path": "Speech/Voices/Ting-Ting.SpeechVoice" + }, + { + "value": 1708, + "name": "Ting-TingCompact.SpeechVoice", + "path": "Speech/Voices/Ting-TingCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Trinoids.SpeechVoice", + "path": "Speech/Voices/Trinoids.SpeechVoice" + }, + { + "value": 28632, + "name": "Vicki.SpeechVoice", + "path": "Speech/Voices/Vicki.SpeechVoice" + }, + { + "value": 1664, + "name": "Victoria.SpeechVoice", + "path": "Speech/Voices/Victoria.SpeechVoice" + }, + { + "value": 12, + "name": "Whisper.SpeechVoice", + "path": "Speech/Voices/Whisper.SpeechVoice" + }, + { + "value": 992, + "name": "XanderCompact.SpeechVoice", + "path": "Speech/Voices/XanderCompact.SpeechVoice" + }, + { + "value": 756, + "name": "YeldaCompact.SpeechVoice", + "path": "Speech/Voices/YeldaCompact.SpeechVoice" + }, + { + "value": 728, + "name": "YunaCompact.SpeechVoice", + "path": "Speech/Voices/YunaCompact.SpeechVoice" + }, + { + "value": 12, + "name": "Zarvox.SpeechVoice", + "path": "Speech/Voices/Zarvox.SpeechVoice" + }, + { + "value": 564, + "name": "ZosiaCompact.SpeechVoice", + "path": "Speech/Voices/ZosiaCompact.SpeechVoice" + }, + { + "value": 772, + "name": "ZuzanaCompact.SpeechVoice", + "path": "Speech/Voices/ZuzanaCompact.SpeechVoice" + } + ] + } + ] + }, + { + "value": 1060, + "name": "Spelling", + "path": "Spelling" + }, + { + "value": 412, + "name": "Spotlight", + "path": "Spotlight", + "children": [ + { + "value": 20, + "name": "Application.mdimporter", + "path": "Spotlight/Application.mdimporter", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Spotlight/Application.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "Archives.mdimporter", + "path": "Spotlight/Archives.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/Archives.mdimporter/Contents" + } + ] + }, + { + "value": 20, + "name": "Audio.mdimporter", + "path": "Spotlight/Audio.mdimporter", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Spotlight/Audio.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "Automator.mdimporter", + "path": "Spotlight/Automator.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/Automator.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "Bookmarks.mdimporter", + "path": "Spotlight/Bookmarks.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/Bookmarks.mdimporter/Contents" + } + ] + }, + { + "value": 16, + "name": "Chat.mdimporter", + "path": "Spotlight/Chat.mdimporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Spotlight/Chat.mdimporter/Contents" + } + ] + }, + { + "value": 28, + "name": "CoreMedia.mdimporter", + "path": "Spotlight/CoreMedia.mdimporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Spotlight/CoreMedia.mdimporter/Contents" + } + ] + }, + { + "value": 32, + "name": "Font.mdimporter", + "path": "Spotlight/Font.mdimporter", + "children": [ + { + "value": 32, + "name": "Contents", + "path": "Spotlight/Font.mdimporter/Contents" + } + ] + }, + { + "value": 16, + "name": "iCal.mdimporter", + "path": "Spotlight/iCal.mdimporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Spotlight/iCal.mdimporter/Contents" + } + ] + }, + { + "value": 28, + "name": "Image.mdimporter", + "path": "Spotlight/Image.mdimporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "Spotlight/Image.mdimporter/Contents" + } + ] + }, + { + "value": 72, + "name": "iPhoto.mdimporter", + "path": "Spotlight/iPhoto.mdimporter", + "children": [ + { + "value": 72, + "name": "Contents", + "path": "Spotlight/iPhoto.mdimporter/Contents" + } + ] + }, + { + "value": 16, + "name": "iPhoto8.mdimporter", + "path": "Spotlight/iPhoto8.mdimporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Spotlight/iPhoto8.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "Mail.mdimporter", + "path": "Spotlight/Mail.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/Mail.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "MIDI.mdimporter", + "path": "Spotlight/MIDI.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/MIDI.mdimporter/Contents" + } + ] + }, + { + "value": 8, + "name": "Notes.mdimporter", + "path": "Spotlight/Notes.mdimporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "Spotlight/Notes.mdimporter/Contents" + } + ] + }, + { + "value": 16, + "name": "PDF.mdimporter", + "path": "Spotlight/PDF.mdimporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Spotlight/PDF.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "PS.mdimporter", + "path": "Spotlight/PS.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/PS.mdimporter/Contents" + } + ] + }, + { + "value": 12, + "name": "QuartzComposer.mdimporter", + "path": "Spotlight/QuartzComposer.mdimporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "Spotlight/QuartzComposer.mdimporter/Contents" + } + ] + }, + { + "value": 20, + "name": "RichText.mdimporter", + "path": "Spotlight/RichText.mdimporter", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Spotlight/RichText.mdimporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SystemPrefs.mdimporter", + "path": "Spotlight/SystemPrefs.mdimporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "Spotlight/SystemPrefs.mdimporter/Contents" + } + ] + }, + { + "value": 20, + "name": "vCard.mdimporter", + "path": "Spotlight/vCard.mdimporter", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "Spotlight/vCard.mdimporter/Contents" + } + ] + } + ] + }, + { + "value": 0, + "name": "StartupItems", + "path": "StartupItems" + }, + { + "value": 168, + "name": "SyncServices", + "path": "SyncServices", + "children": [ + { + "value": 0, + "name": "AutoRegistration", + "path": "SyncServices/AutoRegistration", + "children": [ + { + "value": 0, + "name": "Clients", + "path": "SyncServices/AutoRegistration/Clients" + }, + { + "value": 0, + "name": "Schemas", + "path": "SyncServices/AutoRegistration/Schemas" + } + ] + }, + { + "value": 168, + "name": "Schemas", + "path": "SyncServices/Schemas", + "children": [ + { + "value": 24, + "name": "Bookmarks.syncschema", + "path": "SyncServices/Schemas/Bookmarks.syncschema" + }, + { + "value": 68, + "name": "Calendars.syncschema", + "path": "SyncServices/Schemas/Calendars.syncschema" + }, + { + "value": 48, + "name": "Contacts.syncschema", + "path": "SyncServices/Schemas/Contacts.syncschema" + }, + { + "value": 16, + "name": "Notes.syncschema", + "path": "SyncServices/Schemas/Notes.syncschema" + }, + { + "value": 12, + "name": "Palm.syncschema", + "path": "SyncServices/Schemas/Palm.syncschema" + } + ] + } + ] + }, + { + "value": 3156, + "name": "SystemConfiguration", + "path": "SystemConfiguration", + "children": [ + { + "value": 8, + "name": "ApplicationFirewallStartup.bundle", + "path": "SystemConfiguration/ApplicationFirewallStartup.bundle", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemConfiguration/ApplicationFirewallStartup.bundle/Contents" + } + ] + }, + { + "value": 116, + "name": "EAPOLController.bundle", + "path": "SystemConfiguration/EAPOLController.bundle", + "children": [ + { + "value": 116, + "name": "Contents", + "path": "SystemConfiguration/EAPOLController.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "InterfaceNamer.bundle", + "path": "SystemConfiguration/InterfaceNamer.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/InterfaceNamer.bundle/Contents" + } + ] + }, + { + "value": 132, + "name": "IPConfiguration.bundle", + "path": "SystemConfiguration/IPConfiguration.bundle", + "children": [ + { + "value": 132, + "name": "Contents", + "path": "SystemConfiguration/IPConfiguration.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "IPMonitor.bundle", + "path": "SystemConfiguration/IPMonitor.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/IPMonitor.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "KernelEventMonitor.bundle", + "path": "SystemConfiguration/KernelEventMonitor.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/KernelEventMonitor.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "LinkConfiguration.bundle", + "path": "SystemConfiguration/LinkConfiguration.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/LinkConfiguration.bundle/Contents" + } + ] + }, + { + "value": 20, + "name": "Logger.bundle", + "path": "SystemConfiguration/Logger.bundle", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "SystemConfiguration/Logger.bundle/Contents" + } + ] + }, + { + "value": 2804, + "name": "PPPController.bundle", + "path": "SystemConfiguration/PPPController.bundle", + "children": [ + { + "value": 2804, + "name": "Contents", + "path": "SystemConfiguration/PPPController.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "PreferencesMonitor.bundle", + "path": "SystemConfiguration/PreferencesMonitor.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/PreferencesMonitor.bundle/Contents" + } + ] + }, + { + "value": 76, + "name": "PrinterNotifications.bundle", + "path": "SystemConfiguration/PrinterNotifications.bundle", + "children": [ + { + "value": 76, + "name": "Contents", + "path": "SystemConfiguration/PrinterNotifications.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "SCNetworkReachability.bundle", + "path": "SystemConfiguration/SCNetworkReachability.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "SystemConfiguration/SCNetworkReachability.bundle/Contents" + } + ] + } + ] + }, + { + "value": 1520, + "name": "SystemProfiler", + "path": "SystemProfiler", + "children": [ + { + "value": 84, + "name": "SPAirPortReporter.spreporter", + "path": "SystemProfiler/SPAirPortReporter.spreporter", + "children": [ + { + "value": 84, + "name": "Contents", + "path": "SystemProfiler/SPAirPortReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPApplicationsReporter.spreporter", + "path": "SystemProfiler/SPApplicationsReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPApplicationsReporter.spreporter/Contents" + } + ] + }, + { + "value": 28, + "name": "SPAudioReporter.spreporter", + "path": "SystemProfiler/SPAudioReporter.spreporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "SystemProfiler/SPAudioReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPBluetoothReporter.spreporter", + "path": "SystemProfiler/SPBluetoothReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPBluetoothReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPCameraReporter.spreporter", + "path": "SystemProfiler/SPCameraReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPCameraReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPCardReaderReporter.spreporter", + "path": "SystemProfiler/SPCardReaderReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPCardReaderReporter.spreporter/Contents" + } + ] + }, + { + "value": 28, + "name": "SPComponentReporter.spreporter", + "path": "SystemProfiler/SPComponentReporter.spreporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "SystemProfiler/SPComponentReporter.spreporter/Contents" + } + ] + }, + { + "value": 28, + "name": "SPConfigurationProfileReporter.spreporter", + "path": "SystemProfiler/SPConfigurationProfileReporter.spreporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "SystemProfiler/SPConfigurationProfileReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPDeveloperToolsReporter.spreporter", + "path": "SystemProfiler/SPDeveloperToolsReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPDeveloperToolsReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPDiagnosticsReporter.spreporter", + "path": "SystemProfiler/SPDiagnosticsReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPDiagnosticsReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPDisabledApplicationsReporter.spreporter", + "path": "SystemProfiler/SPDisabledApplicationsReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPDisabledApplicationsReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPDiscBurningReporter.spreporter", + "path": "SystemProfiler/SPDiscBurningReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPDiscBurningReporter.spreporter/Contents" + } + ] + }, + { + "value": 284, + "name": "SPDisplaysReporter.spreporter", + "path": "SystemProfiler/SPDisplaysReporter.spreporter", + "children": [ + { + "value": 284, + "name": "Contents", + "path": "SystemProfiler/SPDisplaysReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPEthernetReporter.spreporter", + "path": "SystemProfiler/SPEthernetReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPEthernetReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPExtensionsReporter.spreporter", + "path": "SystemProfiler/SPExtensionsReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPExtensionsReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPFibreChannelReporter.spreporter", + "path": "SystemProfiler/SPFibreChannelReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPFibreChannelReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPFirewallReporter.spreporter", + "path": "SystemProfiler/SPFirewallReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPFirewallReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPFireWireReporter.spreporter", + "path": "SystemProfiler/SPFireWireReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPFireWireReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPFontReporter.spreporter", + "path": "SystemProfiler/SPFontReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPFontReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPFrameworksReporter.spreporter", + "path": "SystemProfiler/SPFrameworksReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPFrameworksReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPHardwareRAIDReporter.spreporter", + "path": "SystemProfiler/SPHardwareRAIDReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPHardwareRAIDReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPInstallHistoryReporter.spreporter", + "path": "SystemProfiler/SPInstallHistoryReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPInstallHistoryReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPLogsReporter.spreporter", + "path": "SystemProfiler/SPLogsReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPLogsReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPManagedClientReporter.spreporter", + "path": "SystemProfiler/SPManagedClientReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPManagedClientReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPMemoryReporter.spreporter", + "path": "SystemProfiler/SPMemoryReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPMemoryReporter.spreporter/Contents" + } + ] + }, + { + "value": 264, + "name": "SPNetworkLocationReporter.spreporter", + "path": "SystemProfiler/SPNetworkLocationReporter.spreporter", + "children": [ + { + "value": 264, + "name": "Contents", + "path": "SystemProfiler/SPNetworkLocationReporter.spreporter/Contents" + } + ] + }, + { + "value": 268, + "name": "SPNetworkReporter.spreporter", + "path": "SystemProfiler/SPNetworkReporter.spreporter", + "children": [ + { + "value": 268, + "name": "Contents", + "path": "SystemProfiler/SPNetworkReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPNetworkVolumeReporter.spreporter", + "path": "SystemProfiler/SPNetworkVolumeReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPNetworkVolumeReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPOSReporter.spreporter", + "path": "SystemProfiler/SPOSReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPOSReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPParallelATAReporter.spreporter", + "path": "SystemProfiler/SPParallelATAReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPParallelATAReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPParallelSCSIReporter.spreporter", + "path": "SystemProfiler/SPParallelSCSIReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPParallelSCSIReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPPCIReporter.spreporter", + "path": "SystemProfiler/SPPCIReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPPCIReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPPlatformReporter.spreporter", + "path": "SystemProfiler/SPPlatformReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPPlatformReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPPowerReporter.spreporter", + "path": "SystemProfiler/SPPowerReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPPowerReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPPrefPaneReporter.spreporter", + "path": "SystemProfiler/SPPrefPaneReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPPrefPaneReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPPrintersReporter.spreporter", + "path": "SystemProfiler/SPPrintersReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPPrintersReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPPrintersSoftwareReporter.spreporter", + "path": "SystemProfiler/SPPrintersSoftwareReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPPrintersSoftwareReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPSASReporter.spreporter", + "path": "SystemProfiler/SPSASReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPSASReporter.spreporter/Contents" + } + ] + }, + { + "value": 16, + "name": "SPSerialATAReporter.spreporter", + "path": "SystemProfiler/SPSerialATAReporter.spreporter", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "SystemProfiler/SPSerialATAReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPSPIReporter.spreporter", + "path": "SystemProfiler/SPSPIReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPSPIReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPStartupItemReporter.spreporter", + "path": "SystemProfiler/SPStartupItemReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPStartupItemReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPStorageReporter.spreporter", + "path": "SystemProfiler/SPStorageReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPStorageReporter.spreporter/Contents" + } + ] + }, + { + "value": 12, + "name": "SPSyncReporter.spreporter", + "path": "SystemProfiler/SPSyncReporter.spreporter", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "SystemProfiler/SPSyncReporter.spreporter/Contents" + } + ] + }, + { + "value": 28, + "name": "SPThunderboltReporter.spreporter", + "path": "SystemProfiler/SPThunderboltReporter.spreporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "SystemProfiler/SPThunderboltReporter.spreporter/Contents" + } + ] + }, + { + "value": 8, + "name": "SPUniversalAccessReporter.spreporter", + "path": "SystemProfiler/SPUniversalAccessReporter.spreporter", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "SystemProfiler/SPUniversalAccessReporter.spreporter/Contents" + } + ] + }, + { + "value": 40, + "name": "SPUSBReporter.spreporter", + "path": "SystemProfiler/SPUSBReporter.spreporter", + "children": [ + { + "value": 40, + "name": "Contents", + "path": "SystemProfiler/SPUSBReporter.spreporter/Contents" + } + ] + }, + { + "value": 28, + "name": "SPWWANReporter.spreporter", + "path": "SystemProfiler/SPWWANReporter.spreporter", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "SystemProfiler/SPWWANReporter.spreporter/Contents" + } + ] + } + ] + }, + { + "value": 9608, + "name": "Tcl", + "path": "Tcl", + "children": [ + { + "value": 3568, + "name": "8.4", + "path": "Tcl/8.4", + "children": [ + { + "value": 156, + "name": "expect5.45", + "path": "Tcl/8.4/expect5.45" + }, + { + "value": 28, + "name": "Ffidl0.6.1", + "path": "Tcl/8.4/Ffidl0.6.1" + }, + { + "value": 784, + "name": "Img1.4", + "path": "Tcl/8.4/Img1.4" + }, + { + "value": 88, + "name": "itcl3.4", + "path": "Tcl/8.4/itcl3.4" + }, + { + "value": 24, + "name": "itk3.4", + "path": "Tcl/8.4/itk3.4" + }, + { + "value": 28, + "name": "Memchan2.2.1", + "path": "Tcl/8.4/Memchan2.2.1" + }, + { + "value": 228, + "name": "Mk4tcl2.4.9.7", + "path": "Tcl/8.4/Mk4tcl2.4.9.7" + }, + { + "value": 96, + "name": "QuickTimeTcl3.2", + "path": "Tcl/8.4/QuickTimeTcl3.2" + }, + { + "value": 196, + "name": "snack2.2", + "path": "Tcl/8.4/snack2.2" + }, + { + "value": 24, + "name": "tbcload1.7", + "path": "Tcl/8.4/tbcload1.7" + }, + { + "value": 76, + "name": "tclAE2.0.5", + "path": "Tcl/8.4/tclAE2.0.5" + }, + { + "value": 20, + "name": "Tclapplescript1.0", + "path": "Tcl/8.4/Tclapplescript1.0" + }, + { + "value": 56, + "name": "Tcldom2.6", + "path": "Tcl/8.4/Tcldom2.6" + }, + { + "value": 56, + "name": "tcldomxml2.6", + "path": "Tcl/8.4/tcldomxml2.6" + }, + { + "value": 108, + "name": "Tclexpat2.6", + "path": "Tcl/8.4/Tclexpat2.6" + }, + { + "value": 16, + "name": "Tclresource1.1.2", + "path": "Tcl/8.4/Tclresource1.1.2" + }, + { + "value": 288, + "name": "tclx8.4", + "path": "Tcl/8.4/tclx8.4" + }, + { + "value": 60, + "name": "Tclxml2.6", + "path": "Tcl/8.4/Tclxml2.6" + }, + { + "value": 20, + "name": "Tclxslt2.6", + "path": "Tcl/8.4/Tclxslt2.6" + }, + { + "value": 396, + "name": "tdom0.8.3", + "path": "Tcl/8.4/tdom0.8.3" + }, + { + "value": 80, + "name": "thread2.6.6", + "path": "Tcl/8.4/thread2.6.6" + }, + { + "value": 68, + "name": "Tktable2.10", + "path": "Tcl/8.4/Tktable2.10" + }, + { + "value": 36, + "name": "tls1.6.1", + "path": "Tcl/8.4/tls1.6.1" + }, + { + "value": 32, + "name": "tnc0.3.0", + "path": "Tcl/8.4/tnc0.3.0" + }, + { + "value": 180, + "name": "treectrl2.2.10", + "path": "Tcl/8.4/treectrl2.2.10" + }, + { + "value": 120, + "name": "Trf2.1.4", + "path": "Tcl/8.4/Trf2.1.4" + }, + { + "value": 108, + "name": "vfs1.4.1", + "path": "Tcl/8.4/vfs1.4.1" + }, + { + "value": 196, + "name": "xotcl1.6.6", + "path": "Tcl/8.4/xotcl1.6.6" + } + ] + }, + { + "value": 3384, + "name": "8.5", + "path": "Tcl/8.5", + "children": [ + { + "value": 156, + "name": "expect5.45", + "path": "Tcl/8.5/expect5.45" + }, + { + "value": 32, + "name": "Ffidl0.6.1", + "path": "Tcl/8.5/Ffidl0.6.1" + }, + { + "value": 972, + "name": "Img1.4", + "path": "Tcl/8.5/Img1.4" + }, + { + "value": 88, + "name": "itcl3.4", + "path": "Tcl/8.5/itcl3.4" + }, + { + "value": 44, + "name": "itk3.4", + "path": "Tcl/8.5/itk3.4" + }, + { + "value": 32, + "name": "Memchan2.2.1", + "path": "Tcl/8.5/Memchan2.2.1" + }, + { + "value": 228, + "name": "Mk4tcl2.4.9.7", + "path": "Tcl/8.5/Mk4tcl2.4.9.7" + }, + { + "value": 24, + "name": "tbcload1.7", + "path": "Tcl/8.5/tbcload1.7" + }, + { + "value": 76, + "name": "tclAE2.0.5", + "path": "Tcl/8.5/tclAE2.0.5" + }, + { + "value": 56, + "name": "Tcldom2.6", + "path": "Tcl/8.5/Tcldom2.6" + }, + { + "value": 56, + "name": "tcldomxml2.6", + "path": "Tcl/8.5/tcldomxml2.6" + }, + { + "value": 108, + "name": "Tclexpat2.6", + "path": "Tcl/8.5/Tclexpat2.6" + }, + { + "value": 336, + "name": "tclx8.4", + "path": "Tcl/8.5/tclx8.4" + }, + { + "value": 60, + "name": "Tclxml2.6", + "path": "Tcl/8.5/Tclxml2.6" + }, + { + "value": 20, + "name": "Tclxslt2.6", + "path": "Tcl/8.5/Tclxslt2.6" + }, + { + "value": 400, + "name": "tdom0.8.3", + "path": "Tcl/8.5/tdom0.8.3" + }, + { + "value": 80, + "name": "thread2.6.6", + "path": "Tcl/8.5/thread2.6.6" + }, + { + "value": 124, + "name": "Tktable2.10", + "path": "Tcl/8.5/Tktable2.10" + }, + { + "value": 36, + "name": "tls1.6.1", + "path": "Tcl/8.5/tls1.6.1" + }, + { + "value": 32, + "name": "tnc0.3.0", + "path": "Tcl/8.5/tnc0.3.0" + }, + { + "value": 120, + "name": "Trf2.1.4", + "path": "Tcl/8.5/Trf2.1.4" + }, + { + "value": 108, + "name": "vfs1.4.1", + "path": "Tcl/8.5/vfs1.4.1" + }, + { + "value": 196, + "name": "xotcl1.6.6", + "path": "Tcl/8.5/xotcl1.6.6" + } + ] + }, + { + "value": 80, + "name": "bin", + "path": "Tcl/bin" + }, + { + "value": 224, + "name": "bwidget1.9.1", + "path": "Tcl/bwidget1.9.1", + "children": [ + { + "value": 100, + "name": "images", + "path": "Tcl/bwidget1.9.1/images" + }, + { + "value": 0, + "name": "lang", + "path": "Tcl/bwidget1.9.1/lang" + } + ] + }, + { + "value": 324, + "name": "iwidgets4.0.2", + "path": "Tcl/iwidgets4.0.2", + "children": [ + { + "value": 324, + "name": "scripts", + "path": "Tcl/iwidgets4.0.2/scripts" + } + ] + }, + { + "value": 40, + "name": "sqlite3", + "path": "Tcl/sqlite3" + }, + { + "value": 1456, + "name": "tcllib1.12", + "path": "Tcl/tcllib1.12", + "children": [ + { + "value": 8, + "name": "aes", + "path": "Tcl/tcllib1.12/aes" + }, + { + "value": 16, + "name": "amazon-s3", + "path": "Tcl/tcllib1.12/amazon-s3" + }, + { + "value": 12, + "name": "asn", + "path": "Tcl/tcllib1.12/asn" + }, + { + "value": 0, + "name": "base32", + "path": "Tcl/tcllib1.12/base32" + }, + { + "value": 0, + "name": "base64", + "path": "Tcl/tcllib1.12/base64" + }, + { + "value": 8, + "name": "bee", + "path": "Tcl/tcllib1.12/bee" + }, + { + "value": 16, + "name": "bench", + "path": "Tcl/tcllib1.12/bench" + }, + { + "value": 8, + "name": "bibtex", + "path": "Tcl/tcllib1.12/bibtex" + }, + { + "value": 12, + "name": "blowfish", + "path": "Tcl/tcllib1.12/blowfish" + }, + { + "value": 0, + "name": "cache", + "path": "Tcl/tcllib1.12/cache" + }, + { + "value": 8, + "name": "cmdline", + "path": "Tcl/tcllib1.12/cmdline" + }, + { + "value": 16, + "name": "comm", + "path": "Tcl/tcllib1.12/comm" + }, + { + "value": 0, + "name": "control", + "path": "Tcl/tcllib1.12/control" + }, + { + "value": 0, + "name": "coroutine", + "path": "Tcl/tcllib1.12/coroutine" + }, + { + "value": 12, + "name": "counter", + "path": "Tcl/tcllib1.12/counter" + }, + { + "value": 8, + "name": "crc", + "path": "Tcl/tcllib1.12/crc" + }, + { + "value": 8, + "name": "csv", + "path": "Tcl/tcllib1.12/csv" + }, + { + "value": 24, + "name": "des", + "path": "Tcl/tcllib1.12/des" + }, + { + "value": 36, + "name": "dns", + "path": "Tcl/tcllib1.12/dns" + }, + { + "value": 0, + "name": "docstrip", + "path": "Tcl/tcllib1.12/docstrip" + }, + { + "value": 44, + "name": "doctools", + "path": "Tcl/tcllib1.12/doctools" + }, + { + "value": 8, + "name": "doctools2base", + "path": "Tcl/tcllib1.12/doctools2base" + }, + { + "value": 12, + "name": "doctools2idx", + "path": "Tcl/tcllib1.12/doctools2idx" + }, + { + "value": 12, + "name": "doctools2toc", + "path": "Tcl/tcllib1.12/doctools2toc" + }, + { + "value": 36, + "name": "fileutil", + "path": "Tcl/tcllib1.12/fileutil" + }, + { + "value": 16, + "name": "ftp", + "path": "Tcl/tcllib1.12/ftp" + }, + { + "value": 16, + "name": "ftpd", + "path": "Tcl/tcllib1.12/ftpd" + }, + { + "value": 84, + "name": "fumagic", + "path": "Tcl/tcllib1.12/fumagic" + }, + { + "value": 0, + "name": "gpx", + "path": "Tcl/tcllib1.12/gpx" + }, + { + "value": 20, + "name": "grammar_fa", + "path": "Tcl/tcllib1.12/grammar_fa" + }, + { + "value": 8, + "name": "grammar_me", + "path": "Tcl/tcllib1.12/grammar_me" + }, + { + "value": 8, + "name": "grammar_peg", + "path": "Tcl/tcllib1.12/grammar_peg" + }, + { + "value": 12, + "name": "html", + "path": "Tcl/tcllib1.12/html" + }, + { + "value": 12, + "name": "htmlparse", + "path": "Tcl/tcllib1.12/htmlparse" + }, + { + "value": 8, + "name": "http", + "path": "Tcl/tcllib1.12/http" + }, + { + "value": 0, + "name": "ident", + "path": "Tcl/tcllib1.12/ident" + }, + { + "value": 12, + "name": "imap4", + "path": "Tcl/tcllib1.12/imap4" + }, + { + "value": 0, + "name": "inifile", + "path": "Tcl/tcllib1.12/inifile" + }, + { + "value": 0, + "name": "interp", + "path": "Tcl/tcllib1.12/interp" + }, + { + "value": 0, + "name": "irc", + "path": "Tcl/tcllib1.12/irc" + }, + { + "value": 0, + "name": "javascript", + "path": "Tcl/tcllib1.12/javascript" + }, + { + "value": 12, + "name": "jpeg", + "path": "Tcl/tcllib1.12/jpeg" + }, + { + "value": 0, + "name": "json", + "path": "Tcl/tcllib1.12/json" + }, + { + "value": 28, + "name": "ldap", + "path": "Tcl/tcllib1.12/ldap" + }, + { + "value": 20, + "name": "log", + "path": "Tcl/tcllib1.12/log" + }, + { + "value": 0, + "name": "map", + "path": "Tcl/tcllib1.12/map" + }, + { + "value": 12, + "name": "mapproj", + "path": "Tcl/tcllib1.12/mapproj" + }, + { + "value": 140, + "name": "math", + "path": "Tcl/tcllib1.12/math" + }, + { + "value": 8, + "name": "md4", + "path": "Tcl/tcllib1.12/md4" + }, + { + "value": 16, + "name": "md5", + "path": "Tcl/tcllib1.12/md5" + }, + { + "value": 0, + "name": "md5crypt", + "path": "Tcl/tcllib1.12/md5crypt" + }, + { + "value": 36, + "name": "mime", + "path": "Tcl/tcllib1.12/mime" + }, + { + "value": 0, + "name": "multiplexer", + "path": "Tcl/tcllib1.12/multiplexer" + }, + { + "value": 0, + "name": "namespacex", + "path": "Tcl/tcllib1.12/namespacex" + }, + { + "value": 12, + "name": "ncgi", + "path": "Tcl/tcllib1.12/ncgi" + }, + { + "value": 0, + "name": "nmea", + "path": "Tcl/tcllib1.12/nmea" + }, + { + "value": 8, + "name": "nns", + "path": "Tcl/tcllib1.12/nns" + }, + { + "value": 8, + "name": "nntp", + "path": "Tcl/tcllib1.12/nntp" + }, + { + "value": 0, + "name": "ntp", + "path": "Tcl/tcllib1.12/ntp" + }, + { + "value": 8, + "name": "otp", + "path": "Tcl/tcllib1.12/otp" + }, + { + "value": 48, + "name": "page", + "path": "Tcl/tcllib1.12/page" + }, + { + "value": 0, + "name": "pluginmgr", + "path": "Tcl/tcllib1.12/pluginmgr" + }, + { + "value": 0, + "name": "png", + "path": "Tcl/tcllib1.12/png" + }, + { + "value": 8, + "name": "pop3", + "path": "Tcl/tcllib1.12/pop3" + }, + { + "value": 8, + "name": "pop3d", + "path": "Tcl/tcllib1.12/pop3d" + }, + { + "value": 8, + "name": "profiler", + "path": "Tcl/tcllib1.12/profiler" + }, + { + "value": 72, + "name": "pt", + "path": "Tcl/tcllib1.12/pt" + }, + { + "value": 0, + "name": "rc4", + "path": "Tcl/tcllib1.12/rc4" + }, + { + "value": 0, + "name": "rcs", + "path": "Tcl/tcllib1.12/rcs" + }, + { + "value": 12, + "name": "report", + "path": "Tcl/tcllib1.12/report" + }, + { + "value": 8, + "name": "rest", + "path": "Tcl/tcllib1.12/rest" + }, + { + "value": 16, + "name": "ripemd", + "path": "Tcl/tcllib1.12/ripemd" + }, + { + "value": 8, + "name": "sasl", + "path": "Tcl/tcllib1.12/sasl" + }, + { + "value": 24, + "name": "sha1", + "path": "Tcl/tcllib1.12/sha1" + }, + { + "value": 0, + "name": "simulation", + "path": "Tcl/tcllib1.12/simulation" + }, + { + "value": 8, + "name": "smtpd", + "path": "Tcl/tcllib1.12/smtpd" + }, + { + "value": 84, + "name": "snit", + "path": "Tcl/tcllib1.12/snit" + }, + { + "value": 0, + "name": "soundex", + "path": "Tcl/tcllib1.12/soundex" + }, + { + "value": 12, + "name": "stooop", + "path": "Tcl/tcllib1.12/stooop" + }, + { + "value": 48, + "name": "stringprep", + "path": "Tcl/tcllib1.12/stringprep" + }, + { + "value": 156, + "name": "struct", + "path": "Tcl/tcllib1.12/struct" + }, + { + "value": 0, + "name": "tar", + "path": "Tcl/tcllib1.12/tar" + }, + { + "value": 24, + "name": "tepam", + "path": "Tcl/tcllib1.12/tepam" + }, + { + "value": 0, + "name": "term", + "path": "Tcl/tcllib1.12/term" + }, + { + "value": 52, + "name": "textutil", + "path": "Tcl/tcllib1.12/textutil" + }, + { + "value": 0, + "name": "tie", + "path": "Tcl/tcllib1.12/tie" + }, + { + "value": 8, + "name": "tiff", + "path": "Tcl/tcllib1.12/tiff" + }, + { + "value": 0, + "name": "transfer", + "path": "Tcl/tcllib1.12/transfer" + }, + { + "value": 0, + "name": "treeql", + "path": "Tcl/tcllib1.12/treeql" + }, + { + "value": 0, + "name": "uev", + "path": "Tcl/tcllib1.12/uev" + }, + { + "value": 8, + "name": "units", + "path": "Tcl/tcllib1.12/units" + }, + { + "value": 8, + "name": "uri", + "path": "Tcl/tcllib1.12/uri" + }, + { + "value": 0, + "name": "uuid", + "path": "Tcl/tcllib1.12/uuid" + }, + { + "value": 0, + "name": "virtchannel_base", + "path": "Tcl/tcllib1.12/virtchannel_base" + }, + { + "value": 0, + "name": "virtchannel_core", + "path": "Tcl/tcllib1.12/virtchannel_core" + }, + { + "value": 0, + "name": "virtchannel_transform", + "path": "Tcl/tcllib1.12/virtchannel_transform" + }, + { + "value": 16, + "name": "wip", + "path": "Tcl/tcllib1.12/wip" + }, + { + "value": 12, + "name": "yaml", + "path": "Tcl/tcllib1.12/yaml" + } + ] + }, + { + "value": 60, + "name": "tclsoap1.6.8", + "path": "Tcl/tclsoap1.6.8", + "children": [ + { + "value": 0, + "name": "interop", + "path": "Tcl/tclsoap1.6.8/interop" + } + ] + }, + { + "value": 56, + "name": "tkcon2.6", + "path": "Tcl/tkcon2.6" + }, + { + "value": 412, + "name": "tklib0.5", + "path": "Tcl/tklib0.5", + "children": [ + { + "value": 0, + "name": "autoscroll", + "path": "Tcl/tklib0.5/autoscroll" + }, + { + "value": 8, + "name": "canvas", + "path": "Tcl/tklib0.5/canvas" + }, + { + "value": 8, + "name": "chatwidget", + "path": "Tcl/tklib0.5/chatwidget" + }, + { + "value": 28, + "name": "controlwidget", + "path": "Tcl/tklib0.5/controlwidget" + }, + { + "value": 0, + "name": "crosshair", + "path": "Tcl/tklib0.5/crosshair" + }, + { + "value": 8, + "name": "ctext", + "path": "Tcl/tklib0.5/ctext" + }, + { + "value": 0, + "name": "cursor", + "path": "Tcl/tklib0.5/cursor" + }, + { + "value": 0, + "name": "datefield", + "path": "Tcl/tklib0.5/datefield" + }, + { + "value": 24, + "name": "diagrams", + "path": "Tcl/tklib0.5/diagrams" + }, + { + "value": 0, + "name": "getstring", + "path": "Tcl/tklib0.5/getstring" + }, + { + "value": 0, + "name": "history", + "path": "Tcl/tklib0.5/history" + }, + { + "value": 24, + "name": "ico", + "path": "Tcl/tklib0.5/ico" + }, + { + "value": 8, + "name": "ipentry", + "path": "Tcl/tklib0.5/ipentry" + }, + { + "value": 16, + "name": "khim", + "path": "Tcl/tklib0.5/khim" + }, + { + "value": 20, + "name": "menubar", + "path": "Tcl/tklib0.5/menubar" + }, + { + "value": 16, + "name": "ntext", + "path": "Tcl/tklib0.5/ntext" + }, + { + "value": 48, + "name": "plotchart", + "path": "Tcl/tklib0.5/plotchart" + }, + { + "value": 8, + "name": "style", + "path": "Tcl/tklib0.5/style" + }, + { + "value": 0, + "name": "swaplist", + "path": "Tcl/tklib0.5/swaplist" + }, + { + "value": 148, + "name": "tablelist", + "path": "Tcl/tklib0.5/tablelist" + }, + { + "value": 8, + "name": "tkpiechart", + "path": "Tcl/tklib0.5/tkpiechart" + }, + { + "value": 8, + "name": "tooltip", + "path": "Tcl/tklib0.5/tooltip" + }, + { + "value": 32, + "name": "widget", + "path": "Tcl/tklib0.5/widget" + } + ] + } + ] + }, + { + "value": 80, + "name": "TextEncodings", + "path": "TextEncodings", + "children": [ + { + "value": 0, + "name": "ArabicEncodings.bundle", + "path": "TextEncodings/ArabicEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/ArabicEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "CentralEuropean Encodings.bundle", + "path": "TextEncodings/CentralEuropean Encodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/CentralEuropean Encodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "ChineseEncodings Supplement.bundle", + "path": "TextEncodings/ChineseEncodings Supplement.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/ChineseEncodings Supplement.bundle/Contents" + } + ] + }, + { + "value": 28, + "name": "ChineseEncodings.bundle", + "path": "TextEncodings/ChineseEncodings.bundle", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "TextEncodings/ChineseEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "CoreEncodings.bundle", + "path": "TextEncodings/CoreEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/CoreEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "CyrillicEncodings.bundle", + "path": "TextEncodings/CyrillicEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/CyrillicEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "GreekEncodings.bundle", + "path": "TextEncodings/GreekEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/GreekEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "HebrewEncodings.bundle", + "path": "TextEncodings/HebrewEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/HebrewEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "IndicEncodings.bundle", + "path": "TextEncodings/IndicEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/IndicEncodings.bundle/Contents" + } + ] + }, + { + "value": 20, + "name": "JapaneseEncodings.bundle", + "path": "TextEncodings/JapaneseEncodings.bundle", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "TextEncodings/JapaneseEncodings.bundle/Contents" + } + ] + }, + { + "value": 16, + "name": "KoreanEncodings.bundle", + "path": "TextEncodings/KoreanEncodings.bundle", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "TextEncodings/KoreanEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "SymbolEncodings.bundle", + "path": "TextEncodings/SymbolEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/SymbolEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "ThaiEncodings.bundle", + "path": "TextEncodings/ThaiEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/ThaiEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "TurkishEncodings.bundle", + "path": "TextEncodings/TurkishEncodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/TurkishEncodings.bundle/Contents" + } + ] + }, + { + "value": 16, + "name": "UnicodeEncodings.bundle", + "path": "TextEncodings/UnicodeEncodings.bundle", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "TextEncodings/UnicodeEncodings.bundle/Contents" + } + ] + }, + { + "value": 0, + "name": "WesternLanguage Encodings.bundle", + "path": "TextEncodings/WesternLanguage Encodings.bundle", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "TextEncodings/WesternLanguage Encodings.bundle/Contents" + } + ] + } + ] + }, + { + "value": 600, + "name": "UserEventPlugins", + "path": "UserEventPlugins", + "children": [ + { + "value": 60, + "name": "ACRRDaemon.plugin", + "path": "UserEventPlugins/ACRRDaemon.plugin", + "children": [ + { + "value": 60, + "name": "Contents", + "path": "UserEventPlugins/ACRRDaemon.plugin/Contents" + } + ] + }, + { + "value": 16, + "name": "AirPortUserAgent.plugin", + "path": "UserEventPlugins/AirPortUserAgent.plugin", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "UserEventPlugins/AirPortUserAgent.plugin/Contents" + } + ] + }, + { + "value": 0, + "name": "alfUIplugin.plugin", + "path": "UserEventPlugins/alfUIplugin.plugin", + "children": [ + { + "value": 0, + "name": "Contents", + "path": "UserEventPlugins/alfUIplugin.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "AppleHIDMouseAgent.plugin", + "path": "UserEventPlugins/AppleHIDMouseAgent.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/AppleHIDMouseAgent.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "AssistantUEA.plugin", + "path": "UserEventPlugins/AssistantUEA.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/AssistantUEA.plugin/Contents" + } + ] + }, + { + "value": 16, + "name": "AutoTimeZone.plugin", + "path": "UserEventPlugins/AutoTimeZone.plugin", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "UserEventPlugins/AutoTimeZone.plugin/Contents" + } + ] + }, + { + "value": 20, + "name": "BluetoothUserAgent-Plugin.plugin", + "path": "UserEventPlugins/BluetoothUserAgent-Plugin.plugin", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "UserEventPlugins/BluetoothUserAgent-Plugin.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "BonjourEvents.plugin", + "path": "UserEventPlugins/BonjourEvents.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/BonjourEvents.plugin/Contents" + } + ] + }, + { + "value": 16, + "name": "BTMMPortInUseAgent.plugin", + "path": "UserEventPlugins/BTMMPortInUseAgent.plugin", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "UserEventPlugins/BTMMPortInUseAgent.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "CalendarMonitor.plugin", + "path": "UserEventPlugins/CalendarMonitor.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/CalendarMonitor.plugin/Contents" + } + ] + }, + { + "value": 88, + "name": "CaptiveSystemAgent.plugin", + "path": "UserEventPlugins/CaptiveSystemAgent.plugin", + "children": [ + { + "value": 88, + "name": "Contents", + "path": "UserEventPlugins/CaptiveSystemAgent.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "CaptiveUserAgent.plugin", + "path": "UserEventPlugins/CaptiveUserAgent.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/CaptiveUserAgent.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.bonjour.plugin", + "path": "UserEventPlugins/com.apple.bonjour.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.bonjour.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.cfnotification.plugin", + "path": "UserEventPlugins/com.apple.cfnotification.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.cfnotification.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.diskarbitration.plugin", + "path": "UserEventPlugins/com.apple.diskarbitration.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.diskarbitration.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.dispatch.vfs.plugin", + "path": "UserEventPlugins/com.apple.dispatch.vfs.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.dispatch.vfs.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "com.apple.fsevents.matching.plugin", + "path": "UserEventPlugins/com.apple.fsevents.matching.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/com.apple.fsevents.matching.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.iokit.matching.plugin", + "path": "UserEventPlugins/com.apple.iokit.matching.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.iokit.matching.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.KeyStore.plugin", + "path": "UserEventPlugins/com.apple.KeyStore.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.KeyStore.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.launchd.helper.plugin", + "path": "UserEventPlugins/com.apple.launchd.helper.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.launchd.helper.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.locationd.events.plugin", + "path": "UserEventPlugins/com.apple.locationd.events.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.locationd.events.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.notifyd.matching.plugin", + "path": "UserEventPlugins/com.apple.notifyd.matching.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.notifyd.matching.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.opendirectory.matching.plugin", + "path": "UserEventPlugins/com.apple.opendirectory.matching.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.opendirectory.matching.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "com.apple.rcdevent.matching.plugin", + "path": "UserEventPlugins/com.apple.rcdevent.matching.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/com.apple.rcdevent.matching.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.reachability.plugin", + "path": "UserEventPlugins/com.apple.reachability.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.reachability.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.systemconfiguration.plugin", + "path": "UserEventPlugins/com.apple.systemconfiguration.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.systemconfiguration.plugin/Contents" + } + ] + }, + { + "value": 44, + "name": "com.apple.telemetry.plugin", + "path": "UserEventPlugins/com.apple.telemetry.plugin", + "children": [ + { + "value": 44, + "name": "Contents", + "path": "UserEventPlugins/com.apple.telemetry.plugin/Contents" + } + ] + }, + { + "value": 24, + "name": "com.apple.time.plugin", + "path": "UserEventPlugins/com.apple.time.plugin", + "children": [ + { + "value": 24, + "name": "Contents", + "path": "UserEventPlugins/com.apple.time.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "com.apple.TimeMachine.plugin", + "path": "UserEventPlugins/com.apple.TimeMachine.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/com.apple.TimeMachine.plugin/Contents" + } + ] + }, + { + "value": 20, + "name": "com.apple.TimeMachine.System.plugin", + "path": "UserEventPlugins/com.apple.TimeMachine.System.plugin", + "children": [ + { + "value": 20, + "name": "Contents", + "path": "UserEventPlugins/com.apple.TimeMachine.System.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "com.apple.universalaccess.events.plugin", + "path": "UserEventPlugins/com.apple.universalaccess.events.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/com.apple.universalaccess.events.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "com.apple.usernotificationcenter.matching.plugin", + "path": "UserEventPlugins/com.apple.usernotificationcenter.matching.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/com.apple.usernotificationcenter.matching.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "com.apple.WorkstationService.plugin", + "path": "UserEventPlugins/com.apple.WorkstationService.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/com.apple.WorkstationService.plugin/Contents" + } + ] + }, + { + "value": 28, + "name": "EAPOLMonitor.plugin", + "path": "UserEventPlugins/EAPOLMonitor.plugin", + "children": [ + { + "value": 28, + "name": "Contents", + "path": "UserEventPlugins/EAPOLMonitor.plugin/Contents" + } + ] + }, + { + "value": 8, + "name": "GSSNotificationForwarder.plugin", + "path": "UserEventPlugins/GSSNotificationForwarder.plugin", + "children": [ + { + "value": 8, + "name": "Contents", + "path": "UserEventPlugins/GSSNotificationForwarder.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "LocationMenu.plugin", + "path": "UserEventPlugins/LocationMenu.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/LocationMenu.plugin/Contents" + } + ] + }, + { + "value": 12, + "name": "PrinterMonitor.plugin", + "path": "UserEventPlugins/PrinterMonitor.plugin", + "children": [ + { + "value": 12, + "name": "Contents", + "path": "UserEventPlugins/PrinterMonitor.plugin/Contents" + } + ] + }, + { + "value": 16, + "name": "SCMonitor.plugin", + "path": "UserEventPlugins/SCMonitor.plugin", + "children": [ + { + "value": 16, + "name": "Contents", + "path": "UserEventPlugins/SCMonitor.plugin/Contents" + } + ] + } + ] + }, + { + "value": 536, + "name": "Video", + "path": "Video", + "children": [ + { + "value": 536, + "name": "Plug-Ins", + "path": "Video/Plug-Ins", + "children": [ + { + "value": 536, + "name": "AppleProResCodec.bundle", + "path": "Video/Plug-Ins/AppleProResCodec.bundle" + } + ] + } + ] + }, + { + "value": 272, + "name": "WidgetResources", + "path": "WidgetResources", + "children": [ + { + "value": 16, + "name": ".parsers", + "path": "WidgetResources/.parsers" + }, + { + "value": 172, + "name": "AppleClasses", + "path": "WidgetResources/AppleClasses", + "children": [ + { + "value": 156, + "name": "Images", + "path": "WidgetResources/AppleClasses/Images" + } + ] + }, + { + "value": 0, + "name": "AppleParser", + "path": "WidgetResources/AppleParser" + }, + { + "value": 48, + "name": "button", + "path": "WidgetResources/button" + }, + { + "value": 32, + "name": "ibutton", + "path": "WidgetResources/ibutton" + } + ] + } +] \ No newline at end of file diff --git a/json/weibo.json b/json/weibo.json new file mode 100644 index 000000000..3c0c0d691 --- /dev/null +++ b/json/weibo.json @@ -0,0 +1 @@ +[[{"name": "", "symbolSize": 5, "draggable": "False", "value": 1, "category": "", "label": {"normal": {"show": "True"}}}, {"name": "Camel3942", "symbolSize": 5, "draggable": "False", "value": 1, "category": "Camel3942", "label": {"normal": {"show": "True"}}}, {"name": "Christinez", "symbolSize": 13, "draggable": "False", "value": 7, "category": "Christinez", "label": {"normal": {"show": "True"}}}, {"name": "JoannaBlue", "symbolSize": 5, "draggable": "False", "value": 1, "category": "JoannaBlue", "label": {"normal": {"show": "True"}}}, {"name": "Michael-Cheung-", "symbolSize": 5, "draggable": "False", "value": 1, "category": "Michael-Cheung-", "label": {"normal": {"show": "True"}}}, {"name": "NKmilitaryStudies", "symbolSize": 5, "draggable": "False", "value": 1, "category": "NKmilitaryStudies", "label": {"normal": {"show": "True"}}}, {"name": "Syfannn", "symbolSize": 5, "draggable": "False", "value": 1, "category": "Syfannn", "label": {"normal": {"show": "True"}}}, {"name": "Tiger公子", "symbolSize": 13, "draggable": "False", "value": 7, "category": "Tiger公子", "label": {"normal": {"show": "True"}}}, {"name": "VeryE", "symbolSize": 5, "draggable": "False", "value": 1, "category": "VeryE", "label": {"normal": {"show": "True"}}}, {"name": "X_iao樓", "symbolSize": 12, "draggable": "False", "value": 6, "category": "X_iao樓", "label": {"normal": {"show": "True"}}}, {"name": "Xiao-斌杰", "symbolSize": 5, "draggable": "False", "value": 1, "category": "Xiao-斌杰", "label": {"normal": {"show": "True"}}}, {"name": "_nearly转1", "symbolSize": 5, "draggable": "False", "value": 1, "category": "_nearly转1", "label": {"normal": {"show": "True"}}}, {"name": "lfx160219", "symbolSize": 14, "draggable": "False", "value": 8, "category": "lfx160219", "label": {"normal": {"show": "True"}}}, {"name": "offfarmworkes2", "symbolSize": 5, "draggable": "False", "value": 1, "category": "offfarmworkes2", "label": {"normal": {"show": "True"}}}, {"name": "sazen", "symbolSize": 5, "draggable": "False", "value": 1, "category": "sazen", "label": {"normal": {"show": "True"}}}, {"name": "stephen1999c", "symbolSize": 5, "draggable": "False", "value": 1, "category": "stephen1999c", "label": {"normal": {"show": "True"}}}, {"name": "w新晴w", "symbolSize": 5, "draggable": "False", "value": 1, "category": "w新晴w", "label": {"normal": {"show": "True"}}}, {"name": "xHao晓灏", "symbolSize": 8, "draggable": "False", "value": 2, "category": "xHao晓灏", "label": {"normal": {"show": "True"}}}, {"name": "上局沪段_沪", "symbolSize": 5, "draggable": "False", "value": 1, "category": "上局沪段_沪", "label": {"normal": {"show": "True"}}}, {"name": "中出宪政柏拉图", "symbolSize": 12, "draggable": "False", "value": 5, "category": "中出宪政柏拉图", "label": {"normal": {"show": "True"}}}, {"name": "中华龙会", "symbolSize": 5, "draggable": "False", "value": 1, "category": "中华龙会", "label": {"normal": {"show": "True"}}}, {"name": "五十岚空芔", "symbolSize": 5, "draggable": "False", "value": 1, "category": "五十岚空芔", "label": {"normal": {"show": "True"}}}, {"name": "京城吃货日记", "symbolSize": 14, "draggable": "False", "value": 9, "category": "京城吃货日记", "label": {"normal": {"show": "True"}}}, {"name": "人形高达奈叶", "symbolSize": 5, "draggable": "False", "value": 1, "category": "人形高达奈叶", "label": {"normal": {"show": "True"}}}, {"name": "优质羊毛", "symbolSize": 8, "draggable": "False", "value": 2, "category": "优质羊毛", "label": {"normal": {"show": "True"}}}, {"name": "加菲杰克", "symbolSize": 12, "draggable": "False", "value": 6, "category": "加菲杰克", "label": {"normal": {"show": "True"}}}, {"name": "北京金戈戈", "symbolSize": 11, "draggable": "False", "value": 4, "category": "北京金戈戈", "label": {"normal": {"show": "True"}}}, {"name": "南迦巴瓦的晨曦", "symbolSize": 5, "draggable": "False", "value": 1, "category": "南迦巴瓦的晨曦", "label": {"normal": {"show": "True"}}}, {"name": "吉四六", "symbolSize": 12, "draggable": "False", "value": 6, "category": "吉四六", "label": {"normal": {"show": "True"}}}, {"name": "喷嚏网铂程", "symbolSize": 16, "draggable": "False", "value": 15, "category": "喷嚏网铂程", "label": {"normal": {"show": "True"}}}, {"name": "嗨哥苏大少", "symbolSize": 5, "draggable": "False", "value": 1, "category": "嗨哥苏大少", "label": {"normal": {"show": "True"}}}, {"name": "堕落熊猫001", "symbolSize": 13, "draggable": "False", "value": 7, "category": "堕落熊猫001", "label": {"normal": {"show": "True"}}}, {"name": "夏至蟲之音", "symbolSize": 5, "draggable": "False", "value": 1, "category": "夏至蟲之音", "label": {"normal": {"show": "True"}}}, {"name": "天天越野跑", "symbolSize": 5, "draggable": "False", "value": 1, "category": "天天越野跑", "label": {"normal": {"show": "True"}}}, {"name": "天水2院张医生", "symbolSize": 9, "draggable": "False", "value": 3, "category": "天水2院张医生", "label": {"normal": {"show": "True"}}}, {"name": "天津王麟", "symbolSize": 5, "draggable": "False", "value": 1, "category": "天津王麟", "label": {"normal": {"show": "True"}}}, {"name": "孟加拉虎的BLOG", "symbolSize": 5, "draggable": "False", "value": 1, "category": "孟加拉虎的BLOG", "label": {"normal": {"show": "True"}}}, {"name": "宋燕不v", "symbolSize": 30, "draggable": "False", "value": 319, "category": "宋燕不v", "label": {"normal": {"show": "True"}}}, {"name": "尧哥讲笑话", "symbolSize": 9, "draggable": "False", "value": 3, "category": "尧哥讲笑话", "label": {"normal": {"show": "True"}}}, {"name": "开老爷车的熊", "symbolSize": 15, "draggable": "False", "value": 10, "category": "开老爷车的熊", "label": {"normal": {"show": "True"}}}, {"name": "张晨初艺术空间", "symbolSize": 30, "draggable": "False", "value": 312, "category": "张晨初艺术空间", "label": {"normal": {"show": "True"}}}, {"name": "张欧亚", "symbolSize": 30, "draggable": "False", "value": 318, "category": "张欧亚", "label": {"normal": {"show": "True"}}}, {"name": "我们认识", "symbolSize": 12, "draggable": "False", "value": 5, "category": "我们认识", "label": {"normal": {"show": "True"}}}, {"name": "战争史研究WHS", "symbolSize": 30, "draggable": "False", "value": 291, "category": "战争史研究WHS", "label": {"normal": {"show": "True"}}}, {"name": "战争史研究WHS:图片评论 http", "symbolSize": 5, "draggable": "False", "value": 1, "category": "战争史研究WHS:图片评论 http", "label": {"normal": {"show": "True"}}}, {"name": "投行老人", "symbolSize": 5, "draggable": "False", "value": 1, "category": "投行老人", "label": {"normal": {"show": "True"}}}, {"name": "换个名字好累人", "symbolSize": 5, "draggable": "False", "value": 1, "category": "换个名字好累人", "label": {"normal": {"show": "True"}}}, {"name": "新浪体育", "symbolSize": 35, "draggable": "False", "value": 875, "category": "新浪体育", "label": {"normal": {"show": "True"}}}, {"name": "方便卫生起效慢", "symbolSize": 15, "draggable": "False", "value": 11, "category": "方便卫生起效慢", "label": {"normal": {"show": "True"}}}, {"name": "无心耳语08", "symbolSize": 5, "draggable": "False", "value": 1, "category": "无心耳语08", "label": {"normal": {"show": "True"}}}, {"name": "暗能量泡泡", "symbolSize": 11, "draggable": "False", "value": 4, "category": "暗能量泡泡", "label": {"normal": {"show": "True"}}}, {"name": "歌手亚东", "symbolSize": 5, "draggable": "False", "value": 1, "category": "歌手亚东", "label": {"normal": {"show": "True"}}}, {"name": "没籽的葡萄好吃", "symbolSize": 11, "draggable": "False", "value": 4, "category": "没籽的葡萄好吃", "label": {"normal": {"show": "True"}}}, {"name": "澳洲李市民", "symbolSize": 8, "draggable": "False", "value": 2, "category": "澳洲李市民", "label": {"normal": {"show": "True"}}}, {"name": "灰狼多样性", "symbolSize": 5, "draggable": "False", "value": 1, "category": "灰狼多样性", "label": {"normal": {"show": "True"}}}, {"name": "爱哟快乐", "symbolSize": 9, "draggable": "False", "value": 3, "category": "爱哟快乐", "label": {"normal": {"show": "True"}}}, {"name": "猫饭P", "symbolSize": 8, "draggable": "False", "value": 2, "category": "猫饭P", "label": {"normal": {"show": "True"}}}, {"name": "猿十三", "symbolSize": 5, "draggable": "False", "value": 1, "category": "猿十三", "label": {"normal": {"show": "True"}}}, {"name": "王唔悦", "symbolSize": 5, "draggable": "False", "value": 1, "category": "王唔悦", "label": {"normal": {"show": "True"}}}, {"name": "相忘于2222", "symbolSize": 11, "draggable": "False", "value": 4, "category": "相忘于2222", "label": {"normal": {"show": "True"}}}, {"name": "简木生--包丰瀛", "symbolSize": 18, "draggable": "False", "value": 19, "category": "简木生--包丰瀛", "label": {"normal": {"show": "True"}}}, {"name": "紫霄时雨_苍穹要塞难民", "symbolSize": 9, "draggable": "False", "value": 3, "category": "紫霄时雨_苍穹要塞难民", "label": {"normal": {"show": "True"}}}, {"name": "紹灝Lam", "symbolSize": 5, "draggable": "False", "value": 1, "category": "紹灝Lam", "label": {"normal": {"show": "True"}}}, {"name": "罗昌平", "symbolSize": 22, "draggable": "False", "value": 58, "category": "罗昌平", "label": {"normal": {"show": "True"}}}, {"name": "耳光赵荒唐", "symbolSize": 15, "draggable": "False", "value": 11, "category": "耳光赵荒唐", "label": {"normal": {"show": "True"}}}, {"name": "肉食者Play", "symbolSize": 5, "draggable": "False", "value": 1, "category": "肉食者Play", "label": {"normal": {"show": "True"}}}, {"name": "胖猪猪呼呼睡", "symbolSize": 12, "draggable": "False", "value": 6, "category": "胖猪猪呼呼睡", "label": {"normal": {"show": "True"}}}, {"name": "花卷沉湎", "symbolSize": 5, "draggable": "False", "value": 1, "category": "花卷沉湎", "label": {"normal": {"show": "True"}}}, {"name": "苗条的小实", "symbolSize": 5, "draggable": "False", "value": 1, "category": "苗条的小实", "label": {"normal": {"show": "True"}}}, {"name": "豆名扬", "symbolSize": 5, "draggable": "False", "value": 1, "category": "豆名扬", "label": {"normal": {"show": "True"}}}, {"name": "过去的老照片", "symbolSize": 8, "draggable": "False", "value": 2, "category": "过去的老照片", "label": {"normal": {"show": "True"}}}, {"name": "远古的刀", "symbolSize": 8, "draggable": "False", "value": 2, "category": "远古的刀", "label": {"normal": {"show": "True"}}}, {"name": "重工组长于彦舒", "symbolSize": 31, "draggable": "False", "value": 378, "category": "重工组长于彦舒", "label": {"normal": {"show": "True"}}}, {"name": "長滒", "symbolSize": 12, "draggable": "False", "value": 5, "category": "長滒", "label": {"normal": {"show": "True"}}}, {"name": "陇上优品-陶磊", "symbolSize": 5, "draggable": "False", "value": 1, "category": "陇上优品-陶磊", "label": {"normal": {"show": "True"}}}, {"name": "降夭除魔齐天大圣", "symbolSize": 11, "draggable": "False", "value": 4, "category": "降夭除魔齐天大圣", "label": {"normal": {"show": "True"}}}, {"name": "马周扬律师", "symbolSize": 5, "draggable": "False", "value": 1, "category": "马周扬律师", "label": {"normal": {"show": "True"}}}, {"name": "鬼面绣裁", "symbolSize": 9, "draggable": "False", "value": 3, "category": "鬼面绣裁", "label": {"normal": {"show": "True"}}}, {"name": "魔都310土匪", "symbolSize": 5, "draggable": "False", "value": 1, "category": "魔都310土匪", "label": {"normal": {"show": "True"}}}, {"name": "麻黑浮云", "symbolSize": 19, "draggable": "False", "value": 29, "category": "麻黑浮云", "label": {"normal": {"show": "True"}}}, {"name": "经济学原理0904", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "于余宇", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "落花满衣", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "破产伍伍陆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "iFandom", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "hai17", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "Gen余根", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "霁月难逢00", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "tingdianle88", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "buyueeeee", "symbolSize": 5, "draggable": "False", "value": 0, "category": "优质羊毛"}, {"name": "7816呵呵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "绵绵绵绵甜", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "假装仁波切糕", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "专卖好酒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "鐵騎如水漫山關", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "头条股票", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "游鱼居士", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "耗社会主义股市羊毛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "我想爬出去", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "月下桃花枝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "鬼面绣裁"}, {"name": "老盆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "隔岸看风景2016", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "FullMetalLyle", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "POPOVISION", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "皓乙_纯", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "小纯是不穿板甲的狂战", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "成翔-同策咨询", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "X一块红布", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "七親萌貨", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "谷子地Dwane", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "Mitsuhide明智", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "风云路漫漫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中华龙会"}, {"name": "镜花水月137", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "慈禧在坟墓里笑死", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张欧亚"}, {"name": "人生录音", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "猫屎洞", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "宝蛋她娘", "symbolSize": 5, "draggable": "False", "value": 0, "category": "北京金戈戈"}, {"name": "魏屹林", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "LAIZHONGYAO", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "酋长喊我回家吃饭", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "乔那个疯子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "YM0518", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "一路并肩而行baby", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "静山观海", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "北京利生体育商厦", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "捆着发木ALT", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "只愿岁月不回头", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "撒旦尖角", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "wu聊a", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "文武书书", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "大雄不太爱说话", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "卓裔人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "过去的老照片"}, {"name": "木_小呆是个死腐宅", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "风雨天骄", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "斯坦家汪汪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "上善若水_waterliker", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "水润嘉华", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "TerryYin_S", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "天高云淡vvv", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "减法生活女子减压生活会馆", "symbolSize": 5, "draggable": "False", "value": 0, "category": ""}, {"name": "吃包子喝水", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "运交华盖2013", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "牵下水拍照", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "站在天桥数车灯儿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Ranyuewan", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "钟颙sz", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "刘广赟卍", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "一支钥匙一把锁", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "霍斯勒阿瑟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "沐之夏吉郎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "冲浪板007", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "彪悍猫妈", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "小马_1623085", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "不读书的撸舔立", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Strong明丶", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Jeff-Chang", "symbolSize": 5, "draggable": "False", "value": 0, "category": "灰狼多样性"}, {"name": "兴盛泰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "生活顺顺利利", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "零崎本心", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "NATUREexploring", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "yx希望", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "大伟MADSam", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "蓝天zjg", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "Daybreak_Canal", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "来自TTY", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "冬马和纱厨", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "地质一郎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "北大白马96613", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "登州笑笑生", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "铁成的幸福生活", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "CDJ37", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "湖南省西瓜甜瓜研究所团支部", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "股民资源QQ719554823", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "我叫照日格图", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "满清十大酷刑", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "琉烟之烬", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "BooM_讽_刺_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "agents博", "symbolSize": 5, "draggable": "False", "value": 0, "category": "NKmilitaryStudies"}, {"name": "暮色柳塘", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "黄俄罗斯志愿兵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "一百五十斤的维洛妮卡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "厐宇峰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "宅心似箭", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS:图片评论 http"}, {"name": "____-------____________", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "甲壳咪殿下", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "edelman葛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "stephen1999c"}, {"name": "Mirko的blog", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "仇玲夕", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "柒vidy", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中出宪政柏拉图"}, {"name": "华府骏苑姜熙健", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "锦衣夜行452", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "seven_罗", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "九河下潲-天子渡口", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "bobbeido", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "开大招时会喵喵叫的friend", "symbolSize": 5, "draggable": "False", "value": 0, "category": "_nearly转1"}, {"name": "止于涂", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "zds小懒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "裸奔老者", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "这个马叔不太冷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "paxl", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "TeslaP100", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "鹿允近衛連隊的黑少领要当牛仔了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "关乎牙齿更关心你", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Wilson老张", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "花果山水帘洞齐天大圣0_0", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "猫团长没有咸鱼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "MR-WANGRX", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "国术促进会吴彬", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "三里寻烟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "东晓0117", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "拉拉菲尔尼兹海格", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Howard_Qian", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "WANGJXseEr", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "诶呀妈呀吓我一跳", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "叫个咩faye", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "机智的大帅逼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "山顶夫子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "parenthesisZ", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "史小臭迷途中寻觅", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "氮气君NegativelyNorm", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "WJHLMM", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "福州摄影菌", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "bywang1", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "单位传达室老张", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "A优喂", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "廆仆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "暖色调的海", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "郑顺天", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "硕爱1篮球阿阿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "永强波家的", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "岁月哥特", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "好想骂你煞笔哦", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "洪涛观点", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "广陵古散", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "韩某89", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "MrBone", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "-胖小子-", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "激素少女陈一水", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "风和日丽1866", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "WeiGuan-Gworld", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "nevermind39", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "夜半幽灵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "超级马力0", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "孙松AT", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "追风少年何大宝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "huangky2013", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Tony老铁呀", "symbolSize": 5, "draggable": "False", "value": 0, "category": "澳洲李市民"}, {"name": "Shawn_River", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "HexFireSea", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "浪剑痕_秋水尽洗天下劫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "walbgt", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "陈_八怪_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "WOCHIHUN", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "叶拂衣_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "鬼面绣裁"}, {"name": "醉生梦死的猫食", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "最近很无聊---", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "BluePadge", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "飛過萬水千山", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "jasonma284", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "坚菓青少年俱乐部", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "剡溪山君", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "千与千寻丶隐", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "头喵的妈吃一身", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "原始超越者2016", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "北辰慢慢跑", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "绿绿绿绿绿到发亮", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "蓝风2019", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "David爱美食", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "通古鬼斯", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "来自熊堡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "北京_彬爷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "花卷沉湎"}, {"name": "噗噜噗噜轰隆隆隆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "傅生-若梦", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "格瓦拉切糕", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "南部炮兵潘", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "财罗湖", "symbolSize": 5, "draggable": "False", "value": 0, "category": "北京金戈戈"}, {"name": "笑看来者", "symbolSize": 5, "draggable": "False", "value": 0, "category": "w新晴w"}, {"name": "用户6101624258", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "孤单一个人去返工II", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "刘志鲲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "阿瑟queen", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "黄一米八二", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "軟Sir你病得不輕為啥還放棄治療", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "捣蛋少年2016", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "watermanlee", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "谢龙1洋", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "幸福就是毛毛雪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "团子桃子的麻麻", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "鋒瘋子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "没事瞎扑腾_勇敢的乱飞_197", "symbolSize": 5, "draggable": "False", "value": 0, "category": "降夭除魔齐天大圣"}, {"name": "九州纹龙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "武人影像", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "飛升法皇嬴曌堃", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "隐隐灵音", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Michael-Cheung-"}, {"name": "Petter大俠", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "清者自來", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "Aresous", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "金城白菜斋", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "烈酒清茶", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "青蛙王子199905", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "NouWl", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "信近言复", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "今天你FGO咸鱼了么", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "和平与蛋黄酱", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "桃子老爹", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Beijingold4", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "D8表情帝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "换个名字好累人"}, {"name": "james7band", "symbolSize": 5, "draggable": "False", "value": 0, "category": "投行老人"}, {"name": "triglyceridecreed", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "东168168168", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "不是宏推大宏推", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "白胖浪浪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "美丽居曹亮", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "鳯逑凰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "邓先渝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "农行小桂圆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "周伯通说话", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "小弟震", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "饽饽瘦了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "西班牙荣", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "卅石矷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "心若善至", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "stlxmsl", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "原子CaoYuan", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "BiBlBa", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "师律伟王", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "冬风吹不走雾", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "李小宝gg", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "yaozo", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "泥四步撒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "风清熙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "旺达不锈钢管道设备", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "小LIU仔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "古俐特", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "带鸡的少侠a", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "暴君T-233", "symbolSize": 5, "draggable": "False", "value": 0, "category": "人形高达奈叶"}, {"name": "MADAO兽-UP", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "汪俊玲_悦宸", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "坠-绝命大番茄", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "WVA亿境战队李嘉炜", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "LP呆啊呆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "未文侯", "symbolSize": 5, "draggable": "False", "value": 0, "category": "我们认识"}, {"name": "黄鹤2016", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "终南金刚", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "CCCCRAZYCAT", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "三尺之上有神明", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "避难所小子爱喝核子可乐", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "慈悲为槐", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "Red-or-Black", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "村头蹲点小流氓", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "秋风旅人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "蒋某people", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Xiao-斌杰"}, {"name": "于贺_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "bmjj777", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "HS_Hanson", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "叫我驴驴就好了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "UNIMET", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "罗叉叉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "方便卫生起效慢"}, {"name": "后仓松鼠", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "activegeneral", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "筑城小铃铛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "功夫查理", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "名字这么难听", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "浪客不行", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "床保社", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "米拉库露", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "换名字也不行", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "监视狂魔沈夜", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "HCHZ2011", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "0ne丶PunCh", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "曜冰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "千年王国2012", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "dgxbill", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "xbftslh", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "那个叫做光的男人真他妈可爱", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "霹雳球球", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "嬉皮笑脸者说", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "Justice_Sum", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "王大大大安", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "光明家具刘志军", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "洪七公--36", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "不记得今天是礼拜几", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "墨子墨子墨子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "古城_tma", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "王小硕的小马甲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Pengtzuchieh", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "就是内个少年", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "瑞新新新新", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "来了来了了了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "老海91816", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "清清美美", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "bsr1983", "symbolSize": 5, "draggable": "False", "value": 0, "category": "澳洲李市民"}, {"name": "陪你疯到天涯海角", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "冷炜", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "饕餮海", "symbolSize": 5, "draggable": "False", "value": 0, "category": "相忘于2222"}, {"name": "RyanTsa0", "symbolSize": 5, "draggable": "False", "value": 0, "category": "X_iao樓"}, {"name": "平生最怕起名字", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "说你酷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中出宪政柏拉图"}, {"name": "鏡妖星影", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "文话中国", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "短昵称-", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "实用格斗", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "oldharry", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "HBG_喵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "知白守黑stock", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "醇淨氺", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "铁笛惊龙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "北京金戈戈"}, {"name": "想去看看世界的小猴子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "风_凌羽", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "snowpanzer", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "传说中滴临时工", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "香暗盈袖", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Gabriel-VN", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "直布罗陀_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "木子东冉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "麓林山人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "大烧饼学炒股", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "架梁公", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "_月亮六便士", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Anson余生", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "光辉岁月0927", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "飞廉窝在小院子里养老", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "我的牛呢", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "阝东更鑫鑫向荣", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "步行者001", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "艾露恩之光", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "-梦魂舞晶-", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "赵不着调调儿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "小德银鳞胸甲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "薄荷够凉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "那山杜鹃bj", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "真正的桐柏英雄", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "秋天的完美生活", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "熬浆糊99", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "李狗嗨ing", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "我与鱼儿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "章海波", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "雨点儿yang", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "九翼龙皇", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "三口一瓶奶", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Christinez"}, {"name": "呆毛哼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Augusttin", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "ERLIANGJO", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "160么么哒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "王师北定FK", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "电击鱼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "胖得有气质", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "茗品呀茗品", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "tang花_fh7", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "魔蟹0080", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "说说我的丑", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "huaxiawolf", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "aeo000000", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "吴宇森影迷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "风起来停不下来", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Syfannn"}, {"name": "李曼青sattvaUranus", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "简单感-悟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "北京金戈戈"}, {"name": "拜访者查子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "伤心云雨8", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Michael刘磊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "饕餮无厌-半部屠龙之术", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "门后的风铃", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "不動的大圖書館Q", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "在一起的围脖", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "妙我居士", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "米衫儿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "plud2005", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "JeremyKevin", "symbolSize": 5, "draggable": "False", "value": 0, "category": "天天越野跑"}, {"name": "无穷的探索", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "爱学习的绿叶子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "tuzixuexi", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "chariotwx", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "取舍时空", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "姚磊-三过七院而不入", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "派大星爱吃锅包肉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "不如一朵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "没有烟了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "入云伤", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "黄禾谷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "平凡746", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "一头土猪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "mogu丫头", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "直抵黄龙府与诸君痛饮尔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "木兰007", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "大连地果", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "八度鱼77", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "流云涛影的空间", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "BOSS大泡泡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "MTbuff", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "五只fffff菌", "symbolSize": 5, "draggable": "False", "value": 0, "category": "降夭除魔齐天大圣"}, {"name": "Cindy是我的", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "九門道", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "DaDaDaDaDaDa灰狼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "努力的萨摩", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "VC火星人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "奔驰配件只售原厂全新", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "孤独的卧龙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "MYS_Parker", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "真同你友缘", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "要酒还是要故事", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "飞云乱度_unntopia", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "拖拉机再垃圾也能拖垃圾H", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "ARS_锋线今天补齐了么", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "约伯少木", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "江心洲的石头", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "信仰铮", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "踏古悠悠", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "关东十二郎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "龍叔論勢", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "小齐与玫瑰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "阳光的小青年123", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "lionshuang", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "剑雨风竹wzp", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "leo快跑_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "霄緰鳴", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "清宇建材", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "IHSAKAH", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "景页的彭", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "子非鱼非子vit", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "萨特5243280580", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Unique斯通", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "信仰之魂之根", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "手自栽", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "霞客遗风", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "天心-月圆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "小凯最爱羊羊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "穿长靴的柴郡猫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "看客二两七", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "王小签", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "自古秃顶多薄命", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "陇南老代", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "HERO-熊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "手机用户2011685586", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "披着虎皮的羊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "竹林之闲七", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "坦帕湾魔鬼鱼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "某气又方又圆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "walmazon", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "RX-78-8", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "balcktomato", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "TroubleKid是MADAO", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "爆炸神教唯我独尊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "一个立派又迷人的营销号手机用户", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "春分大寒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "上局沪段_沪"}, {"name": "曾经依然46", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "柳恒卓", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "适中求对", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "流星弦月", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "黑岛结菜厨", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "鬼男三世", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "牧羽尽人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "北斗之南V", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "自由知新", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "也曾相识0906", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "小鱼妖贤", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "怀风的小号", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "路痴Lee", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "望霆止渴", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "海獭小元帅", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "梦里自在", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "人总要变僵尸", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "做题做到傻星人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "不会结网的蜘蛛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "艾特胖叔叔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "michelle0706", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "中二有治", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "renaissance325", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "山行者不爬山", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "一只饼干熊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Double润-JR", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "海布利的机关枪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "fhqskwwx", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "虚地天高海底行", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "杨术灵的公司是在香港注册的", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "快刀博士", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "阿腿-人活着就是为了式姐", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "李哈喽年抓虫子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "entaro", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "新型的农村人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "远古的刀"}, {"name": "吴地老高", "symbolSize": 5, "draggable": "False", "value": 0, "category": "京城吃货日记"}, {"name": "只愿华丽一次", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "丁库北", "symbolSize": 5, "draggable": "False", "value": 0, "category": "猿十三"}, {"name": "2x2eyes着装变身", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "小钱钱飞来招财进宝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "乐_扬", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "三分音符V", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "神之佩恩", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "小超-唐新", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "雷焰萌虎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "五十岚空芔"}, {"name": "蓝天白云5888", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "大虾本尊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "CJ一个微博", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "阿里海牙科维奇", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中出宪政柏拉图"}, {"name": "清古正华", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "八一魄力", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "worisi_na3", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "用户5989473265", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "沙漠王子82", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "BJ卫东围脖", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "大叔与流浪猫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "单刀126", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "赵伯安", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "all-time-low", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "凌舒韵", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "笨不傻", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "超昂闪存", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "甲古的时代", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "孙润琦最近有点胖啊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "会瘦的兔子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "非典型精彩", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "上海曹凡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "爱哟快乐"}, {"name": "小木木-H", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "曾经日在校园", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "呛呛枪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "ZY真人吉光片羽", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "M菊花的小GI", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "钟涓之", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "weibuloser", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "潘恩豪啊潘恩豪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "天枢道", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "穆sir---", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "剑吹白雪喵喵酱", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "淘气的小福儿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "惊梦时从来不报社", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "成都大河", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "琉璃厂人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "江巴瓜poi", "symbolSize": 5, "draggable": "False", "value": 0, "category": "猫饭P"}, {"name": "偶尔有点帅1988", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "安庆爱慕摄影师阿文", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "破晓劲风", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "EL-bazinga", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "OP牛牛real", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "田字格大人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Yoga_雪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "王唔悦"}, {"name": "牛大腕和羊羔肉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "一路上有你LXING", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "小闫---闫宇航2_167", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "书客的马甲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "廿五廿六", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "嗷嘚儿刘", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "月想夜雫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "猫饭P"}, {"name": "人生装修中的王白薯", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "老哥哥农农", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "山城球长", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "愚忠不中", "symbolSize": 5, "draggable": "False", "value": 0, "category": "豆名扬"}, {"name": "搞一手", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "用户3639916871", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "杨培军ypj", "symbolSize": 5, "draggable": "False", "value": 0, "category": "天津王麟"}, {"name": "命名馆的故事", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "动物凶猛吗", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "拖大林的斯拉机", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Wcqsoil奇", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "-隔壁尛王", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中出宪政柏拉图"}, {"name": "jinguokai", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "樱花突击队", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "笑嘻嘻不是孬东西", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "明月照清疯", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "philosophic_philo", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "-_---17---_-", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "于小文很跋扈", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "更木千秋", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "看你妹夫斯基", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "各路英雄我是炮灰", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Panda加速度", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "变态的小幸福", "symbolSize": 5, "draggable": "False", "value": 0, "category": "京城吃货日记"}, {"name": "云信321312747", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "见习魔王", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "山魈屠魔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "smthpickboy", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "读心术宋_Ssir226", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "糖丶King", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "深圳-0755", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "吹風左", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "霖希默语", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "34X5A7", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "蝶升思26812", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Tony悟空孙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "山里的孩子去砍柴", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "XTG29", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "血红暴鲤魚", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "傲血困意", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "只道是寻常草履虫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "李家老三是藕霸", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "苍天的渔民饥饿的猫", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "宁紫晗f", "symbolSize": 5, "draggable": "False", "value": 0, "category": "陇上优品-陶磊"}, {"name": "Biu--------------", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "ROCK在民大", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "wwwwwww_W", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "黑羽太太薄爷爷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "sazen"}, {"name": "焖猪脚", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "九又十三分之一", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "dengliang100", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "慢慢买4j", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "ORANGE_TULIP_2015__盾构工程", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "女汉子只是多了一那份坚强錟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "赵翼菲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "balestra", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "西瓜大将", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "毛巾在飞翔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "青鸟tw", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "卖蟑螂的小男孩XD", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "盖世英雄_i", "symbolSize": 5, "draggable": "False", "value": 0, "category": "相忘于2222"}, {"name": "找北的时光", "symbolSize": 5, "draggable": "False", "value": 0, "category": "天水2院张医生"}, {"name": "片桂hoho嘎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "雨小农和獭祭鱼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "子-都", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "哥是厦大的", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "买不起早点的门房郑大爷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "MrFopenheart", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "梦佳红人", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "JustForFunDude", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "徐冲dy", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "王霸丑", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "已过期的凤梨罐头", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "果果的妈妈", "symbolSize": 5, "draggable": "False", "value": 0, "category": "lfx160219"}, {"name": "被阳光点燃的小雏菊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "SOLOWINGROCKY", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "不吃萝卜的野生鱼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "Urnotprepared", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "北大十五", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "大漠孤烟平凉", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "messenger16", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "-逐梦令-", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "寒木9740", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "冯某钊", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "大眼李", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "阿特兰蒂斯的飞鸟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "无心耳语08"}, {"name": "顺手牵杨扬", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Hu_子叔叔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "67年生人的记忆碎片", "symbolSize": 5, "draggable": "False", "value": 0, "category": "苗条的小实"}, {"name": "千手捉鸡_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "降夭除魔齐天大圣"}, {"name": "pmzqld", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "我可以咬一口耶", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "浪里秤砣", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "SofayW", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "Very流浪的小拖鞋", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "LSX_N欣", "symbolSize": 5, "draggable": "False", "value": 0, "category": "降夭除魔齐天大圣"}, {"name": "偏不见就叫偏不见", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "castle84", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "IceE_U", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "燃满愿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "风花雪月去", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "开拓者3569", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "一小撮别有用心的小猪在跳舞", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "波灵谷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "饱饱的酸菜君", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "关洪导演", "symbolSize": 5, "draggable": "False", "value": 0, "category": "相忘于2222"}, {"name": "人一定要靠自己", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "老师教案的宝宝", "symbolSize": 5, "draggable": "False", "value": 0, "category": "中出宪政柏拉图"}, {"name": "毛i台钧", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "时间苍窮", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "刘海哲", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "君王板甲胡屠户", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "富怡-宝盈-盈瑞恒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "嗨哥苏大少"}, {"name": "周氏豆沙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "远古的刀"}, {"name": "赵毫毛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "刺猬-的生活", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Digital蚊子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "烈日下的森岛", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "鋈圆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "纪岚挺", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "ParPar2011", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "谁执流素舞青月", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "七绪平门", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "苏乄小溪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "flowtime", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "丿胡丶半仙", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "Cal_liu", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "玉米皮多多", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "二只只", "symbolSize": 5, "draggable": "False", "value": 0, "category": "長滒"}, {"name": "坚心耐苦", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "金粉洒家", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "吉原嗷子手中一碗张屏的面", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "大风起兮谣言飞", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "上下天光一碧万顷", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "弗温居士", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "小小真菌", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "万言不值一杯酒", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "雷电看风云", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "江南岸1217", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "柳培卿", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "马里亚纳的沟", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "DR-pepper大魔王", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "奔跑在路上的小猪哥哥", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "于明乐81489", "symbolSize": 5, "draggable": "False", "value": 0, "category": "肉食者Play"}, {"name": "吃鲸_满脑子打牌", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "流竜馬", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "心雨3266917092", "symbolSize": 5, "draggable": "False", "value": 0, "category": "歌手亚东"}, {"name": "铁的男", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "顺势旺", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "若渝与若耶", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "栖凤山D", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "给美希庆生的P_卡卡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "鱼丸粗面", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "谢乘月", "symbolSize": 5, "draggable": "False", "value": 0, "category": "鬼面绣裁"}, {"name": "Tachikoma1990", "symbolSize": 5, "draggable": "False", "value": 0, "category": "吉四六"}, {"name": "东瓜_DONGGUA", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "秃秃小嘎", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "曲儿wq", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "云自在_安平太", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "萧月御诸", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "茜akane茜", "symbolSize": 5, "draggable": "False", "value": 0, "category": "南迦巴瓦的晨曦"}, {"name": "丘八帮高级会员", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "刘大来律师", "symbolSize": 5, "draggable": "False", "value": 0, "category": "马周扬律师"}, {"name": "李白起", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "zzz洋仔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "竹园纤圆", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "FLAX_圩田经济学安心种地", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "人民舆论V", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "佬俚伺", "symbolSize": 5, "draggable": "False", "value": 0, "category": "孟加拉虎的BLOG"}, {"name": "freeeeekick", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "healt", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "猪头三小队长", "symbolSize": 5, "draggable": "False", "value": 0, "category": "喷嚏网铂程"}, {"name": "小骉007", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "曾经莱克今星敦", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "my686", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "sekino", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "幽径不再悲剧", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "zine692008991", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "JoKer__x1", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "艹丶LOVE丨霸道灬88", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "WS_WBZ", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "MKIII_TROMBE", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "ABCDEFGWA", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "markxhuang", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "何鑫JO", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "可爱卫东", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Sher-Conan", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "TreeHole2017", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "深度脸盲症", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "苍玖染月", "symbolSize": 5, "draggable": "False", "value": 0, "category": "魔都310土匪"}, {"name": "saxon-90", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "苍狼小幻_", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "低碳George", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "一任年华度如禅", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "屯里NNRT", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "黑贝的米兔", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "小葱花饼香辣子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "JoannaBlue"}, {"name": "鑦赟驜鶴", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "罗比巴吉奥", "symbolSize": 5, "draggable": "False", "value": 0, "category": "耳光赵荒唐"}, {"name": "Mr-LeeZL", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "村长一路走好cl", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "阿根廷人小马", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "魔都百姓海幽", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "竹林风雨来了", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "肺想说话", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "AFC-ARS-FANS", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "風痕2017", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "红藕香残玉簟秋allaboutyou", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Eye2eyes", "symbolSize": 5, "draggable": "False", "value": 0, "category": "重工组长于彦舒"}, {"name": "英雄爱听故事", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "起士林不是我开的", "symbolSize": 5, "draggable": "False", "value": 0, "category": "麻黑浮云"}, {"name": "hk2008abc", "symbolSize": 5, "draggable": "False", "value": 0, "category": "张晨初艺术空间"}, {"name": "2017-5serieS", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "showdfg", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Camel3942"}, {"name": "o0勇敢的心0o", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "我是伍味子", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "熊宝-咪", "symbolSize": 5, "draggable": "False", "value": 0, "category": "简木生--包丰瀛"}, {"name": "花贰街", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "Infi2015", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "garfield007", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "爱家庭教师爱篮球爱科比", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "赵家周报", "symbolSize": 5, "draggable": "False", "value": 0, "category": "罗昌平"}, {"name": "海中的小白鲨", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "恩里克", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "西单骆驼", "symbolSize": 5, "draggable": "False", "value": 0, "category": "Tiger公子"}, {"name": "强强187", "symbolSize": 5, "draggable": "False", "value": 0, "category": "战争史研究WHS"}, {"name": "我的威海", "symbolSize": 5, "draggable": "False", "value": 0, "category": "过去的老照片"}, {"name": "吴足道-alaya", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}, {"name": "喜欢YY的城墙鸡", "symbolSize": 5, "draggable": "False", "value": 0, "category": "新浪体育"}], [{"source": "新浪体育", "target": "阿根廷人小马"}, {"source": "新浪体育", "target": "Beijingold4"}, {"source": "麻黑浮云", "target": "X一块红布"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "战争史研究WHS", "target": "小齐与玫瑰"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "陇南老代"}, {"source": "新浪体育", "target": "triglyceridecreed"}, {"source": "战争史研究WHS", "target": "孤独的卧龙"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "赵翼菲"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "蓝风2019"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "ABCDEFGWA"}, {"source": "澳洲李市民", "target": "Tony老铁呀"}, {"source": "战争史研究WHS", "target": "澳洲李市民"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "中出宪政柏拉图", "target": "老师教案的宝宝"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "冬风吹不走雾"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "山行者不爬山"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "栖凤山D"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "孤独的卧龙"}, {"source": "吉四六", "target": "watermanlee"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "那山杜鹃bj"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "陇上优品-陶磊", "target": "宁紫晗f"}, {"source": "天水2院张医生", "target": "陇上优品-陶磊"}, {"source": "暗能量泡泡", "target": "天水2院张医生"}, {"source": "X_iao樓", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "新浪体育", "target": "只愿岁月不回头"}, {"source": "喷嚏网铂程", "target": "天高云淡vvv"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "罗昌平", "target": "tingdianle88"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "中华龙会", "target": "风云路漫漫"}, {"source": "新浪体育", "target": "中华龙会"}, {"source": "罗昌平", "target": "专卖好酒"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "X_iao樓", "target": "RyanTsa0"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "新浪体育", "target": "小木木-H"}, {"source": "战争史研究WHS", "target": "鐵騎如水漫山關"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "BluePadge"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "曲儿wq"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "风和日丽1866"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "w新晴w", "target": "笑看来者"}, {"source": "xHao晓灏", "target": "w新晴w"}, {"source": "战争史研究WHS", "target": "xHao晓灏"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "山行者不爬山"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "南部炮兵潘"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "千年王国2012"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "中华龙会"}, {"source": "战争史研究WHS", "target": "旺达不锈钢管道设备"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "降夭除魔齐天大圣", "target": "LSX_N欣"}, {"source": "新浪体育", "target": "降夭除魔齐天大圣"}, {"source": "新浪体育", "target": "蓝天白云5888"}, {"source": "战争史研究WHS", "target": "玉米皮多多"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "小鱼妖贤"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "markxhuang"}, {"source": "新浪体育", "target": "这个马叔不太冷"}, {"source": "新浪体育", "target": "David爱美食"}, {"source": "新浪体育", "target": "柳培卿"}, {"source": "新浪体育", "target": "地质一郎"}, {"source": "耳光赵荒唐", "target": "worisi_na3"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "philosophic_philo"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "饕餮无厌-半部屠龙之术"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "jasonma284"}, {"source": "战争史研究WHS", "target": "fhqskwwx"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "王大大大安"}, {"source": "天水2院张医生", "target": "陇上优品-陶磊"}, {"source": "暗能量泡泡", "target": "天水2院张医生"}, {"source": "X_iao樓", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "新浪体育", "target": "直布罗陀_"}, {"source": "战争史研究WHS", "target": "虚地天高海底行"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "曾经日在校园"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "messenger16"}, {"source": "耳光赵荒唐", "target": "铁成的幸福生活"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "Biu--------------"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "冲浪板007"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "罗昌平", "target": "心若善至"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "NKmilitaryStudies", "target": "agents博"}, {"source": "战争史研究WHS", "target": "NKmilitaryStudies"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "风花雪月去"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "小LIU仔"}, {"source": "投行老人", "target": "james7band"}, {"source": "新浪体育", "target": "投行老人"}, {"source": "喷嚏网铂程", "target": "pmzqld"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "步行者001"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "降夭除魔齐天大圣", "target": "千手捉鸡_"}, {"source": "新浪体育", "target": "降夭除魔齐天大圣"}, {"source": "Tiger公子", "target": "撒旦尖角"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "浪客不行"}, {"source": "新浪体育", "target": "Unique斯通"}, {"source": "新浪体育", "target": "岁月哥特"}, {"source": "新浪体育", "target": "呆毛哼"}, {"source": "新浪体育", "target": "史小臭迷途中寻觅"}, {"source": "战争史研究WHS", "target": "entaro"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "xbftslh"}, {"source": "战争史研究WHS", "target": "洪七公--36"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "约伯少木"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "吉四六", "target": "自由知新"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "红藕香残玉簟秋allaboutyou"}, {"source": "麻黑浮云", "target": "邓先渝"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "麻黑浮云", "target": "邓先渝"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "我与鱼儿"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "耳光赵荒唐", "target": "陪你疯到天涯海角"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "秋天的完美生活"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "村长一路走好cl"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "今天你FGO咸鱼了么"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "北大十五"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "-胖小子-"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "Tiger公子", "target": "小钱钱飞来招财进宝"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "战争史研究WHS", "target": "见习魔王"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "农行小桂圆"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "马周扬律师", "target": "刘大来律师"}, {"source": "新浪体育", "target": "马周扬律师"}, {"source": "战争史研究WHS", "target": "邓先渝"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "国术促进会吴彬"}, {"source": "新浪体育", "target": "一个立派又迷人的营销号手机用户"}, {"source": "战争史研究WHS", "target": "霄緰鳴"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "parenthesisZ"}, {"source": "新浪体育", "target": "POPOVISION"}, {"source": "新浪体育", "target": "快刀博士"}, {"source": "喷嚏网铂程", "target": "猪头三小队长"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "bobbeido"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "战争史研究WHS", "target": "oldharry"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "罗昌平", "target": "江心洲的石头"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "吉四六", "target": "Tachikoma1990"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "木子东冉"}, {"source": "战争史研究WHS", "target": "Infi2015"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "lfx160219", "target": "北大白马96613"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "", "target": "减法生活女子减压生活会馆"}, {"source": "新浪体育", "target": ""}, {"source": "战争史研究WHS", "target": "大雄不太爱说话"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "关乎牙齿更关心你"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "降夭除魔齐天大圣", "target": "没事瞎扑腾_勇敢的乱飞_197"}, {"source": "新浪体育", "target": "降夭除魔齐天大圣"}, {"source": "新浪体育", "target": "通古鬼斯"}, {"source": "天水2院张医生", "target": "找北的时光"}, {"source": "暗能量泡泡", "target": "天水2院张医生"}, {"source": "X_iao樓", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "罗昌平", "target": "坚心耐苦"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "HS_Hanson"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "降夭除魔齐天大圣", "target": "五只fffff菌"}, {"source": "新浪体育", "target": "降夭除魔齐天大圣"}, {"source": "张晨初艺术空间", "target": "登州笑笑生"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "北斗之南V"}, {"source": "吉四六", "target": "大眼李"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "吉四六", "target": "杨术灵的公司是在香港注册的"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "Petter大俠"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "用户6101624258"}, {"source": "战争史研究WHS", "target": "BOSS大泡泡"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "降夭除魔齐天大圣"}, {"source": "战争史研究WHS", "target": "michelle0706"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "止于涂"}, {"source": "战争史研究WHS", "target": "已过期的凤梨罐头"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "吉四六", "target": "Justice_Sum"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "流云涛影的空间"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "和平与蛋黄酱"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "赵家周报"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "NKmilitaryStudies"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "偏不见就叫偏不见"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "軟Sir你病得不輕為啥還放棄治療"}, {"source": "张晨初艺术空间", "target": "一路上有你LXING"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "萨特5243280580"}, {"source": "战争史研究WHS", "target": "吉四六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "避难所小子爱喝核子可乐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "在一起的围脖"}, {"source": "战争史研究WHS", "target": "夜半幽灵"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "会瘦的兔子"}, {"source": "新浪体育", "target": "Tony悟空孙"}, {"source": "罗昌平", "target": "2017-5serieS"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "zds小懒"}, {"source": "耳光赵荒唐", "target": "九又十三分之一"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "运交华盖2013"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "西瓜大将"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "无心耳语08", "target": "阿特兰蒂斯的飞鸟"}, {"source": "战争史研究WHS", "target": "无心耳语08"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "歌手亚东", "target": "心雨3266917092"}, {"source": "新浪体育", "target": "歌手亚东"}, {"source": "Tiger公子", "target": "饱饱的酸菜君"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "战争史研究WHS", "target": "阿特兰蒂斯的飞鸟"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "曾经莱克今星敦"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "Camel3942", "target": "showdfg"}, {"source": "战争史研究WHS", "target": "Camel3942"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "孟加拉虎的BLOG", "target": "佬俚伺"}, {"source": "新浪体育", "target": "孟加拉虎的BLOG"}, {"source": "相忘于2222", "target": "盖世英雄_i"}, {"source": "新浪体育", "target": "相忘于2222"}, {"source": "新浪体育", "target": "坦帕湾魔鬼鱼"}, {"source": "新浪体育", "target": "Strong明丶"}, {"source": "战争史研究WHS", "target": "TreeHole2017"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "dgxbill"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "重工组长于彦舒", "target": "王霸丑"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "甲古的时代"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "huangky2013"}, {"source": "战争史研究WHS", "target": "于小文很跋扈"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "LAIZHONGYAO"}, {"source": "战争史研究WHS", "target": "大连地果"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "暮色柳塘"}, {"source": "上局沪段_沪", "target": "春分大寒"}, {"source": "战争史研究WHS", "target": "上局沪段_沪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "猫饭P", "target": "月想夜雫"}, {"source": "重工组长于彦舒", "target": "猫饭P"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "醇淨氺"}, {"source": "战争史研究WHS", "target": "李白起"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "北京金戈戈", "target": "财罗湖"}, {"source": "新浪体育", "target": "北京金戈戈"}, {"source": "新浪体育", "target": "兴盛泰"}, {"source": "张晨初艺术空间", "target": "金粉洒家"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "光辉岁月0927"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "张晨初艺术空间", "target": "大烧饼学炒股"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "Wcqsoil奇"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "站在天桥数车灯儿"}, {"source": "战争史研究WHS", "target": "RX-78-8"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "来自TTY"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "终南金刚"}, {"source": "战争史研究WHS", "target": "烈日下的森岛"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "一任年华度如禅"}, {"source": "战争史研究WHS", "target": "鑦赟驜鶴"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "片桂hoho嘎"}, {"source": "新浪体育", "target": "各路英雄我是炮灰"}, {"source": "战争史研究WHS", "target": "阿腿-人活着就是为了式姐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "my686"}, {"source": "重工组长于彦舒", "target": "乔那个疯子"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "Very流浪的小拖鞋"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "鬼面绣裁", "target": "叶拂衣_"}, {"source": "战争史研究WHS", "target": "鬼面绣裁"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "阿腿-人活着就是为了式姐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "北京利生体育商厦"}, {"source": "相忘于2222", "target": "饕餮海"}, {"source": "新浪体育", "target": "相忘于2222"}, {"source": "新浪体育", "target": "锦衣夜行452"}, {"source": "战争史研究WHS", "target": "ARS_锋线今天补齐了么"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "新浪体育", "target": "宋燕不v"}, {"source": "麻黑浮云", "target": "呛呛枪"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "战争史研究WHS", "target": "架梁公"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "绵绵绵绵甜"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "TroubleKid是MADAO"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "冷炜"}, {"source": "战争史研究WHS", "target": "信近言复"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "武人影像"}, {"source": "战争史研究WHS", "target": "ZY真人吉光片羽"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "ROCK在民大"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "钟涓之"}, {"source": "重工组长于彦舒", "target": "DR-pepper大魔王"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "剡溪山君"}, {"source": "张晨初艺术空间", "target": "顺势旺"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "优质羊毛", "target": "buyueeeee"}, {"source": "紫霄时雨_苍穹要塞难民", "target": "优质羊毛"}, {"source": "長滒", "target": "紫霄时雨_苍穹要塞难民"}, {"source": "新浪体育", "target": "長滒"}, {"source": "新浪体育", "target": "喜欢YY的城墙鸡"}, {"source": "鬼面绣裁", "target": "月下桃花枝"}, {"source": "战争史研究WHS", "target": "鬼面绣裁"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "师律伟王"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "郑顺天"}, {"source": "新浪体育", "target": "路痴Lee"}, {"source": "罗昌平", "target": "小小真菌"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "Xiao-斌杰", "target": "蒋某people"}, {"source": "战争史研究WHS", "target": "Xiao-斌杰"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "ParPar2011"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "北京金戈戈", "target": "简单感-悟"}, {"source": "新浪体育", "target": "北京金戈戈"}, {"source": "战争史研究WHS", "target": "aeo000000"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "优质羊毛", "target": "buyueeeee"}, {"source": "紫霄时雨_苍穹要塞难民", "target": "优质羊毛"}, {"source": "長滒", "target": "紫霄时雨_苍穹要塞难民"}, {"source": "新浪体育", "target": "長滒"}, {"source": "暗能量泡泡", "target": "天水2院张医生"}, {"source": "X_iao樓", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "苗条的小实", "target": "67年生人的记忆碎片"}, {"source": "新浪体育", "target": "苗条的小实"}, {"source": "战争史研究WHS", "target": "苏乄小溪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "黄俄罗斯志愿兵"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "WeiGuan-Gworld"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "阳光的小青年123"}, {"source": "喷嚏网铂程", "target": "TerryYin_S"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "某气又方又圆"}, {"source": "北京金戈戈", "target": "宝蛋她娘"}, {"source": "新浪体育", "target": "北京金戈戈"}, {"source": "新浪体育", "target": "WS_WBZ"}, {"source": "战争史研究WHS", "target": "鳯逑凰"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "刘海哲"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "纪岚挺"}, {"source": "Syfannn", "target": "风起来停不下来"}, {"source": "罗昌平", "target": "Syfannn"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "耳光赵荒唐", "target": "赵不着调调儿"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "满清十大酷刑"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "东168168168"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "_nearly转1", "target": "开大招时会喵喵叫的friend"}, {"source": "麻黑浮云", "target": "_nearly转1"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "VC火星人"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "换名字也不行"}, {"source": "战争史研究WHS", "target": "流星弦月"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "Howard_Qian"}, {"source": "紹灝Lam", "target": "流星弦月"}, {"source": "新浪体育", "target": "紹灝Lam"}, {"source": "战争史研究WHS", "target": "成都大河"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "大漠孤烟平凉"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "原始超越者2016"}, {"source": "罗昌平", "target": "人生录音"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "中出宪政柏拉图", "target": "柒vidy"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "硕爱1篮球阿阿"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "马周扬律师"}, {"source": "耳光赵荒唐", "target": "嬉皮笑脸者说"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "三尺之上有神明"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "谁执流素舞青月"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "耳光赵荒唐", "target": "落花满衣"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "手机用户2011685586"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "乐_扬"}, {"source": "麻黑浮云", "target": "用户5989473265"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "Aresous"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "清者自來"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "霁月难逢00"}, {"source": "人形高达奈叶", "target": "暴君T-233"}, {"source": "新浪体育", "target": "人形高达奈叶"}, {"source": "新浪体育", "target": "姚磊-三过七院而不入"}, {"source": "战争史研究WHS", "target": "yx希望"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "烈酒清茶"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "魔都百姓海幽"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "伤心云雨8"}, {"source": "张晨初艺术空间", "target": "清清美美"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "老海91816"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "不是宏推大宏推"}, {"source": "战争史研究WHS", "target": "Gabriel-VN"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "飞廉窝在小院子里养老"}, {"source": "喷嚏网铂程", "target": "雷电看风云"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "重工组长于彦舒", "target": "苍天的渔民饥饿的猫"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "天心-月圆"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "起士林不是我开的"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "雨小农和獭祭鱼"}, {"source": "战争史研究WHS", "target": "搞一手"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "水润嘉华"}, {"source": "新浪体育", "target": "彪悍猫妈"}, {"source": "战争史研究WHS", "target": "海獭小元帅"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "老盆"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "万言不值一杯酒"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "-逐梦令-"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "踏古悠悠"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "笨不傻"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "我的牛呢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "关东十二郎"}, {"source": "喷嚏网铂程", "target": "来了来了了了"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "嗨哥苏大少", "target": "富怡-宝盈-盈瑞恒"}, {"source": "新浪体育", "target": "嗨哥苏大少"}, {"source": "罗昌平", "target": "于余宇"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "监视狂魔沈夜"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "MrBone"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "好想骂你煞笔哦"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "命名馆的故事"}, {"source": "张晨初艺术空间", "target": "黄鹤2016"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "韩某89"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "谢龙1洋"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "屯里NNRT"}, {"source": "战争史研究WHS", "target": "OP牛牛real"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "Mirko的blog"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "stephen1999c", "target": "edelman葛"}, {"source": "战争史研究WHS", "target": "stephen1999c"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "艾露恩之光"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "上局沪段_沪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "小德银鳞胸甲"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "格瓦拉切糕"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "JoannaBlue", "target": "小葱花饼香辣子"}, {"source": "新浪体育", "target": "JoannaBlue"}, {"source": "sazen", "target": "黑羽太太薄爷爷"}, {"source": "新浪体育", "target": "sazen"}, {"source": "新浪体育", "target": "鋒瘋子"}, {"source": "战争史研究WHS", "target": "氮气君NegativelyNorm"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "YM0518"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "风_凌羽"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "JustForFunDude"}, {"source": "南迦巴瓦的晨曦", "target": "茜akane茜"}, {"source": "新浪体育", "target": "南迦巴瓦的晨曦"}, {"source": "新浪体育", "target": "WOCHIHUN"}, {"source": "战争史研究WHS", "target": "手自栽"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "大风起兮谣言飞"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "豆名扬", "target": "愚忠不中"}, {"source": "罗昌平", "target": "豆名扬"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "M菊花的小GI"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "北京金戈戈", "target": "铁笛惊龙"}, {"source": "新浪体育", "target": "北京金戈戈"}, {"source": "新浪体育", "target": "功夫查理"}, {"source": "战争史研究WHS", "target": "努力的萨摩"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "相忘于2222", "target": "关洪导演"}, {"source": "新浪体育", "target": "相忘于2222"}, {"source": "中出宪政柏拉图", "target": "-隔壁尛王"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "沙漠王子82"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "经济学原理0904"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "罗昌平", "target": "Syfannn"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "喷嚏网铂程", "target": "传说中滴临时工"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "风雨天骄"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "饽饽瘦了"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "三里寻烟"}, {"source": "战争史研究WHS", "target": "更木千秋"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "战争史研究WHS", "target": "魔蟹0080"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "X_iao樓", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "X_iao樓"}, {"source": "战争史研究WHS", "target": "鏡妖星影"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "用户3639916871"}, {"source": "战争史研究WHS", "target": "带鸡的少侠a"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "竹林风雨来了"}, {"source": "罗昌平", "target": "山魈屠魔"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "魔都310土匪", "target": "苍玖染月"}, {"source": "战争史研究WHS", "target": "魔都310土匪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "开老爷车的熊", "target": "暗能量泡泡"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "麻黑浮云", "target": "_nearly转1"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "zine692008991"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "Tiger公子", "target": "木兰007"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "战争史研究WHS", "target": "snowpanzer"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "吹風左"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "小弟震"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "耳光赵荒唐", "target": "walbgt"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "MTbuff"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "曾经依然46"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "huaxiawolf"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "天津王麟", "target": "杨培军ypj"}, {"source": "战争史研究WHS", "target": "天津王麟"}, {"source": "张欧亚", "target": "战争史研究WHS"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "成翔-同策咨询"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "新浪体育", "target": "宋燕不v"}, {"source": "张晨初艺术空间", "target": "hk2008abc"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "HCHZ2011"}, {"source": "战争史研究WHS", "target": "Xiao-斌杰"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "田字格大人"}, {"source": "中出宪政柏拉图", "target": "说你酷"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "蝶升思26812"}, {"source": "战争史研究WHS", "target": "剑吹白雪喵喵酱"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "换个名字好累人", "target": "D8表情帝"}, {"source": "新浪体育", "target": "换个名字好累人"}, {"source": "战争史研究WHS", "target": "_月亮六便士"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "适中求对"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "dengliang100"}, {"source": "战争史研究WHS", "target": "徐冲dy"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "喷嚏网铂程", "target": "三分音符V"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "潘恩豪啊潘恩豪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "被阳光点燃的小雏菊"}, {"source": "新浪体育", "target": "投行老人"}, {"source": "战争史研究WHS", "target": "WJHLMM"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "孟加拉虎的BLOG"}, {"source": "战争史研究WHS", "target": "chariotwx"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "人一定要靠自己"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "简木生--包丰瀛", "target": "东晓0117"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "耳光赵荒唐", "target": "罗比巴吉奥"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "说说我的丑"}, {"source": "战争史研究WHS", "target": "卖蟑螂的小男孩XD"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "喷嚏网铂程"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "桃子老爹"}, {"source": "战争史研究WHS", "target": "幸福就是毛毛雪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "绿绿绿绿绿到发亮"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "金城白菜斋"}, {"source": "鬼面绣裁", "target": "谢乘月"}, {"source": "战争史研究WHS", "target": "鬼面绣裁"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "披着虎皮的羊"}, {"source": "战争史研究WHS", "target": "薄荷够凉"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "战争史研究WHS", "target": "飛升法皇嬴曌堃"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "魏屹林"}, {"source": "五十岚空芔", "target": "雷焰萌虎"}, {"source": "战争史研究WHS", "target": "五十岚空芔"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "叫我驴驴就好了"}, {"source": "战争史研究WHS", "target": "爆炸神教唯我独尊"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "雨点儿yang"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "lionshuang"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "李小宝gg"}, {"source": "中出宪政柏拉图", "target": "阿里海牙科维奇"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "activegeneral"}, {"source": "战争史研究WHS", "target": "UNIMET"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "超级马力0"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "Tiger公子", "target": "西单骆驼"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "加菲杰克", "target": "中出宪政柏拉图"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "山城球长"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "人民舆论V"}, {"source": "战争史研究WHS", "target": "风清熙"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "诶呀妈呀吓我一跳"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "也曾相识0906"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "魔都310土匪"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "smthpickboy"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "耳光赵荒唐", "target": "阿瑟queen"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "九州纹龙"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "仇玲夕"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "云自在_安平太"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "tuzixuexi"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "耳光赵荒唐", "target": "真正的桐柏英雄"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "青鸟tw"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "方便卫生起效慢", "target": "罗叉叉"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "信仰之魂之根"}, {"source": "战争史研究WHS", "target": "WANGJXseEr"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "冬马和纱厨"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "取舍时空"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "香暗盈袖"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "歌手亚东"}, {"source": "战争史研究WHS", "target": "肺想说话"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "人形高达奈叶"}, {"source": "麻黑浮云", "target": "书客的马甲"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "战争史研究WHS", "target": "弗温居士"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "IHSAKAH"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "哥是厦大的"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "凌舒韵"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "景页的彭"}, {"source": "战争史研究WHS", "target": "paxl"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "澳洲李市民", "target": "bsr1983"}, {"source": "战争史研究WHS", "target": "澳洲李市民"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "孙润琦最近有点胖啊"}, {"source": "麻黑浮云", "target": "一头土猪"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "若渝与若耶"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "zzz洋仔"}, {"source": "战争史研究WHS", "target": "耳光赵荒唐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "牛大腕和羊羔肉"}, {"source": "远古的刀", "target": "新型的农村人"}, {"source": "张欧亚", "target": "远古的刀"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "京城吃货日记", "target": "哥是厦大的"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "廿五廿六"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "隔岸看风景2016"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "天枢道"}, {"source": "战争史研究WHS", "target": "Augusttin"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS:图片评论 http", "target": "宅心似箭"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS:图片评论 http"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "wwwwwww_W"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "毛巾在飞翔"}, {"source": "麻黑浮云", "target": "WVA亿境战队李嘉炜"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "战争史研究WHS", "target": "钟颙sz"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "長滒", "target": "二只只"}, {"source": "新浪体育", "target": "長滒"}, {"source": "罗昌平", "target": "飛過萬水千山"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "张晨初艺术空间", "target": "破晓劲风"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "相忘于2222", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "相忘于2222"}, {"source": "战争史研究WHS", "target": "竹园纤圆"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "古俐特"}, {"source": "新浪体育", "target": "古城_tma"}, {"source": "新浪体育", "target": "拖大林的斯拉机"}, {"source": "战争史研究WHS", "target": "浪里秤砣"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "堕落熊猫001", "target": "加菲杰克"}, {"source": "张晨初艺术空间", "target": "堕落熊猫001"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "秋风旅人"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "CDJ37"}, {"source": "新浪体育", "target": "低碳George"}, {"source": "Tiger公子", "target": "望霆止渴"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "mogu丫头"}, {"source": "麻黑浮云", "target": "游鱼居士"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "罗昌平", "target": "yaozo"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "plud2005"}, {"source": "战争史研究WHS", "target": "李家老三是藕霸"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "上下天光一碧万顷"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "肉食者Play", "target": "于明乐81489"}, {"source": "新浪体育", "target": "肉食者Play"}, {"source": "麻黑浮云", "target": "电击鱼"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "于贺_"}, {"source": "战争史研究WHS", "target": "Wilson老张"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "重工组长于彦舒", "target": "张晨初艺术空间"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "胖猪猪呼呼睡", "target": "麻黑浮云"}, {"source": "麻黑浮云", "target": "胖猪猪呼呼睡"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "战争史研究WHS", "target": "顺手牵杨扬"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "garfield007"}, {"source": "麻黑浮云", "target": "单位传达室老张"}, {"source": "新浪体育", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "毛i台钧"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "黄一米八二"}, {"source": "战争史研究WHS", "target": "穿长靴的柴郡猫"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "子-都"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "南迦巴瓦的晨曦"}, {"source": "新浪体育", "target": "八一魄力"}, {"source": "罗昌平", "target": "卅石矷"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "王唔悦", "target": "Yoga_雪"}, {"source": "新浪体育", "target": "王唔悦"}, {"source": "战争史研究WHS", "target": "黑岛结菜厨"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "肉食者Play"}, {"source": "战争史研究WHS", "target": "風痕2017"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "Tiger公子", "target": "裸奔老者"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "罗昌平", "target": "hai17"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "京城吃货日记", "target": "麻黑浮云"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "新浪体育", "target": "战争史研究WHS"}, {"source": "新浪体育", "target": "0ne丶PunCh"}, {"source": "新浪体育", "target": "AFC-ARS-FANS"}, {"source": "新浪体育", "target": "嗨哥苏大少"}, {"source": "简木生--包丰瀛", "target": "Tiger公子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "战争史研究WHS", "target": "XTG29"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "BJ卫东围脖"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "TeslaP100"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "千与千寻丶隐"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "知白守黑stock"}, {"source": "新浪体育", "target": "爱学习的绿叶子"}, {"source": "战争史研究WHS", "target": "一只饼干熊"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "京城吃货日记", "target": "变态的小幸福"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "丘八帮高级会员"}, {"source": "远古的刀", "target": "周氏豆沙"}, {"source": "张欧亚", "target": "远古的刀"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "花果山水帘洞齐天大圣0_0"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "福州摄影菌"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "醉生梦死的猫食"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "刘广赟卍"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "offfarmworkes2", "target": "offfarmworkes2"}, {"source": "战争史研究WHS", "target": "offfarmworkes2"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "墨子墨子墨子"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "琉璃厂人"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "DaDaDaDaDaDa灰狼"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "麓林山人"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "叫个咩faye"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "healt"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "山里的孩子去砍柴"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "DaDaDaDaDaDa灰狼"}, {"source": "新浪体育", "target": "我可以咬一口耶"}, {"source": "战争史研究WHS", "target": "Shawn_River"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "7816呵呵"}, {"source": "张晨初艺术空间", "target": "平生最怕起名字"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "柳恒卓"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "京城吃货日记", "target": "吴地老高"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "买不起早点的门房郑大爷"}, {"source": "罗昌平", "target": "不吃萝卜的野生鱼"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "xHao晓灏", "target": "w新晴w"}, {"source": "战争史研究WHS", "target": "xHao晓灏"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "SofayW"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "燃满愿"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "怀风的小号"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "龍叔論勢"}, {"source": "战争史研究WHS", "target": "offfarmworkes2"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "天津王麟"}, {"source": "张欧亚", "target": "战争史研究WHS"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "酋长喊我回家吃饭"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "麻黑浮云", "target": "英雄爱听故事"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "showdfg"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "可爱卫东"}, {"source": "新浪体育", "target": "文话中国"}, {"source": "战争史研究WHS", "target": "暖色调的海"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "nevermind39"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "小凯最爱羊羊"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "不读书的撸舔立"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "seven_罗"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "强强187"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "铁的男"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "balestra"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "吴宇森影迷"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "阝东更鑫鑫向荣"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "吃包子喝水"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "方便卫生起效慢", "target": "京城吃货日记"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "ORANGE_TULIP_2015__盾构工程"}, {"source": "罗昌平", "target": "NATUREexploring"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "鋈圆"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "澳洲李市民"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "灰狼多样性", "target": "Jeff-Chang"}, {"source": "新浪体育", "target": "灰狼多样性"}, {"source": "战争史研究WHS", "target": "leo快跑_"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "慈悲为槐"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "王师北定FK"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "JoKer__x1"}, {"source": "战争史研究WHS", "target": "冯某钊"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "猫团长没有咸鱼"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "wu聊a"}, {"source": "罗昌平", "target": "豆名扬"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "DaDaDaDaDaDa灰狼"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "北京金戈戈"}, {"source": "战争史研究WHS", "target": "清古正华"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "Anson余生"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "战争史研究WHS", "target": "Pengtzuchieh"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "麻黑浮云"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "stephen1999c"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "无穷的探索"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "xHao晓灏"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "renaissance325"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "陈_八怪_"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "惊梦时从来不报社"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "茗品呀茗品"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "马里亚纳的沟"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "方便卫生起效慢"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "做题做到傻星人"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "罗昌平", "target": "我是伍味子"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "流竜馬"}, {"source": "新浪体育", "target": "海布利的机关枪"}, {"source": "战争史研究WHS", "target": "五十岚空芔"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "深度脸盲症"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "永强波家的"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "湖南省西瓜甜瓜研究所团支部"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "胖得有气质"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "过去的老照片", "target": "卓裔人"}, {"source": "尧哥讲笑话", "target": "过去的老照片"}, {"source": "没籽的葡萄好吃", "target": "尧哥讲笑话"}, {"source": "新浪体育", "target": "没籽的葡萄好吃"}, {"source": "战争史研究WHS", "target": "-_---17---_-"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "tang花_fh7"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "血红暴鲤魚"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "女汉子只是多了一那份坚强錟"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "村头蹲点小流氓"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "飞云乱度_unntopia"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "bmjj777"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "walmazon"}, {"source": "战争史研究WHS", "target": "来自熊堡"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "假装仁波切糕"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "罗昌平"}, {"source": "新浪体育", "target": "我想爬出去"}, {"source": "张晨初艺术空间", "target": "周伯通说话"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "九門道"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "猫屎洞"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "战争史研究WHS", "target": "毛i台钧"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "CCCCRAZYCAT"}, {"source": "战争史研究WHS", "target": "米拉库露"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "战争史研究WHS"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "stlxmsl"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "深圳-0755"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "老哥哥农农"}, {"source": "新浪体育", "target": "筑城小铃铛"}, {"source": "张晨初艺术空间", "target": "Red-or-Black"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "坚菓青少年俱乐部"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "追风少年何大宝"}, {"source": "新浪体育", "target": "派大星爱吃锅包肉"}, {"source": "重工组长于彦舒", "target": "大叔与流浪猫"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "SOLOWINGROCKY"}, {"source": "张晨初艺术空间", "target": "weibuloser"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张晨初艺术空间", "target": "汪俊玲_悦宸"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "傅生-若梦"}, {"source": "我们认识", "target": "未文侯"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "重工组长于彦舒", "target": "秃秃小嘎"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "灰狼多样性"}, {"source": "重工组长于彦舒", "target": "艾特胖叔叔"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张欧亚", "target": "张晨初艺术空间"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "白胖浪浪"}, {"source": "新浪体育", "target": "厐宇峰"}, {"source": "重工组长于彦舒", "target": "Gen余根"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "梦佳红人"}, {"source": "简木生--包丰瀛", "target": "一小撮别有用心的小猪在跳舞"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "原子CaoYuan"}, {"source": "新浪体育", "target": "机智的大帅逼"}, {"source": "新浪体育", "target": "李曼青sattvaUranus"}, {"source": "新浪体育", "target": "何鑫JO"}, {"source": "lfx160219", "target": "果果的妈妈"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "吴足道-alaya"}, {"source": "新浪体育", "target": "Urnotprepared"}, {"source": "新浪体育", "target": "糖丶King"}, {"source": "重工组长于彦舒", "target": "苍狼小幻_"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "静山观海"}, {"source": "新浪体育", "target": "七親萌貨"}, {"source": "猫饭P", "target": "江巴瓜poi"}, {"source": "重工组长于彦舒", "target": "猫饭P"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "静山观海"}, {"source": "新浪体育", "target": "A优喂"}, {"source": "新浪体育", "target": "清宇建材"}, {"source": "重工组长于彦舒", "target": "泥四步撒"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张欧亚", "target": "远古的刀"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "猿十三", "target": "丁库北"}, {"source": "重工组长于彦舒", "target": "猿十三"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "江南岸1217"}, {"source": "重工组长于彦舒", "target": "看你妹夫斯基"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "廆仆"}, {"source": "重工组长于彦舒", "target": "160么么哒"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "洪涛观点"}, {"source": "重工组长于彦舒", "target": "曜冰"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "张欧亚", "target": "慈禧在坟墓里笑死"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "宋燕不v", "target": "张欧亚"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "平凡746"}, {"source": "新浪体育", "target": "嗷嘚儿刘"}, {"source": "简木生--包丰瀛", "target": "Sher-Conan"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "重工组长于彦舒", "target": "BiBlBa"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "jinguokai"}, {"source": "新浪体育", "target": "九河下潲-天子渡口"}, {"source": "新浪体育", "target": "霍斯勒阿瑟"}, {"source": "重工组长于彦舒", "target": "噗噜噗噜轰隆隆隆"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "小闫---闫宇航2_167"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "拉拉菲尔尼兹海格"}, {"source": "重工组长于彦舒", "target": "萧月御诸"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "黑贝的米兔"}, {"source": "新浪体育", "target": "西班牙荣"}, {"source": "新浪体育", "target": "那个叫做光的男人真他妈可爱"}, {"source": "新浪体育", "target": "Panda加速度"}, {"source": "新浪体育", "target": "慢慢买4j"}, {"source": "重工组长于彦舒", "target": "坠-绝命大番茄"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "鬼男三世"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "castle84"}, {"source": "紫霄时雨_苍穹要塞难民", "target": "优质羊毛"}, {"source": "長滒", "target": "紫霄时雨_苍穹要塞难民"}, {"source": "新浪体育", "target": "長滒"}, {"source": "新浪体育", "target": "saxon-90"}, {"source": "新浪体育", "target": "大虾本尊"}, {"source": "新浪体育", "target": "拜访者查子"}, {"source": "新浪体育", "target": "赵毫毛"}, {"source": "新浪体育", "target": "单刀126"}, {"source": "新浪体育", "target": "霖希默语"}, {"source": "新浪体育", "target": "艹丶LOVE丨霸道灬88"}, {"source": "新浪体育", "target": "爱家庭教师爱篮球爱科比"}, {"source": "新浪体育", "target": "小骉007"}, {"source": "lfx160219", "target": "蓝天zjg"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "青蛙王子199905"}, {"source": "新浪体育", "target": "生活顺顺利利"}, {"source": "重工组长于彦舒", "target": "2x2eyes着装变身"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "____-------____________"}, {"source": "新浪体育", "target": "信仰铮"}, {"source": "新浪体育", "target": "sekino"}, {"source": "新浪体育", "target": "HexFireSea"}, {"source": "重工组长于彦舒", "target": "猫饭P"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "简木生--包丰瀛", "target": "Digital蚊子"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "重工组长于彦舒", "target": "神之佩恩"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "宋燕不v"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "Double润-JR"}, {"source": "新浪体育", "target": "NouWl"}, {"source": "新浪体育", "target": "IceE_U"}, {"source": "新浪体育", "target": "一支钥匙一把锁"}, {"source": "新浪体育", "target": "浪剑痕_秋水尽洗天下劫"}, {"source": "重工组长于彦舒", "target": "甲壳咪殿下"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "牧羽尽人"}, {"source": "新浪体育", "target": "米衫儿"}, {"source": "花卷沉湎", "target": "北京_彬爷"}, {"source": "新浪体育", "target": "花卷沉湎"}, {"source": "新浪体育", "target": "MYS_Parker"}, {"source": "新浪体育", "target": "直抵黄龙府与诸君痛饮尔"}, {"source": "新浪体育", "target": "名字这么难听"}, {"source": "重工组长于彦舒", "target": "MKIII_TROMBE"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "吃鲸_满脑子打牌"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "李哈喽年抓虫子"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "吉原嗷子手中一碗张屏的面"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "不会结网的蜘蛛"}, {"source": "新浪体育", "target": "小超-唐新"}, {"source": "新浪体育", "target": "CJ一个微博"}, {"source": "lfx160219", "target": "华府骏苑姜熙健"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "剑雨风竹wzp"}, {"source": "新浪体育", "target": "刺猬-的生活"}, {"source": "新浪体育", "target": "EL-bazinga"}, {"source": "Michael-Cheung-", "target": "隐隐灵音"}, {"source": "新浪体育", "target": "Michael-Cheung-"}, {"source": "lfx160219", "target": "捣蛋少年2016"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "重工组长于彦舒", "target": "琉烟之烬"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "头条股票"}, {"source": "新浪体育", "target": "八度鱼77"}, {"source": "新浪体育", "target": "bywang1"}, {"source": "新浪体育", "target": "寒木9740"}, {"source": "新浪体育", "target": "不如一朵"}, {"source": "新浪体育", "target": "牵下水拍照"}, {"source": "新浪体育", "target": "实用格斗"}, {"source": "新浪体育", "target": "焖猪脚"}, {"source": "新浪体育", "target": "奔驰配件只售原厂全新"}, {"source": "重工组长于彦舒", "target": "七绪平门"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "动物凶猛吗"}, {"source": "重工组长于彦舒", "target": "皓乙_纯"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "lfx160219", "target": "鹿允近衛連隊的黑少领要当牛仔了"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "真同你友缘"}, {"source": "新浪体育", "target": "黄禾谷"}, {"source": "新浪体育", "target": "刘志鲲"}, {"source": "lfx160219", "target": "淘气的小福儿"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "爱哟快乐", "target": "上海曹凡"}, {"source": "我们认识", "target": "爱哟快乐"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "新浪体育", "target": "云信321312747"}, {"source": "新浪体育", "target": "樱花突击队"}, {"source": "夏至蟲之音", "target": "原始超越者2016"}, {"source": "重工组长于彦舒", "target": "夏至蟲之音"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "長滒", "target": "紫霄时雨_苍穹要塞难民"}, {"source": "新浪体育", "target": "長滒"}, {"source": "新浪体育", "target": "iFandom"}, {"source": "新浪体育", "target": "自古秃顶多薄命"}, {"source": "VeryE", "target": "上海曹凡"}, {"source": "爱哟快乐", "target": "VeryE"}, {"source": "我们认识", "target": "爱哟快乐"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "简木生--包丰瀛", "target": "木_小呆是个死腐宅"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "重工组长于彦舒", "target": "小马_1623085"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "读心术宋_Ssir226"}, {"source": "lfx160219", "target": "广陵古散"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "赵伯安"}, {"source": "新浪体育", "target": "非典型精彩"}, {"source": "新浪体育", "target": "沐之夏吉郎"}, {"source": "新浪体育", "target": "-梦魂舞晶-"}, {"source": "新浪体育", "target": "子非鱼非子vit"}, {"source": "过去的老照片", "target": "我的威海"}, {"source": "尧哥讲笑话", "target": "过去的老照片"}, {"source": "没籽的葡萄好吃", "target": "尧哥讲笑话"}, {"source": "新浪体育", "target": "没籽的葡萄好吃"}, {"source": "新浪体育", "target": "要酒还是要故事"}, {"source": "开老爷车的熊", "target": "lfx160219"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "FullMetalLyle"}, {"source": "新浪体育", "target": "开拓者3569"}, {"source": "新浪体育", "target": "斯坦家汪汪"}, {"source": "重工组长于彦舒", "target": "丿胡丶半仙"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "简木生--包丰瀛", "target": "破产伍伍陆"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "爱哟快乐", "target": "VeryE"}, {"source": "我们认识", "target": "爱哟快乐"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "新浪体育", "target": "一路并肩而行baby"}, {"source": "我们认识", "target": "爱哟快乐"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "重工组长于彦舒", "target": "短昵称-"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "JoannaBlue"}, {"source": "新浪体育", "target": "o0勇敢的心0o"}, {"source": "新浪体育", "target": "没有烟了"}, {"source": "简木生--包丰瀛", "target": "傲血困意"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "人生装修中的王白薯"}, {"source": "新浪体育", "target": "妙我居士"}, {"source": "新浪体育", "target": "freeeeekick"}, {"source": "新浪体育", "target": "不動的大圖書館Q"}, {"source": "新浪体育", "target": "瑞新新新新"}, {"source": "新浪体育", "target": "霹雳球球"}, {"source": "新浪体育", "target": "山顶夫子"}, {"source": "新浪体育", "target": "長滒"}, {"source": "新浪体育", "target": "九翼龙皇"}, {"source": "Christinez", "target": "我们认识"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "新浪体育", "target": "就是内个少年"}, {"source": "新浪体育", "target": "MrFopenheart"}, {"source": "新浪体育", "target": "梦里自在"}, {"source": "新浪体育", "target": "文武书书"}, {"source": "天天越野跑", "target": "JeremyKevin"}, {"source": "新浪体育", "target": "天天越野跑"}, {"source": "新浪体育", "target": "看客二两七"}, {"source": "尧哥讲笑话", "target": "过去的老照片"}, {"source": "没籽的葡萄好吃", "target": "尧哥讲笑话"}, {"source": "新浪体育", "target": "没籽的葡萄好吃"}, {"source": "新浪体育", "target": "笑嘻嘻不是孬东西"}, {"source": "新浪体育", "target": "奔跑在路上的小猪哥哥"}, {"source": "新浪体育", "target": "明月照清疯"}, {"source": "新浪体育", "target": "波灵谷"}, {"source": "重工组长于彦舒", "target": "零崎本心"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "人总要变僵尸"}, {"source": "简木生--包丰瀛", "target": "股民资源QQ719554823"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "海中的小白鲨"}, {"source": "新浪体育", "target": "小纯是不穿板甲的狂战"}, {"source": "新浪体育", "target": "孙松AT"}, {"source": "重工组长于彦舒", "target": "猿十三"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "中二有治"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "幽径不再悲剧"}, {"source": "简木生--包丰瀛", "target": "Daybreak_Canal"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "门后的风铃"}, {"source": "重工组长于彦舒", "target": "头喵的妈吃一身"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "花卷沉湎"}, {"source": "新浪体育", "target": "flowtime"}, {"source": "没籽的葡萄好吃", "target": "尧哥讲笑话"}, {"source": "新浪体育", "target": "没籽的葡萄好吃"}, {"source": "新浪体育", "target": "我叫照日格图"}, {"source": "新浪体育", "target": "穆sir---"}, {"source": "新浪体育", "target": "竹林之闲七"}, {"source": "新浪体育", "target": "想去看看世界的小猴子"}, {"source": "新浪体育", "target": "时间苍窮"}, {"source": "新浪体育", "target": "入云伤"}, {"source": "新浪体育", "target": "Ranyuewan"}, {"source": "新浪体育", "target": "只愿华丽一次"}, {"source": "新浪体育", "target": "一百五十斤的维洛妮卡"}, {"source": "简木生--包丰瀛", "target": "熊宝-咪"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "重工组长于彦舒", "target": "夏至蟲之音"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "鱼丸粗面"}, {"source": "重工组长于彦舒", "target": "团子桃子的麻麻"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "简木生--包丰瀛", "target": "balcktomato"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "熬浆糊99"}, {"source": "新浪体育", "target": "安庆爱慕摄影师阿文"}, {"source": "新浪体育", "target": "章海波"}, {"source": "新浪体育", "target": "熬浆糊99"}, {"source": "新浪体育", "target": "霞客遗风"}, {"source": "新浪体育", "target": "34X5A7"}, {"source": "新浪体育", "target": "简木生--包丰瀛"}, {"source": "新浪体育", "target": "花贰街"}, {"source": "新浪体育", "target": "孤单一个人去返工II"}, {"source": "新浪体育", "target": "Cindy是我的"}, {"source": "新浪体育", "target": "Hu_子叔叔"}, {"source": "重工组长于彦舒", "target": "东瓜_DONGGUA"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "BooM_讽_刺_"}, {"source": "新浪体育", "target": "all-time-low"}, {"source": "重工组长于彦舒", "target": "LP呆啊呆"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "Michael刘磊"}, {"source": "新浪体育", "target": "君王板甲胡屠户"}, {"source": "新浪体育", "target": "光明家具刘志军"}, {"source": "重工组长于彦舒", "target": "MADAO兽-UP"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "Cal_liu"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "镜花水月137"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "上善若水_waterliker"}, {"source": "重工组长于彦舒", "target": "FLAX_圩田经济学安心种地"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "重工组长于彦舒", "target": "王小签"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "MR-WANGRX"}, {"source": "新浪体育", "target": "美丽居曹亮"}, {"source": "新浪体育", "target": "拖拉机再垃圾也能拖垃圾H"}, {"source": "新浪体育", "target": "只道是寻常草履虫"}, {"source": "新浪体育", "target": "最近很无聊---"}, {"source": "新浪体育", "target": "HERO-熊"}, {"source": "新浪体育", "target": "床保社"}, {"source": "重工组长于彦舒", "target": "超昂闪存"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "天天越野跑"}, {"source": "新浪体育", "target": "大伟MADSam"}, {"source": "重工组长于彦舒", "target": "谷子地Dwane"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "王小硕的小马甲"}, {"source": "Christinez", "target": "三口一瓶奶"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "重工组长于彦舒", "target": "HBG_喵"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "李狗嗨ing"}, {"source": "重工组长于彦舒", "target": "Eye2eyes"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "后仓松鼠"}, {"source": "重工组长于彦舒", "target": "ERLIANGJO"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "捆着发木ALT"}, {"source": "重工组长于彦舒", "target": "激素少女陈一水"}, {"source": "新浪体育", "target": "重工组长于彦舒"}, {"source": "新浪体育", "target": "恩里克"}, {"source": "新浪体育", "target": "没籽的葡萄好吃"}, {"source": "新浪体育", "target": "偶尔有点帅1988"}, {"source": "新浪体育", "target": "开老爷车的熊"}, {"source": "新浪体育", "target": "北辰慢慢跑"}, {"source": "新浪体育", "target": "Mitsuhide明智"}, {"source": "新浪体育", "target": "不记得今天是礼拜几"}, {"source": "新浪体育", "target": "耗社会主义股市羊毛"}, {"source": "新浪体育", "target": "Christinez"}, {"source": "新浪体育", "target": "Mr-LeeZL"}, {"source": "新浪体育", "target": "给美希庆生的P_卡卡"}, {"source": "新浪体育", "target": "重工组长于彦舒"}], [{"name": ""}, {"name": "Camel3942"}, {"name": "Christinez"}, {"name": "JoannaBlue"}, {"name": "Michael-Cheung-"}, {"name": "NKmilitaryStudies"}, {"name": "Syfannn"}, {"name": "Tiger公子"}, {"name": "VeryE"}, {"name": "X_iao樓"}, {"name": "Xiao-斌杰"}, {"name": "_nearly转1"}, {"name": "lfx160219"}, {"name": "offfarmworkes2"}, {"name": "sazen"}, {"name": "stephen1999c"}, {"name": "w新晴w"}, {"name": "xHao晓灏"}, {"name": "上局沪段_沪"}, {"name": "中出宪政柏拉图"}, {"name": "中华龙会"}, {"name": "五十岚空芔"}, {"name": "京城吃货日记"}, {"name": "人形高达奈叶"}, {"name": "优质羊毛"}, {"name": "加菲杰克"}, {"name": "北京金戈戈"}, {"name": "南迦巴瓦的晨曦"}, {"name": "吉四六"}, {"name": "喷嚏网铂程"}, {"name": "嗨哥苏大少"}, {"name": "堕落熊猫001"}, {"name": "夏至蟲之音"}, {"name": "天天越野跑"}, {"name": "天水2院张医生"}, {"name": "天津王麟"}, {"name": "孟加拉虎的BLOG"}, {"name": "宋燕不v"}, {"name": "尧哥讲笑话"}, {"name": "开老爷车的熊"}, {"name": "张晨初艺术空间"}, {"name": "张欧亚"}, {"name": "我们认识"}, {"name": "战争史研究WHS"}, {"name": "战争史研究WHS:图片评论 http"}, {"name": "投行老人"}, {"name": "换个名字好累人"}, {"name": "新浪体育"}, {"name": "方便卫生起效慢"}, {"name": "无心耳语08"}, {"name": "暗能量泡泡"}, {"name": "歌手亚东"}, {"name": "没籽的葡萄好吃"}, {"name": "澳洲李市民"}, {"name": "灰狼多样性"}, {"name": "爱哟快乐"}, {"name": "猫饭P"}, {"name": "猿十三"}, {"name": "王唔悦"}, {"name": "相忘于2222"}, {"name": "简木生--包丰瀛"}, {"name": "紫霄时雨_苍穹要塞难民"}, {"name": "紹灝Lam"}, {"name": "罗昌平"}, {"name": "耳光赵荒唐"}, {"name": "肉食者Play"}, {"name": "胖猪猪呼呼睡"}, {"name": "花卷沉湎"}, {"name": "苗条的小实"}, {"name": "豆名扬"}, {"name": "过去的老照片"}, {"name": "远古的刀"}, {"name": "重工组长于彦舒"}, {"name": "長滒"}, {"name": "陇上优品-陶磊"}, {"name": "降夭除魔齐天大圣"}, {"name": "马周扬律师"}, {"name": "鬼面绣裁"}, {"name": "魔都310土匪"}, {"name": "麻黑浮云"}], "#搏击VS太极# 近日武林不是很太平,争论也很多[思考]有网友翻出前全运会武术冠军、著名演员@李连杰 接受杨澜专访时说的话,李连杰认为武术套路就是花架子——“当然\n了”,不是杀人的功夫。因为现在不再需要真功夫了,所谓的真功夫就是杀人最快的方法。 http://t.cn/RXgIUxg . ​", "4102228300324979", "新浪体育"] \ No newline at end of file diff --git a/pyecharts/__init__.py b/pyecharts/__init__.py index 5a5290f77..76782a2ff 100644 --- a/pyecharts/__init__.py +++ b/pyecharts/__init__.py @@ -1,18 +1,39 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 +from pyecharts._version import __version__, __author__ + +# charts from pyecharts.charts.bar import Bar +from pyecharts.charts.bar3D import Bar3D +from pyecharts.charts.boxplot import Boxplot from pyecharts.charts.effectscatter import EffectScatter from pyecharts.charts.funnel import Funnel from pyecharts.charts.gauge import Gauge from pyecharts.charts.geo import Geo from pyecharts.charts.graph import Graph +from pyecharts.charts.heatmap import HeatMap +from pyecharts.charts.kline import Kline from pyecharts.charts.line import Line +from pyecharts.charts.line3D import Line3D +from pyecharts.charts.liquid import Liquid from pyecharts.charts.map import Map from pyecharts.charts.parallel import Parallel from pyecharts.charts.pie import Pie from pyecharts.charts.polar import Polar from pyecharts.charts.radar import Radar +from pyecharts.charts.sankey import Sankey from pyecharts.charts.scatter import Scatter +from pyecharts.charts.scatter3D import Scatter3D +from pyecharts.charts.themeriver import ThemeRiver +from pyecharts.charts.treemap import TreeMap from pyecharts.charts.wordcloud import WordCloud + +# custom component +from pyecharts.custom.grid import Grid +from pyecharts.custom.overlap import Overlap +from pyecharts.custom.page import Page +from pyecharts.custom.timeline import Timeline + +# misc +from pyecharts.template import online diff --git a/pyecharts/__version__.py b/pyecharts/__version__.py deleted file mode 100644 index 812001999..000000000 --- a/pyecharts/__version__.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 - -__title__ = 'pyecharts' -__description__ = 'Python echarts, make charting easier' -__url__ = 'https://github.com/chenjiandongx/pyecharts' -__version__ = '1.1.4' -__author__ = 'chenjiandongx' -__author_email__ = 'chenjiandongx@qq.com' -__license__ = 'MIT' -__requires__ = ['pprint'] -__packages__ = ['pyecharts', 'pyecharts/charts'] -__keywords__ = ['echarts', 'charts'] \ No newline at end of file diff --git a/pyecharts/_version.py b/pyecharts/_version.py new file mode 100644 index 000000000..138277667 --- /dev/null +++ b/pyecharts/_version.py @@ -0,0 +1,2 @@ +__version__ = '0.2.6' +__author__ = 'chenjiandongx' diff --git a/pyecharts/base.py b/pyecharts/base.py index 879c1cdd5..c42c12f3e 100644 --- a/pyecharts/base.py +++ b/pyecharts/base.py @@ -1,11 +1,15 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 import json +import uuid +import random +import datetime -from pprint import pprint from pyecharts.option import get_all_options +from pyecharts import template +from pyecharts import utils +import pyecharts.constants as constants class Base(object): @@ -14,85 +18,166 @@ def __init__(self, title, subtitle, width=800, height=400, title_pos="auto", + title_top="auto", title_color="#000", subtitle_color="#aaa", title_text_size=18, subtitle_text_size=12, - background_color="#fff"): + background_color="#fff", + page_title=constants.PAGE_TITLE, + jshost=None): """ :param title: - 主标题文本,支持 \n 换行 + The main title text, supporting for \n for newlines. :param subtitle: - 副标题文本,支持 \n 换行 + Subtitle text, supporting for \n for newlines. :param width: - 画布宽度 + Canvas width :param height: - 画布高度 + Canvas height :param title_pos: - 标题位置,有 auto,left,right,center 可选 + Distance between grid component and the left side of the container. + title_pos value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + it can also be 'left', 'center', or 'right'. + If the title_pos value is set to be 'left', 'center', or 'right', + then the component will be aligned automatically based on position. + :param title_top: + Distance between grid component and the top side of the container. + top value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + it can also be 'top', 'middle', or 'bottom'. + If the left value is set to be 'top', 'middle', or 'bottom', + then the component will be aligned automatically based on position. :param title_color: - 主标题文本颜色 + main title text color. :param subtitle_color: - 副标题文本颜色 + subtitle text color. :param title_text_size: - 主标题文本字体大小 + main title font size :param subtitle_text_size: - 副标题文本字体大小 + subtitle font size :param background_color: - 画布背景颜色 + Background color of title, which is transparent by default. + Color can be represented in RGB, for example 'rgb(128, 128, 128)'. + RGBA can be used when you need alpha channel, + for example 'rgba(128, 128, 128, 0.5)'. + You may also use hexadecimal format, for example '#ccc'. + :param page_title: + specify html <title> value + :param jshost: + custom javascript host for the particular chart only """ self._option = {} self._width, self._height = width, height - self._colorlst = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#749f83', - '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'] + self._page_title = page_title + self._colorlst = [ + '#c23531', '#2f4554', '#61a0a8', '#d48265', '#749f83', + '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3', + '#f05b72', '#ef5b9c', '#f47920', '#905a3d', '#fab27b', + '#2a5caa', '#444693', '#726930', '#b2d235', '#6d8346', + '#ac6767', '#1d953f', '#6950a1', '#918597', '#f6f5ec'] self._option.update( - title={ + title=[{ "text": title, "subtext": subtitle, "left": title_pos, - "textStyle": {"color": title_color, "fontSize": title_text_size}, - "subtextStyle": {"color": subtitle_color, "fontSize": subtitle_text_size} - }, + "top": title_top, + "textStyle": { + "color": title_color, + "fontSize": title_text_size + }, + "subtextStyle": { + "color": subtitle_color, + "fontSize": subtitle_text_size + } + }], toolbox={ "show": True, "orient": "vertical", - "left": "right", + "left": "95%", "top": "center", - "feature": {"saveAsImage": {"show": True}} + "feature": { + "saveAsImage": { + "show": True, + "title": "下载图片" + }, + "restore": {"show": True}, + "dataView": {"show": True}, + } }, + series_id = random.randint(1, 9000000), tooltip={}, series=[], - legend={"data": []}, + legend=[{"data": []}], backgroundColor=background_color ) + self._jshost = jshost if jshost else constants.CONFIGURATION['HOST'] + self._js_dependencies = {'echarts'} + self._chart_id = uuid.uuid4().hex def add(self, angle_data=None, angle_range=None, area_color=None, area_opacity=None, + axis_range=None, + bar_category_gap=None, border_color=None, boundary_gap=None, center=None, - clockwise=None, - edge_length=None, + calendar_date_range=None, + calendar_cell_size=None, + datazoom_type=None, + datazoom_range=None, + datazoom_orient=None, + datazoom_xaxis_index=None, + datazoom_yaxis_index=None, effect_brushtype=None, effect_period=None, effect_scale=None, - formatter=None, + extra_data=None, geo_emphasis_color=None, geo_normal_color=None, - gravity=None, - interval=None, + geo_cities_coords=None, + graph_layout=None, + graph_gravity=None, + graph_edge_length=None, + graph_repulsion=None, + graph_edge_symbol=None, + graph_edge_symbolsize=None, + grid_width=None, + grid_height=None, + grid_top=None, + grid_bottom=None, + grid_left=None, + grid_right=None, + grid3d_width=None, + grid3d_height=None, + grid3d_depth=None, + grid3d_opacity=None, + grid3d_shading=None, + grid3d_rotate_speed=None, + grid3d_rotate_sensitivity=None, + is_angleaxis_show=None, is_area_show=None, is_axisline_show=None, is_calculable=None, + is_calendar_heatmap=None, + is_clockwise=None, is_convert=None, - is_emphasis=None, + is_datazoom_show=None, is_fill=None, is_focusnode=None, + is_grid3d_rotate=None, is_label_show=None, + is_label_emphasis=None, is_legend_show=None, + is_liquid_animation=None, + is_liquid_outline_show=None, + is_more_utils=None, + is_piecewise=None, + is_radiusaxis_show=None, is_random=None, is_roam=None, is_rotatelabel=None, @@ -101,27 +186,47 @@ def add(self, angle_data=None, is_stack=None, is_step=None, is_symbol_show=None, + is_map_symbol_show=None, is_visualmap=None, + is_xaxislabel_align=None, + is_yaxislabel_align=None, + is_xaxis_inverse=None, + is_yaxis_inverse=None, + is_xaxis_boundarygap=None, + is_yaxis_boundarygap=None, + is_xaxis_show=None, + is_yaxis_show=None, item_color=None, label_color=None, label_pos=None, label_text_color=None, label_text_size=None, - layout=None, + label_formatter=None, + label_emphasis_textcolor=None, + label_emphasis_textsize=None, + label_emphasis_pos=None, legend_orient=None, legend_pos=None, + legend_top=None, + legend_selectedmode=None, + legend_text_size=None, + legend_text_color=None, line_curve=None, line_opacity=None, line_type=None, line_width=None, + line_color=None, + liquid_color=None, maptype=None, mark_line=None, + mark_line_symbolsize=None, + mark_line_valuedim=None, mark_point=None, - namegap=None, - rader_text_color=None, + mark_point_symbol=None, + mark_point_symbolsize=None, + mark_point_textcolor=None, radius_data=None, radius=None, - repulsion=None, rosetype=None, rotate_step=None, scale_range=None, @@ -129,50 +234,98 @@ def add(self, angle_data=None, start_angle=None, symbol_size=None, symbol=None, + sankey_node_width=None, + sankey_node_gap=None, type=None, + tooltip_tragger=None, + tooltip_tragger_on=None, + tooltip_axispointer_type=None, + tooltip_formatter=None, + tooltip_text_color=None, + tooltip_font_size=None, + treemap_left_depth=None, + treemap_drilldown_icon=None, + treemap_visible_min=None, + visual_orient=None, visual_range_color=None, + visual_range_size=None, visual_range_text=None, visual_range=None, visual_text_color=None, + visual_pos=None, + visual_top=None, + visual_type=None, + visual_split_number=None, + visual_dimension=None, word_gap=None, word_size_range=None, x_axis=None, + xaxis_margin=None, + xaxis_interval=None, + xaxis_force_interval=None, + xaxis_pos=None, + xaxis_name_gap=None, + xaxis_name_size=None, xaxis_name_pos=None, xaxis_name=None, - xy_font_size=None, + xaxis_rotate=None, + xaxis_min=None, + xaxis_max=None, + xaxis_type=None, + xaxis3d_name=None, + xaxis3d_name_size=None, + xaxis3d_name_gap=None, + xaxis3d_min=None, + xaxis3d_max=None, + xaxis3d_interval=None, + xaxis3d_margin=None, + yaxis_margin=None, + yaxis_interval=None, + yaxis_force_interval=None, + yaxis_pos=None, + yaxis_formatter=None, + yaxis_rotate=None, + yaxis_min=None, + yaxis_max=None, + yaxis_name_gap=None, + yaxis_name_size=None, yaxis_name_pos=None, - yaxis_name=None): - """ base 父类的 add 方法只是为了提供提示选项 """ + yaxis_type=None, + yaxis_name=None, + yaxis3d_name=None, + yaxis3d_name_size=None, + yaxis3d_name_gap=None, + yaxis3d_min=None, + yaxis3d_max=None, + yaxis3d_interval=None, + yaxis3d_margin=None, + zaxis3d_name=None, + zaxis3d_name_size=None, + zaxis3d_name_gap=None, + zaxis3d_min=None, + zaxis3d_max=None, + zaxis3d_margin=None, **kwargs): + """ The base class's add() is just to provide a hint option""" pass - def custom(self, series): - """ 追加自定义图表类型 - - :param series: - 追加图表类型的 series 数据 - """ - _name, _series = series - for n in _name: - self._option.get('legend').get('data').append(n) - for s in _series: - self._option.get('series').append(s) - - def get_series(self): - """ 获取图表的 series 数据 """ - return self._option.get('legend').get('data'), self._option.get('series') - def show_config(self): - """ 打印输出 option 所有配置项 """ - pprint(self._option) + """ Print all options of charts""" + print(json_dumps(self._option, indent=4)) - def cast(self, seq): - """ 转换数据序列,将带字典和元祖类型的序列转换为 k_lst,v_lst 两个列表 + @property + def options(self): + """ Expose public interface options """ + return self._option + + @staticmethod + def cast(seq): + """ Convert the sequence with the dictionary and tuple type into k_lst, v_lst. 1.[(A1, B1),(A2, B2),(A3, B3),(A4, B4)] --> k_lst[A[i1,i2...]], v_lst[B[i1,i2...]] 2.[{A1: B1},{A2: B2},{A3: B3},{A4: B4}] --> k_lst[A[i1,i2...]], v_lst[B[i1,i2...]] 3.{A1: B1, A2: B2, A3: B3, A4: B4} -- > k_lst[A[i1,i2...]], v_lst[B[i1,i2...]] :param seq: - 转换的序列 + data sequence :return: """ k_lst, v_lst = [], [] @@ -195,236 +348,159 @@ def cast(self, seq): v_lst.append(v) return k_lst, v_lst - def _legend_visualmap_colorlst(self, is_visualmap=False, **kwargs): - """ 配置 legend,visualmap 以及 colorlst + def _config_components(self, is_visualmap=False, + is_more_utils=False, + **kwargs): + """ config components of chart :param is_visualmap: - 是否显示 visualmap 组件 + It specifies whether to use the visualMap component. + :param is_datazoom_show: + It specifies whether to show the dataZoom component. + :param is_more_utils: + It specifies whether to show more utils in toolbox component. :param kwargs: """ kwargs.update(colorlst=self._colorlst) chart = get_all_options(**kwargs) + self._option.update(color=chart['color']) + + # legend component + self._option.get('legend')[0].update(chart['legend']) + # tooltip component + self._option.update(tooltip=chart['tooltip']) + + # dataZoom component + if kwargs.get('is_datazoom_show', None) is True: # do not change this line anymore + self._option.update(dataZoom=chart['datazoom']) + # visualMap component if is_visualmap: self._option.update(visualMap=chart['visual_map']) - self._option.get('legend').update(chart['legend']) - self._option.update(color=chart['color']) + # toolbox component + if is_more_utils: + self._option.get('toolbox').get('feature').update( + magicType={ + "show": True, + "type": ['line', 'bar', 'stack', 'tiled'], + "title": { + "line": "折线图", + "bar": "柱状图", + "stack": "堆叠", + "tiled": "平铺"}}, + dataZoom={ + "show": True, + "title": { + "zoom": "区域缩放", + "back": "缩放还原"}} + ) + + def render_embed(self): + """ + Render the chart component and its options + + You can include it into your web pages. And you will + provide all dependent echarts javascript libraries. + """ + embed = 'chart_component.html' + tmp = template.JINJA2_ENV.get_template(embed) + my_option = json_dumps(self._option, indent=4) + html = tmp.render(myOption=my_option, + chart_id=self._chart_id, + myWidth=self._width, myHeight=self._height) + return html + + def get_js_dependencies(self): + """ + Declare its javascript dependencies for embedding purpose + """ + return template.produce_html_script_list(self._js_dependencies) def render(self, path="render.html"): - """ 渲染数据项,生成 html 文件 + """ Render the options dict, generate the html file :param path: - 生成 html 文件保存路径 + path of render html file """ - from pyecharts import temple as Tp - temple = Tp._temple - series = self._option.get("series") - for s in series: - if s.get('type') == "wordCloud": - temple = Tp._temple_wd - break - if s.get('type') in ("scatter", "pie", "bar", "line") and 'coordinateSystem' not in s: - temple = Tp.temple - break - my_option = json.dumps(self._option, indent=4, ensure_ascii=False) - __op = temple\ - .replace("myOption", my_option)\ - .replace("myWidth", str(self._width))\ - .replace("myHeight", str(self._height)) - with open(path, "w+") as f: - f.write(__op) + _tmp = "local.html" + my_option = json_dumps(self._option, indent=4) + tmp = template.JINJA2_ENV.get_template(_tmp) + script_list = template.produce_html_script_list(self._js_dependencies) + html = tmp.render( + myOption=my_option, + chart_id=self._chart_id, + script_list=script_list, + page_title=self._page_title, + myWidth=self._width, myHeight=self._height) + html = utils.freeze_js(html) + utils.write_utf8_html_file(path, html) - @property - def _geo_cities(self): - """ 返回 geo 组件中国各大城市经纬度 """ - return { - "海门": [121.15, 31.89], - "鄂尔多斯": [109.781327, 39.608266], - "招远": [120.38, 37.35], - "舟山": [122.207216, 29.985295], - "齐齐哈尔": [123.97, 47.33], - "盐城": [120.13, 33.38], - "赤峰": [118.87, 42.28], - "青岛": [120.33, 36.07], - "乳山": [121.52, 36.89], - "金昌": [102.188043, 38.520089], - "泉州": [118.58, 24.93], - "莱西": [120.53, 36.86], - "日照": [119.46, 35.42], - "胶南": [119.97, 35.88], - "南通": [121.05, 32.08], - "拉萨": [91.11, 29.97], - "云浮": [112.02, 22.93], - "梅州": [116.1, 24.55], - "文登": [122.05, 37.2], - "上海": [121.48, 31.22], - "攀枝花": [101.718637, 26.582347], - "威海": [122.1, 37.5], - "承德": [117.93, 40.97], - "厦门": [118.1, 24.46], - "汕尾": [115.375279, 22.786211], - "潮州": [116.63, 23.68], - "丹东": [124.37, 40.13], - "太仓": [121.1, 31.45], - "曲靖": [103.79, 25.51], - "烟台": [121.39, 37.52], - "福州": [119.3, 26.08], - "瓦房店": [121.979603, 39.627114], - "即墨": [120.45, 36.38], - "抚顺": [123.97, 41.97], - "玉溪": [102.52, 24.35], - "张家口": [114.87, 40.82], - "阳泉": [113.57, 37.85], - "莱州": [119.942327, 37.177017], - "湖州": [120.1, 30.86], - "汕头": [116.69, 23.39], - "昆山": [120.95, 31.39], - "宁波": [121.56, 29.86], - "湛江": [110.359377, 21.270708], - "揭阳": [116.35, 23.55], - "荣成": [122.41, 37.16], - "连云港": [119.16, 34.59], - "葫芦岛": [120.836932, 40.711052], - "常熟": [120.74, 31.64], - "东莞": [113.75, 23.04], - "河源": [114.68, 23.73], - "淮安": [119.15, 33.5], - "泰州": [119.9, 32.49], - "南宁": [108.33, 22.84], - "营口": [122.18, 40.65], - "惠州": [114.4, 23.09], - "江阴": [120.26, 31.91], - "蓬莱": [120.75, 37.8], - "韶关": [113.62, 24.84], - "嘉峪关": [98.289152, 39.77313], - "广州": [113.23, 23.16], - "延安": [109.47, 36.6], - "太原": [112.53, 37.87], - "清远": [113.01, 23.7], - "中山": [113.38, 22.52], - "昆明": [102.73, 25.04], - "寿光": [118.73, 36.86], - "盘锦": [122.070714, 41.119997], - "长治": [113.08, 36.18], - "深圳": [114.07, 22.62], - "珠海": [113.52, 22.3], - "宿迁": [118.3, 33.96], - "咸阳": [108.72, 34.36], - "铜川": [109.11, 35.09], - "平度": [119.97, 36.77], - "佛山": [113.11, 23.05], - "海口": [110.35, 20.02], - "江门": [113.06, 22.61], - "章丘": [117.53, 36.72], - "肇庆": [112.44, 23.05], - "大连": [121.62, 38.92], - "临汾": [111.5, 36.08], - "吴江": [120.63, 31.16], - "石嘴山": [106.39, 39.04], - "沈阳": [123.38, 41.8], - "苏州": [120.62, 31.32], - "茂名": [110.88, 21.68], - "嘉兴": [120.76, 30.77], - "长春": [125.35, 43.88], - "胶州": [120.03336, 36.264622], - "银川": [106.27, 38.47], - "张家港": [120.555821, 31.875428], - "三门峡": [111.19, 34.76], - "锦州": [121.15, 41.13], - "南昌": [115.89, 28.68], - "柳州": [109.4, 24.33], - "三亚": [109.511909, 18.252847], - "自贡": [104.778442, 29.33903], - "吉林": [126.57, 43.87], - "阳江": [111.95, 21.85], - "泸州": [105.39, 28.91], - "西宁": [101.74, 36.56], - "宜宾": [104.56, 29.77], - "呼和浩特": [111.65, 40.82], - "成都": [104.06, 30.67], - "大同": [113.3, 40.12], - "镇江": [119.44, 32.2], - "桂林": [110.28, 25.29], - "张家界": [110.479191, 29.117096], - "宜兴": [119.82, 31.36], - "北海": [109.12, 21.49], - "西安": [108.95, 34.27], - "金坛": [119.56, 31.74], - "东营": [118.49, 37.46], - "牡丹江": [129.58, 44.6], - "遵义": [106.9, 27.7], - "绍兴": [120.58, 30.01], - "扬州": [119.42, 32.39], - "常州": [119.95, 31.79], - "潍坊": [119.1, 36.62], - "重庆": [106.54, 29.59], - "台州": [121.420757, 28.656386], - "南京": [118.78, 32.04], - "滨州": [118.03, 37.36], - "贵阳": [106.71, 26.57], - "无锡": [120.29, 31.59], - "本溪": [123.73, 41.3], - "克拉玛依": [84.77, 45.59], - "渭南": [109.5, 34.52], - "马鞍山": [118.48, 31.56], - "宝鸡": [107.15, 34.38], - "焦作": [113.21, 35.24], - "句容": [119.16, 31.95], - "北京": [116.46, 39.92], - "徐州": [117.2, 34.26], - "衡水": [115.72, 37.72], - "包头": [110, 40.58], - "绵阳": [104.73, 31.48], - "乌鲁木齐": [87.68, 43.77], - "枣庄": [117.57, 34.86], - "杭州": [120.19, 30.26], - "淄博": [118.05, 36.78], - "鞍山": [122.85, 41.12], - "溧阳": [119.48, 31.43], - "库尔勒": [86.06, 41.68], - "安阳": [114.35, 36.1], - "开封": [114.35, 34.79], - "济南": [117, 36.65], - "德阳": [104.37, 31.13], - "温州": [120.65, 28.01], - "九江": [115.97, 29.71], - "邯郸": [114.47, 36.6], - "临安": [119.72, 30.23], - "兰州": [103.73, 36.03], - "沧州": [116.83, 38.33], - "临沂": [118.35, 35.05], - "南充": [106.110698, 30.837793], - "天津": [117.2, 39.13], - "富阳": [119.95, 30.07], - "泰安": [117.13, 36.18], - "诸暨": [120.23, 29.71], - "郑州": [113.65, 34.76], - "哈尔滨": [126.63, 45.75], - "聊城": [115.97, 36.45], - "芜湖": [118.38, 31.33], - "唐山": [118.02, 39.63], - "平顶山": [113.29, 33.75], - "邢台": [114.48, 37.05], - "德州": [116.29, 37.45], - "济宁": [116.59, 35.38], - "荆州": [112.239741, 30.335165], - "宜昌": [111.3, 30.7], - "义乌": [120.06, 29.32], - "丽水": [119.92, 28.45], - "洛阳": [112.44, 34.7], - "秦皇岛": [119.57, 39.95], - "株洲": [113.16, 27.83], - "石家庄": [114.48, 38.03], - "莱芜": [117.67, 36.19], - "常德": [111.69, 29.05], - "保定": [115.48, 38.85], - "湘潭": [112.91, 27.87], - "金华": [119.64, 29.12], - "岳阳": [113.09, 29.37], - "长沙": [113, 28.21], - "衢州": [118.88, 28.97], - "廊坊": [116.7, 39.53], - "菏泽": [115.480656, 35.23375], - "合肥": [117.27, 31.86], - "武汉": [114.31, 30.52], - "大庆": [125.03, 46.58] - } \ No newline at end of file + def _repr_html_(self): + """ Render the options dict, displayed in the jupyter notebook + + :return: + """ + _tmp = 'notebook.html' + dom = self._render_notebook_dom_() + component = self._render_notebook_component_() + tmp = template.JINJA2_ENV.get_template(_tmp) + require_config = template.produce_require_configuration( + self._js_dependencies, self._jshost) + html = tmp.render( + single_chart=component, dom=dom, **require_config) + return html + + def _render_notebook_dom_(self): + """ + + :return: + """ + _tmp = "notebook_dom.html" + tmp = template.JINJA2_ENV.get_template(_tmp) + component = tmp.render( + chart_id=self._chart_id, + chart_width=self._width, + chart_height=self._height) + return component + + def _render_notebook_component_(self): + """ + + :return: + """ + _tmp = "notebook_chart_component.html" + my_option = json_dumps(self._option, indent=4) + tmp = template.JINJA2_ENV.get_template(_tmp) + component = tmp.render( + my_option=my_option, chart_id=self._chart_id) + return component + + +class PandasNumpyTypeEncoder(json.JSONEncoder): + def default(self, obj): + try: + return obj.astype(float).tolist() + except: + try: + return obj.astype(str).tolist() + except: + return json.JSONEncoder.default(self, obj) + + +def handle(obj): + """ + + :param obj: + :return: + """ + if isinstance(obj, (datetime.datetime, datetime.date)): + return obj.isoformat() + + +def json_dumps(data, indent=0): + """ + + :param data: + :param indent: + :return: + """ + return json.dumps(data, indent=indent, cls=PandasNumpyTypeEncoder, default=handle) diff --git a/pyecharts/charts/__init__.py b/pyecharts/charts/__init__.py index 3dc0ab560..e69de29bb 100644 --- a/pyecharts/charts/__init__.py +++ b/pyecharts/charts/__init__.py @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 \ No newline at end of file diff --git a/pyecharts/charts/bar.py b/pyecharts/charts/bar.py index 3226dcf62..3cb306bdb 100644 --- a/pyecharts/charts/bar.py +++ b/pyecharts/charts/bar.py @@ -1,14 +1,16 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Bar(Base): """ - <<< 柱状/条形图 >>> - 柱状/条形图 通过 柱形的高度/条形的宽度 来表现数据的大小。 + <<< Bar chart >>> + + Bar chart shows different data through the height of a bar, which is used in + rectangular coordinate with at least 1 category axis. """ def __init__(self, title="", subtitle="", **kwargs): @@ -19,36 +21,39 @@ def add(self, *args, **kwargs): def __add(self, name, x_axis, y_axis, is_stack=False, + bar_category_gap="20%", **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param x_axis: - x 坐标轴数据 + data of xAixs :param y_axis: - y 坐标轴数据 + data of yAxis :param is_stack: - 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置 + It specifies whether to stack category axis. :param kwargs: """ - if isinstance(x_axis, list) and isinstance(y_axis, list): - assert len(x_axis) == len(y_axis) - kwargs.update(x_axis=x_axis) - chart = get_all_options(**kwargs) - is_stack = "stack" if is_stack else "" - xaxis, yaxis = chart['xy_axis'] - self._option.update(xAxis=xaxis, yAxis=yaxis) - self._option.get('legend').get('data').append(name) - self._option.get('series').append({ - "type": "bar", - "name": name, - "data": y_axis, - "stack": is_stack, - "label": chart['label'], - "markPoint": chart['mark_point'], - "markLine": chart['mark_line'] - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("x_axis and y_axis must be list") + assert len(x_axis) == len(y_axis) + kwargs.update(x_axis=x_axis) + chart = get_all_options(**kwargs) + + is_stack = "stack_" + str(self._option['series_id']) if is_stack else "" + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "bar", + "name": name, + "data": y_axis, + "stack": is_stack, + "barCategoryGap": bar_category_gap, + "label": chart['label'], + "markPoint": chart['mark_point'], + "markLine": chart['mark_line'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/bar3D.py b/pyecharts/charts/bar3D.py new file mode 100644 index 000000000..b91c4221d --- /dev/null +++ b/pyecharts/charts/bar3D.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Bar3D(Base): + """ + <<< Bar3D chart >>> + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(Bar3D, self).__init__(title, subtitle, **kwargs) + self._js_dependencies.add('echartsgl') + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, x_axis, y_axis, data, + grid3d_opacity=1, + grid3d_shading='color', + **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param x_axis: + xAxis data + :param y_axis: + yAxis data + :param data: + zAxis data + :param grid3d_opacity: + opacity of gird3D item + :param grid3d_shading: + 3D graphics coloring effect + 'color': + Only show color, not affected by lighting and other factors. -default + 'lambert': + Through the classic lambert coloring to show the light and shade. + 'realistic': + realistic rendering. + :param kwargs: + :return: + """ + kwargs.update(xaxis3d_type='category', + yaxis3d_type='category', + zaxis3d_type='value') + chart = get_all_options(**kwargs) + + self._option.get('legend')[0].get('data').append(name) + self._option.update( + xAxis3D=chart['xaxis3D'], + yAxis3D=chart['yaxis3D'], + zAxis3D=chart['zaxis3D'], + grid3D=chart['grid3D'] + ) + self._option.get('xAxis3D').update(data=x_axis) + self._option.get('yAxis3D').update(data=y_axis) + + self._option.get('series').append({ + "type": "bar3D", + "name": name, + "data": data, + "label": chart['label'], + "shading": grid3d_shading, + "itemStyle": {"opacity": grid3d_opacity} + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/boxplot.py b/pyecharts/charts/boxplot.py new file mode 100644 index 000000000..29ba223ae --- /dev/null +++ b/pyecharts/charts/boxplot.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Boxplot(Base): + """ + <<< Boxplot chart >>> + + Boxplot is a convenient way of graphically depicting groups of numerical + data through their quartiles. + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(Boxplot, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, x_axis, y_axis, **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param x_axis: + data of xAixs + :param y_axis: + data of yAxis + :param kwargs: + :return: + """ + kwargs.update(x_axis=x_axis) + chart = get_all_options(**kwargs) + + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "boxplot", + "name": name, + "data": y_axis, + "label": chart['label'], + "markPoint": chart['mark_point'], + "markLine": chart['mark_line'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) + + @staticmethod + def prepare_data(data): + """ + + :param data: + :return: + """ + _data = [] + for d in data: + try: + _d, _result = sorted(d), [] + for i in range(1, 4): + n = i * (len(_d) + 1) / 4 + m = n - int(n) + if m == 0: + _result.append(_d[int(n) - 1]) + elif m == 1 / 4: + _result.append(_d[int(n) - 1] * 0.75 + _d[int(n)] * 0.25) + elif m == 1 / 2: + _result.append(_d[int(n) - 1] * 0.5 + _d[int(n)] * 0.5) + elif m == 3 / 4: + _result.append(_d[int(n) - 1] * 0.25 + _d[int(n)] * 0.75) + _result.insert(0, _d[0]) # min + _result.append(_d[-1]) # max + _data.append(_result) + except Exception: + pass + return _data diff --git a/pyecharts/charts/effectscatter.py b/pyecharts/charts/effectscatter.py index be339c9fe..607545d6e 100644 --- a/pyecharts/charts/effectscatter.py +++ b/pyecharts/charts/effectscatter.py @@ -1,14 +1,16 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.charts.scatter import Scatter from pyecharts.option import get_all_options + class EffectScatter(Scatter): """ - <<< 带有涟漪特效动画的散点图 >>> - 利用动画特效可以将某些想要突出的数据进行视觉突出。 + <<< EffectScatter chart >>> + + The scatter graph with ripple animation. + The special animation effect can visually highlights some data. """ def __init__(self, title="", subtitle="", **kwargs): super(EffectScatter, self).__init__(title, subtitle, **kwargs) @@ -16,38 +18,39 @@ def __init__(self, title="", subtitle="", **kwargs): def add(self, *args, **kwargs): self.__add(*args, **kwargs) - def __add(self, name, x_value, y_value, + def __add(self, name, x_axis, y_axis, symbol_size=10, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param x_axis: - x 坐标轴数据 + data of xAxis :param y_axis: - y 坐标轴数据 + data of yAxis :param symbol_size: - 标记图形大小 + symbol size :param kwargs: """ - if isinstance(x_value, list) and isinstance(y_value, list): - assert len(x_value) == len(y_value) - kwargs.update(type="scatter") - chart = get_all_options(**kwargs) - xaxis, yaxis = chart['xy_axis'] - self._option.update(xAxis=xaxis, yAxis=yaxis) - self._option.get('legend').get('data').append(name) - self._option.get('series').append({ - "type": "effectScatter", - "name": name, - "showEffectOn":"render", - "rippleEffect": chart['effect'], - "symbol": chart['symbol'], - "symbolSize": symbol_size, - "data": [list(z) for z in zip(x_value, y_value)], - "label": chart['label'], - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("x_axis and y_axis must be list") + assert len(x_axis) == len(y_axis) + kwargs.update(type="scatter") + chart = get_all_options(**kwargs) + + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "effectScatter", + "name": name, + "showEffectOn":"render", + "rippleEffect": chart['effect'], + "symbol": chart['symbol'], + "symbolSize": symbol_size, + "data": [list(z) for z in zip(x_axis, y_axis)], + "label": chart['label'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/funnel.py b/pyecharts/charts/funnel.py index 748d1a480..56c2501b7 100644 --- a/pyecharts/charts/funnel.py +++ b/pyecharts/charts/funnel.py @@ -1,13 +1,13 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Funnel(Base): """ - <<< 漏斗图 >>> + <<< Funnel chart >>> """ def __init__(self, title="", subtitle="", **kwargs): super(Funnel, self).__init__(title, subtitle, **kwargs) @@ -19,28 +19,30 @@ def __add(self, name, attr, value, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param kwargs: """ - if isinstance(attr, list) and isinstance(value, list): - assert len(attr) == len(value) - chart = get_all_options(**kwargs) - _data = [] - for data in zip(attr, value): - _name, _value = data - _data.append({"name": _name, "value": _value}) - for a in attr: - self._option.get('legend').get('data').append(a) - self._option.get('series').append({ - "type": "funnel", - "name": name, - "data": _data, - "label": chart['label'], - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("attr and value must be list") + assert len(attr) == len(value) + chart = get_all_options(**kwargs) + + _data = [] + for data in zip(attr, value): + _name, _value = data + _data.append({"name": _name, "value": _value}) + for a in attr: + self._option.get('legend')[0].get('data').append(a) + _dset = set(self._option.get('legend')[0].get('data')) + self._option.get('legend')[0].update(data=list(_dset)) + + self._option.get('series').append({ + "type": "funnel", + "name": name, + "data": _data, + "label": chart['label'] + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/gauge.py b/pyecharts/charts/gauge.py index 90a9e8e61..7299299c2 100644 --- a/pyecharts/charts/gauge.py +++ b/pyecharts/charts/gauge.py @@ -1,12 +1,12 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base + class Gauge(Base): """ - <<< 仪表盘 >>> + <<< Gauge chart >>> """ def __init__(self, title="", subtitle="", **kwargs): super(Gauge, self).__init__(title, subtitle, **kwargs) @@ -21,28 +21,35 @@ def __add(self, name, attr, value, """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param scale_range: - 仪表盘数据范围 + data range of guage :param angle_range: - 仪表盘角度范围 + angle range of guage + The direct right side of circle center is 0 degree,the right above + it is 90 degree, the direct left side of it is 180 degree. :param kwargs: """ - # 数据范围默认为 [0,100] + kwargs.update(type="gauge") + # default data range is [0, 100] _min, _max = 0, 100 if scale_range: if len(scale_range) == 2: _min, _max = scale_range - # 角度范围默认为 [225,-45] + + # defalut angle range is [225, -45] _start, _end = 225, -45 if angle_range: if len(angle_range) == 2: _start, _end = angle_range - self._option.get('legend').get('data').append(name) + + self._option.get('legend')[0].get('data').append(name) + self._option.get('series').append({ "type": "gauge", "detail": {"formatter": '{value}%'}, @@ -51,7 +58,9 @@ def __add(self, name, attr, value, "max": _max, "startAngle": _start, "endAngle": _end, - "data": [{"value": value, "name": attr}] + "data": [{ + "value": value, + "name": attr + }] }) - self._option.update(tooltip={"formatter": "{a} <br/>{b} : {c}%"}) - self._legend_visualmap_colorlst(**kwargs) + self._config_components(**kwargs) diff --git a/pyecharts/charts/geo.py b/pyecharts/charts/geo.py index 8b7331c5e..b5fb659da 100644 --- a/pyecharts/charts/geo.py +++ b/pyecharts/charts/geo.py @@ -1,14 +1,18 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options +from pyecharts.constants import CITY_GEO_COORDS +from pyecharts.constants import CITY_NAME_PINYIN_MAP + class Geo(Base): """ - <<< 地理坐标系组件 >>> - 地理坐标系组件用于地图的绘制,支持在地理坐标系上绘制散点图,线集。 + Geographic coordinate system component. + + It is used to draw maps, which also supports scatter series, and line + series. """ def __init__(self, title="", subtitle="", **kwargs): super(Geo, self).__init__(title, subtitle, **kwargs) @@ -23,72 +27,109 @@ def __add(self, name, attr, value, border_color="#111", geo_normal_color="#323c48", geo_emphasis_color="#2a333d", + geo_cities_coords=None, + is_roam=True, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with + legend, or updating data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param type: - 图例类型,有 scatter/effectscatter 可选 + chart type, it can be 'scatter', 'effectscatter', 'heatmap' :param maptype: - 地图类型,目前只有 china 可选 + type of map, it only supports 'china' temporarily. :param symbol_size: - 标记图形大小 + symbol size :param border_color: - 地图边界颜色 + color of map border :param geo_normal_color: - 正常状态下地图区域的颜色 + The color of the map area in normal state :param geo_emphasis_color: - 高亮状态下地图区域的颜色 + The color of the map area in emphasis state + :param geo_cities_coords: + User define cities coords + :param is_roam: + Whether to enable mouse zooming and translating. false by default. + If either zooming or translating is wanted, + it can be set to 'scale' or 'move'. Otherwise, set it to be true + to enable both. :param kwargs: """ - if isinstance(attr, list) and isinstance(value, list): - assert len(attr) == len(value) - chart = get_all_options(**kwargs) - _data = [] - for data in zip(attr, value): - _name, _value = data - if _name in self._geo_cities: - _v = self._geo_cities.get(_name) - _v.append(_value) - _value = list(_v) - _data.append({"name": _name, "value": _value}) - self._option.update( - geo={ - "map": maptype, - "label": {}, - "itemStyle": {"normal": { - "areaColor": geo_normal_color, - "borderColor": border_color}, - "emphasis":{"areaColor": geo_emphasis_color}} - }) - self._option.get('legend').get('data').append(name) - if type == "scatter": - self._option.get('series').append({ - "type": type, - "name": name, - "coordinateSystem": 'geo', - "symbol": chart['symbol'], - "symbolSize": symbol_size, - "data": _data, - "label": chart['label'], - }) - elif type == "effectScatter": - self._option.get('series').append({ - "type": type, - "name": name, - "coordinateSystem": 'geo', - "showEffectOn": "render", - "rippleEffect": chart['effect'], - "symbol": chart['symbol'], - "symbolSize": symbol_size, - "data": _data, - "label": chart['label'], - }) - self._legend_visualmap_colorlst(**kwargs) + assert len(attr) == len(value) + kwargs.update(type="geo") + chart = get_all_options(**kwargs) + + if geo_cities_coords: + _geo_cities_coords = geo_cities_coords else: - raise TypeError("attr and value must be list") + _geo_cities_coords = CITY_GEO_COORDS + + _data = [] + for name, value in zip(attr, value): + if name in _geo_cities_coords: + city_coordinate = _geo_cities_coords.get(name) + city_coordinate.append(value) + _data.append({"name": name, "value": city_coordinate}) + else: + print("%s coordinates is not found" % name) + self._option.update( + geo={ + "map": maptype, + "roam": is_roam, + "label": { + "emphasis": { + "show": True, + "textStyle": { + "color": "#eee" + } + }}, + "itemStyle": { + "normal": { + "areaColor": geo_normal_color, + "borderColor": border_color + }, + "emphasis": { + "areaColor": geo_emphasis_color + }} + }) + self._option.get('legend')[0].get('data').append(name) + + if type == "scatter": + self._option.get('series').append({ + "type": type, + "name": name, + "coordinateSystem": 'geo', + "symbol": chart['symbol'], + "symbolSize": symbol_size, + "data": _data, + "label": chart['label'], + }) + + elif type == "effectScatter": + self._option.get('series').append({ + "type": type, + "name": name, + "coordinateSystem": 'geo', + "showEffectOn": "render", + "rippleEffect": chart['effect'], + "symbol": chart['symbol'], + "symbolSize": symbol_size, + "data": _data, + "label": chart['label'], + }) + + elif type == "heatmap": + self._option.get('series').append({ + "type": type, + "name": name, + "coordinateSystem": 'geo', + "data": _data, + }) + name_in_pinyin = CITY_NAME_PINYIN_MAP.get(maptype, maptype) + self._js_dependencies.add(name_in_pinyin) + self._config_components(**kwargs) diff --git a/pyecharts/charts/graph.py b/pyecharts/charts/graph.py index 5d6e7a97e..6afdb6782 100644 --- a/pyecharts/charts/graph.py +++ b/pyecharts/charts/graph.py @@ -1,14 +1,15 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Graph(Base): """ - <<< 关系图 >>> - 用于展现节点以及节点之间的关系数据。 + <<< Graph chart >>> + + Graph is a diagram to represent nodes and the links connecting nodes. """ def __init__(self, title="", subtitle="", **kwargs): super(Graph, self).__init__(title, subtitle, **kwargs) @@ -16,78 +17,104 @@ def __init__(self, title="", subtitle="", **kwargs): def add(self, *args, **kwargs): self.__add(*args, **kwargs) - def __add(self, nodes, links, categories=None, + def __add(self, name, nodes, links, categories=None, is_focusnode=True, is_roam=True, is_rotatelabel=False, - layout="force", - edge_length=50, - gravity=0.2, - repulsion=50, + graph_layout="force", + graph_edge_length=50, + graph_gravity=0.2, + graph_repulsion=50, + graph_edge_symbol=None, + graph_edge_symbolsize=10, **kwargs): """ - + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param nodes: - 关系图结点,包含的数据项有 - # 必须!! - name:结点名称 - # 非必须!! - x:节点的初始 x 值 - y:节点的初始 y 值 - value:结点数值 - category:结点类目 - symbol:标记图形 - symbolSize:标记图形大小 + Relational nodes data + name:Name of data item. # required!! + x:x value of node position. + y:y value of node position. + value:value of data item. + category:Index of category which the data item belongs to. + symbol:Symbol of node of this category. + Includes 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' + symbolSize:symbol size :param links: - 结点间的关系数据,包含的数据项有 - # 必须!! - source:边的源节点名称的字符串,也支持使用数字表示源节点的索引 - target:边的目标节点名称的字符串,也支持使用数字表示源节点的索引 - # 非必须!! - value:边的数值,可以在力引导布局中用于映射到边的长度 + Relational data between nodes + source:name of source node on edge # required!! + target:name of target node on edge # required!! + value:value of edge,It can be used in the force layout to map to the length of the edge :param categories: - 结点分类的类目 - 如果节点有分类的话可以通过 nodes[i].category 指定每个节点的类目,类目的样式会被应用到节点样式上 + Name of category, which is used to correspond with legend and the content of tooltip. :param is_focusnode: - 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点 + Whether to focus/highlight the hover node and it's adjacencies. :param is_roam: - 是否开启鼠标缩放和平移漫游。默认不开启 - 如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启 + Whether to enable mouse zooming and translating. false by default. + If either zooming or translating is wanted, + it can be set to 'scale' or 'move'. Otherwise, set it to be true to enable both. :param is_rotatelabel: - 是否旋转标签,默认不旋转 - :param layout: - 关系图布局 'none' 不采用任何布局,使用节点中提供的 x, y 作为节点的位置 - circular:采用环形布局, - force:采用力引导布局 - :param edge_length: - 力布局下边的两个节点之间的距离,这个距离也会受 repulsion 影响 - 支持设置成数组表达边长的范围,此时不同大小的值会线性映射到不同的长度。值越小则长度越长 - :param gravity: - 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢 - :param repulsion: - 节点之间的斥力因子 - 支持设置成数组表达斥力的范围,此时不同大小的值会线性映射到不同的斥力。值越大则斥力越大 + Whether to rotate the label automatically. + :param graph_layout: + Graph layout. + 'none': No any layout, use x, y provided in node as the position of node. + 'circular': Adopt circular layout, see the example Les Miserables. + 'force': Adopt force-directed layout, see the example Force, + the detail about configrations of layout are in graph.force + :param graph_edge_length: + The distance between 2 nodes on edge. This distance is also affected by repulsion. + It can be an array to represent the range of edge length.In this case edge with + larger value will be shorter, which means two nodes are closer. + And edge with smaller value will be longer. + :param graph_gravity: + The gravity factor enforcing nodes approach to the center. + The nodes will be closer to the center as the value becomes larger. + :param graph_repulsion: + The repulsion factor between nodes. The repulsion will be stronger and the + distance between 2 nodes becomes further as this value becomes larger. + It can be an array to represent the range of repulsion. + In this case larger value have larger repulsion and smaller value + will have smaller repulsion. + :param graph_edge_symbol: + Symbol of two ends of edge line. + For example: edgeSymbol: ['circle', 'arrow'] + :param graph_edge_symbolsize: + Size of symbol of two ends of edge line. Can be an array or a single number. :param kwargs: """ kwargs.update(type="graph") chart = get_all_options(**kwargs) + if categories: for c in categories: - self._option.get('legend').get('data').append(c) + self._option.get('legend')[0].get('data').append(c) + + if graph_edge_symbol is None: + graph_edge_symbol = [None, None] + self._option.get('series').append({ "type": "graph", - "layout": layout, + "name": name, + "layout": graph_layout, "symbol": chart['symbol'], - "circular": {"rotateLabel": is_rotatelabel}, - "force": {"repulsion": repulsion, - "edgeLength": edge_length, - "gravity": gravity}, + "circular": { + "rotateLabel": is_rotatelabel + }, + "force": { + "repulsion": graph_repulsion, + "edgeLength": graph_edge_length, + "gravity": graph_gravity + }, "label": chart['label'], "lineStyle": chart['line_style'], "roam": is_roam, "focusNodeAdjacency": is_focusnode, "data": nodes, "categories": categories, - "links":links + "edgeSymbol": graph_edge_symbol, + "edgeSymbolSize": graph_edge_symbolsize, + "links":links, }) - self._legend_visualmap_colorlst(**kwargs) + self._config_components(**kwargs) diff --git a/pyecharts/charts/heatmap.py b/pyecharts/charts/heatmap.py new file mode 100644 index 000000000..665deb27f --- /dev/null +++ b/pyecharts/charts/heatmap.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class HeatMap(Base): + """ + <<< HeatMap chart >>> + + Heat map mainly use colors to represent values, which must be used along + with visualMap component. + It can be used in either rectangular coordinate or geographic coordinate. + But the behaviour on them are quite different. Rectangular coordinate + must have two categories to use it. + """ + def __init__(self, title="", subtitle="", **kwargs): + super(HeatMap, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, *args, **kwargs): + """ + + :param args: + if kwargs has is_calendar_heatmap property: + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param data: + data array of series, it is represented by a two-dimension array -> [[],[]] + else: + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param x_axis: + data of xAxis, it must be catagory axis. + :param y_axis: + data of yAxis, it must be catagory axis. + :param data: + data array of series, it is represented by a two-dimension array -> [[],[]] + :param kwargs: + :return: + """ + _is_calendar = kwargs.get('is_calendar_heatmap', None) is True + if _is_calendar: + name, data = args + else: + name, x_axis, y_axis, data = args + + chart = get_all_options(**kwargs) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "heatmap", + "name": name, + "data": data, + "label": chart['label'], + "seriesId": self._option.get('series_id'), + }) + + if _is_calendar: + self._option.get('toolbox')['show'] = False + self._option.get('series')[0].update(coordinateSystem='calendar') + self._option.update(calendar=chart['calendar']) + else: + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('xAxis')[0].update( + type='category', data=x_axis, splitArea={"show": True}) + self._option.get('yAxis')[0].update( + type='category', data=y_axis, splitArea={"show": True}) + + self._config_components(**kwargs) diff --git a/pyecharts/charts/kline.py b/pyecharts/charts/kline.py new file mode 100644 index 000000000..9f1b2ae79 --- /dev/null +++ b/pyecharts/charts/kline.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Kline(Base): + """ + <<< Kline(Candlestick) chart >>> + + Kline chart use red to imply increasing with red and decreasing with blue + """ + def __init__(self, title="", subtitle="", **kwargs): + super(Kline, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, x_axis, y_axis, **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param x_axis: + data of xAxis + :param y_axis: + data pf yAxis + Data should be the two-dimensional array shown as follow. -> [[],[]] + Every data item (each line in the example above) represents a box, + which contains 4 values. They are: [open, close, lowest, highest] + (namely: [opening value, closing value, lowest value, highest value]) + :param kwargs: + :return: + """ + kwargs.update(type="candlestick", x_axis=x_axis) + chart = get_all_options(**kwargs) + + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('xAxis')[0].update(scale=True) + self._option.get('yAxis')[0].update( + scale=True, splitArea={"show": True}) + + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "candlestick", + "name": name, + "data": y_axis, + "markPoint": chart['mark_point'], + "markLine": chart['mark_line'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/line.py b/pyecharts/charts/line.py index 91546cac3..6f29774ce 100644 --- a/pyecharts/charts/line.py +++ b/pyecharts/charts/line.py @@ -1,14 +1,17 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Line(Base): """ - <<< 折线/面积图 >>> - 折线图是用折线将各个数据点标志连接起来的图表,用于展现数据的变化趋势。 + <<< Broken Line >>> + + Broken line chart relates all the data points symbol by broken lines, + which is used to show the trend of data changing. + It could be used in both rectangular coordinate and polar coordinate. """ def __init__(self, title="", subtitle="", **kwargs): super(Line, self).__init__(title, subtitle, **kwargs) @@ -26,48 +29,49 @@ def __add(self, name, x_axis, y_axis, """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param x_axis: - x 坐标轴数据 + data of xAxis :param y_axis: - y 坐标轴数据 + data of yAxis :param is_symbol_show: - 是否显示标记图形 + It specifies whether to show the symbol. :param is_smooth: - 是否平滑曲线显示 + Whether to show as smooth curve. :param is_stack: - 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置 + It specifies whether to stack category axis. :param is_step: - 是否是阶梯线图。可以设置为 true 显示成阶梯线图。 - 也支持设置成 start, middle, end 分别配置在当前点,当前点与下个点的中间点,下个点拐弯。 + Whether to show as a step line. It can be true, false. Or 'start', 'middle', 'end'. + Which will configure the turn point of step line. :param is_fill: - 是否填充曲线所绘制面积 + Whether to fill area. :param kwargs: """ - if isinstance(x_axis, list) and isinstance(y_axis, list): - assert len(x_axis) == len(y_axis) - kwargs.update(x_axis=x_axis, type="line") - chart = get_all_options(**kwargs) - xaxis, yaxis = chart['xy_axis'] - is_stack = "stack" if is_stack else "" - _area_style = {"normal": chart['area_style']} if is_fill else {} - self._option.update(xAxis=xaxis, yAxis=yaxis) - self._option.get('legend').get('data').append(name) - self._option.get('series').append({ - "type": "line", - "name": name, - "symbol": chart['symbol'], - "smooth": is_smooth, - "step": is_step, - "stack": is_stack, - "showSymbol": is_symbol_show, - "data": y_axis, - "label": chart['label'], - "lineStyle": chart['line_style'], - "areaStyle": _area_style, - "markPoint": chart['mark_point'], - "markLine": chart['mark_line'] - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("x_axis and y_axis must be list") + assert len(x_axis) == len(y_axis) + kwargs.update(x_axis=x_axis, type="line") + chart = get_all_options(**kwargs) + + xaxis, yaxis = chart['xy_axis'] + is_stack = "stack_" + str(self._option['series_id']) if is_stack else "" + _area_style = {"normal": chart['area_style']} if is_fill else {} + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "line", + "name": name, + "symbol": chart['symbol'], + "smooth": is_smooth, + "step": is_step, + "stack": is_stack, + "showSymbol": is_symbol_show, + "data": y_axis, + "label": chart['label'], + "lineStyle": chart['line_style'], + "areaStyle": _area_style, + "markPoint": chart['mark_point'], + "markLine": chart['mark_line'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/line3D.py b/pyecharts/charts/line3D.py new file mode 100644 index 000000000..3c7ebcf9a --- /dev/null +++ b/pyecharts/charts/line3D.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Line3D(Base): + """ + <<< Line3D chart >>> + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(Line3D, self).__init__(title, subtitle, **kwargs) + self._js_dependencies.add('echartsgl') + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, data, + grid3d_opacity=1, + **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param data: + data of line3D + :param grid3d_opacity: + opacity of gird3D item + :param kwargs: + :return: + """ + kwargs.update(xaxis3d_type='value', + yaxis3d_type='value', + zaxis3d_type='value') + chart = get_all_options(**kwargs) + + self._option.get('legend')[0].get('data').append(name) + self._option.update( + xAxis3D=chart['xaxis3D'], + yAxis3D=chart['yaxis3D'], + zAxis3D=chart['zaxis3D'], + grid3D=chart['grid3D'] + ) + + self._option.get('series').append({ + "type": "line3D", + "name": name, + "data": data, + "label": chart['label'], + "itemStyle": {"opacity": grid3d_opacity} + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/liquid.py b/pyecharts/charts/liquid.py new file mode 100644 index 000000000..5451db9eb --- /dev/null +++ b/pyecharts/charts/liquid.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base + + +class Liquid(Base): + """ + <<< Liquid chart >>> + + Liquid chart is usually used to represent data in percentage. + """ + def __init__(self, title="", subtitle="", **kwargs): + super(Liquid, self).__init__(title, subtitle, **kwargs) + self._js_dependencies.add('liquidfill') + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, data, + shape='circle', + liquid_color=None, + is_liquid_animation=True, + is_liquid_outline_show=True): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param data: + data of liquid, [0.6, 0.5, 0.4, 0.3]: This creates a chart wit waves at + position of 60%, 50%, 40%, and 30%. + :param shape: + Shape of water fill chart. + It can be one of the default symbols: 'circle', 'rect', 'roundRect', 'triangle', + 'diamond', 'pin', 'arrow' + :param liquid_color: + To set colors for liquid fill chart series, set color to be an array of colors. + :param is_liquid_animation: + Whether disable animation. + :param is_liquid_outline_show: + whether hide the outline + :return: + """ + _animation_dur, _animation_dur_update = 2000, 1000 + if not is_liquid_animation: + _animation_dur, _animation_dur_update = 0, 0 + + _color = ['#294D99', '#156ACF', '#1598ED', '#45BDFF'] + if liquid_color: + _color = liquid_color + + _shape = 'circle' + if shape in ('circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'): + _shape = shape + + self._option.get('series').append({ + "type": "liquidFill", + "name": name, + "data": data, + "waveAnimation": is_liquid_animation, + "animationDuration": _animation_dur, + "animationDurationUpdate": _animation_dur_update, + "color": _color, + "shape": _shape, + "outline": { + "show": is_liquid_outline_show + } + }) diff --git a/pyecharts/charts/map.py b/pyecharts/charts/map.py index cf6fc8360..7238a9776 100644 --- a/pyecharts/charts/map.py +++ b/pyecharts/charts/map.py @@ -1,14 +1,21 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 +import sys from pyecharts.base import Base from pyecharts.option import get_all_options +from pyecharts.constants import CITY_NAME_PINYIN_MAP + +PY2 = sys.version_info[0] == 2 + class Map(Base): """ - <<< 地图 >>> - 地图主要用于地理区域数据的可视化。 + <<< Map chart >>> + + Map is mainly used in the visualization of geographic area data,which + can be used with visualMap component to visualize the data such as + population distribution density in different areas. """ def __init__(self, title="", subtitle="", **kwargs): super(Map, self).__init__(title, subtitle, **kwargs) @@ -19,38 +26,48 @@ def add(self, *args, **kwargs): def __add(self, name, attr, value, is_roam=True, maptype='china', + is_map_symbol_show=True, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with + legend, or updating data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param is_roam: - 是否开启鼠标缩放和平移漫游。默认不开启 - 如果只想要开启缩放或者平移,可以设置成 scale 或者 move。设置成 true 为都开启 + Whether to enable mouse zooming and translating. false by default. + If either zooming or translating is wanted, + it can be set to 'scale' or 'move'. Otherwise, set it to be true + to enable both. + :param is_map_symbol_show: + Show or hide legend symbol in the map. Default to show a red dot. + False to hide it. :param maptype: - 地图类型,支持 china, world, 广东,福建,山东等... + type of map, it supports + china、world、... :param kwargs: """ - if isinstance(attr, list) and isinstance(value, list): - chart = get_all_options(**kwargs) - assert len(attr) == len(value) - _data = [] - for data in zip(attr, value): - _name, _value = data - _data.append({"name": _name, "value": _value}) - self._option.get('legend').get('data').append(name) - self._option.get('series').append({ - "type": "map", - "name": name, - "symbol": chart['symbol'], - "mapType": maptype, - "data": _data, - "roam": is_roam - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("attr and value must be list") + assert len(attr) == len(value) + chart = get_all_options(**kwargs) + _data = [] + for data in zip(attr, value): + _name, _value = data + _data.append({"name": _name, "value": _value}) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "map", + "name": name, + "symbol": chart['symbol'], + "label": chart['label'], + "mapType": maptype, + "data": _data, + "roam": is_roam, + "showLegendSymbol": is_map_symbol_show + }) + name_in_pinyin = CITY_NAME_PINYIN_MAP.get(maptype, maptype) + self._js_dependencies.add(name_in_pinyin) + self._config_components(**kwargs) diff --git a/pyecharts/charts/parallel.py b/pyecharts/charts/parallel.py index 7b7354cfe..46242f5c7 100644 --- a/pyecharts/charts/parallel.py +++ b/pyecharts/charts/parallel.py @@ -1,13 +1,15 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base + class Parallel(Base): """ - <<< 平行坐标系 >>> - 平行坐标系是一种常用的可视化高维数据的图表。 + <<< Parallel chart >>> + + Parallel Coordinates is a common way of visualizing high-dimensional geometry and + analyzing multivariate data. """ def __init__(self, title="", subtitle="", **kwargs): super(Parallel, self).__init__(title, subtitle, **kwargs) @@ -19,9 +21,20 @@ def config(self, schema=None, c_schema=None): """ :param schema: - 默认平行坐标系的坐标轴信息 + Dimension index of coordinate axis. + a axis name list, like ['apple', 'orange', 'watermelon'] :param c_schema: - 用户自定义平行坐标系的坐标轴信息 + User customize coordinate axis for parallel coordinate. + dim: Dimension index of coordinate axis. + name: Name of axis. + type: Type of axis + value: Numerical axis, suitable for continuous data. + category: Category axis, suitable for discrete category data. + Data should only be set via data for this type. + min: The minimun value of axis. + max: The maximum value of axis. + inverse: Whether axis is inversed. + nameLocation: Location of axis name. it can be 'start', 'middle', 'end'. :return: """ if schema: @@ -34,18 +47,26 @@ def __add(self, name, data, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param data: - 数据项,类型为包含列表的列表 [[]]。数据中,每一行是一个『数据项』,每一列属于一个『维度』 + data array of series, it is represented by a two-dimension array -> [[],[]] :param kwargs: :return: """ - self._option.update(parallel={"left": "5%", "right": "13%", "bottom": "10%", "top": "20%"}) - self._option.get('legend').get('data').append(name) + self._option.update( + parallel={ + "left": "5%", + "right": "13%", + "bottom": "10%", + "top": "20%" + }) + self._option.get('legend')[0].get('data').append(name) + self._option.get('series').append({ "type": "parallel", "coordinateSystem": "parallel", "name": name, - "data": data + "data": data, }) - self._legend_visualmap_colorlst(**kwargs) + self._config_components(**kwargs) diff --git a/pyecharts/charts/pie.py b/pyecharts/charts/pie.py index 5f7f3ef1f..e383bba7a 100644 --- a/pyecharts/charts/pie.py +++ b/pyecharts/charts/pie.py @@ -1,14 +1,16 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Pie(Base): """ - <<< 饼图 >>> - 饼图主要用于表现不同类目的数据在总和中的占比。每个的弧度表示数据数量的比例。 + <<< Pie chart >>> + + The pie chart is mainly used for showing proportion of different categories. + Each arc length represents the proportion of data quantity. """ def __init__(self, title="", subtitle="", **kwargs): super(Pie, self).__init__(title, subtitle, **kwargs) @@ -19,57 +21,74 @@ def add(self, *args, **kwargs): def __add(self, name, attr, value, radius=None, center=None, - rosetype="radius", + rosetype=None, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param radius: - 饼图的半径,数组的第一项是内半径,第二项是外半径 - 默认设置成百分比,相对于容器高宽中较小的一项的一半 + Radius of Pie chart, the first of which is inner radius, and the second is outer radius. + Percentage is supported. When set in percentage, + it's relative to the smaller size between height and width of the container. :param center: - 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标 - 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度 + Center position of Pie chart, the first of which is the horizontal position, + and the second is the vertical position. + Percentage is supported. When set in percentage, the item is relative to the + container width, and the second item to the height. :param rosetype: - 是否展示成南丁格尔图,通过半径区分数据大小,可选择两种模式: - radius:扇区圆心角展现数据的百分比,半径展现数据的大小 - area:所有扇区圆心角相同,仅通过半径展现数据大小 + Whether to show as Nightingale chart, which distinguishs data through radius. + There are 2 optional modes: + 'radius' + Use central angle to show the percentage of data, radius to show data size. + 'area' + All the sectors will share the same central angle, the data size is shown + only through radiuses. :param kwargs: """ - if isinstance(attr, list) and isinstance(value, list): - kwargs.update(type="pie") - chart = get_all_options(**kwargs) - assert len(attr) == len(value) - _data = [] - for data in zip(attr, value): - _name, _value = data - _data.append({"name": _name, "value": _value}) - _rmin, _rmax = "0%", "75%" - if radius is not None: - if len(radius) == 2: - _rmin, _rmax = ["%s" %r for r in radius] - _cmin, _cmax = "50%", "50%" - if center is not None: - if len(center) == 2: - _cmin, _cmax = ["%s" %c for c in center] + kwargs.update(type="pie") + chart = get_all_options(**kwargs) + assert len(attr) == len(value) + _data = [] + for data in zip(attr, value): + _name, _value = data + _data.append({"name": _name, "value": _value}) + + _rmin, _rmax = "0%", "75%" + if radius: + if len(radius) == 2: + _rmin, _rmax = ["{}%".format(r) for r in radius] + + _cmin, _cmax = "50%", "50%" + if center: + if len(center) == 2: + _cmin, _cmax = ["{}%".format(c) for c in center] + + if rosetype: if rosetype not in ("radius", "area"): rosetype = "radius" - for a in attr: - self._option.get('legend').get('data').append(a) - self._option.get('series').append({ - "type": "pie", - "name": name, - "data": _data, - "radius": [_rmin, _rmax], - "center": [_cmin, _cmax], - "roseType": rosetype, - "label": chart['label'], - }) - self._legend_visualmap_colorlst(**kwargs) - else: - raise TypeError("attr and value must be list") + + for a in attr: + self._option.get('legend')[0].get('data').append(a) + + _dlst = self._option.get('legend')[0].get('data') + _dset = list(set(_dlst)) + _dset.sort(key=_dlst.index) + self._option.get('legend')[0].update(data=list(_dset)) + + self._option.get('series').append({ + "type": "pie", + "name": name, + "data": _data, + "radius": [_rmin, _rmax], + "center": [_cmin, _cmax], + "roseType": rosetype, + "label": chart['label'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/polar.py b/pyecharts/charts/polar.py index 3c41fb60d..893d67045 100644 --- a/pyecharts/charts/polar.py +++ b/pyecharts/charts/polar.py @@ -1,14 +1,16 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Polar(Base): """ - <<< 极坐标系 >>> - 可以用于散点图和折线图。 + <<< Polar component >>> + + Polar coordinate can be used in scatter and line chart. + Every polar coordinate has an angleAxis and a radiusAxis. """ def __init__(self, title="", subtitle="", **kwargs): super(Polar, self).__init__(title, subtitle, **kwargs) @@ -24,38 +26,70 @@ def __add(self, name, data, start_angle=90, rotate_step=0, boundary_gap=True, - clockwise=True, + is_clockwise=True, + is_stack=False, + axis_range=None, + is_angleaxis_show=True, + is_radiusaxis_show=True, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param data: - 数据项 [极径,极角 [数据值]] + data of polar, [Polar radius, Polar angle, [value]] + it is represented by a two-dimension array -> [[],[]] :param angle_data: - 角度类目数据 + Category data for angle, available in type: 'category' axis. :param radius_data: - 半径类目数据 + Category data for radius, available in type: 'category' axis. :param type: - 图例类型,有 scatter/effectscatter 可选 + chart type,it can be 'scatter', 'effectScatter', 'barAngle', 'barRadius' :param symbol_size: - 标记图形大小 + symbol size :param start_angle: - 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方 + Starting angle of axis. 90 degrees by default, standing for top position of center. + 0 degree stands for right position of center. :param rotate_step: - 刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠 - 旋转的角度从 -90 度到 90 度 + Rotation degree of axis label, which is especially useful when + there is no enough space for category axis. + Rotation degree is from -90 to 90. :param boundary_gap: - 坐标轴两边留白策略 - 类目轴中 boundaryGap 可以配置为 true 和 false - 默认为 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间 - :param clockwise: - 刻度增长是否按顺时针,默认顺时针 + The boundary gap on both sides of a coordinate axis. + The setting and behavior of category axes and non-category axes are different. + The boundaryGap of category axis can be set to either true or false. + Default value is set to be true, in which case axisTick is served + only as a separation line, and labels and data appear only in the + center part of two axis ticks, which is called band. + :param is_clockwise: + Whether the positive position of axis is in clockwise. True for clockwise by default. + :param is_stack: + It specifies whether to stack category axis. + :param axis_range: + axis scale range + :param is_angleaxis_show: + whether show angle axis. + :param is_radiusaxis_show: + whether show radius axis. :param kwargs: """ chart = get_all_options(**kwargs) polar_type = 'value' if type == "line" else "category" - self._option.get('legend').get('data').append(name) + is_stack = "stack" if is_stack else "" + self._option.get('legend')[0].get('data').append(name) + + # By defalut, axis scale range is [None, None] + _amin, _amax = None, None + if axis_range: + if len(axis_range) == 2: + _amin, _amax = axis_range + _area_style = { + "normal": chart['area_style'] + } + if kwargs.get('area_color', None) is None: + _area_style = None + if type in ("scatter", "line"): self._option.get('series').append({ "type": type, @@ -65,7 +99,9 @@ def __add(self, name, data, "symbolSize": symbol_size, "data": data, "label": chart['label'], + "areaStyle": _area_style }) + elif type == "effectScatter": self._option.get('series').append({ "type": type, @@ -78,24 +114,62 @@ def __add(self, name, data, "data": data, "label": chart['label'], }) - self._option.update( - angleAxis={ - "type": polar_type, - "data": angle_data, - "clockwise": clockwise, - "startAngle": start_angle, - "boundaryGap": boundary_gap, - "splitLine": chart['split_line'], - "axisLine": chart['axis_line'] - } - ) - self._option.update( - radiusAxis={ - "type": polar_type, - "data": radius_data, - "axisLine": chart['axis_line'], - "axisLabel": {"rotate": rotate_step} - } - ) + + elif type == "barRadius": + self._option.get('series').append({ + "type": "bar", + "stack": is_stack, + "name": name, + "coordinateSystem": 'polar', + "data": data, + }) + self._option.update(angleAxis={}) + self._option.update( + radiusAxis={ + "type": polar_type, + "data": radius_data, + "z": 50, + }) + + elif type == "barAngle": + self._option.get('series').append({ + "type": "bar", + "stack": is_stack, + "name": name, + "coordinateSystem": 'polar', + "data": data, + }) + self._option.update(radiusAxis={}) + self._option.update( + angleAxis={ + "type": polar_type, + "data": radius_data, + "z": 50 + }) + + if type not in ("barAngle", "barRadius"): + self._option.update( + angleAxis={ + "show":is_angleaxis_show, + "type": polar_type, + "data": angle_data, + "clockwise": is_clockwise, + "startAngle": start_angle, + "boundaryGap": boundary_gap, + "splitLine": chart['split_line'], + "axisLine": chart['axis_line'] + } + ) + self._option.update( + radiusAxis={ + "show": is_radiusaxis_show, + "type": polar_type, + "data": radius_data, + "min": _amin, + "max": _amax, + "axisLine": chart['axis_line'], + "axisLabel": {"rotate": rotate_step} + } + ) self._option.update(polar={}) - self._legend_visualmap_colorlst(**kwargs) + self._config_components(**kwargs) diff --git a/pyecharts/charts/radar.py b/pyecharts/charts/radar.py index b273535ff..05fe5cb2e 100644 --- a/pyecharts/charts/radar.py +++ b/pyecharts/charts/radar.py @@ -1,14 +1,16 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import get_all_options + class Radar(Base): """ - <<< 雷达图 >>> - 雷达图主要用于表现多变量的数据。 + <<< Radar chart >>> + + Radar chart is mainly used to show multi-variable data, + such as the analysis of a football player's varied attributes. It relies radar component. """ def __init__(self, title="", subtitle="", **kwargs): super(Radar, self).__init__(title, subtitle, **kwargs) @@ -16,18 +18,28 @@ def __init__(self, title="", subtitle="", **kwargs): def config(self, schema=None, c_schema=None, shape="", - rader_text_color="#000", + radar_text_color="#333", + radar_text_size=12, **kwargs): - """ 配置 rader 组件选项 + """ config rader component options :param schema: - 默认雷达图的指示器,用来指定雷达图中的多个维度,会对数据处理成 {name:xx, value:xx} 的字典 + The default radar map indicator, used to specify multiple dimensions in the radar map, + will process the data into a dictionary of {name: xx, value: xx} :param c_schema: - 用户自定义雷达图的指示器,用来指定雷达图中的多个维度 + Indicator of radar chart, which is used to assign multiple variables(dimensions) + in radar chart. + name: Indicator's name. + min: The maximum value of indicator. + It is an optional configuration, but we recommend to set it manually. + max: The maximum value of indicator. + It is an optional configuration, but we recommend to set it manually. :param shape: - 雷达图绘制类型,支持 polygon(多边形) 和 circle - :param rader_text_color: - 雷达图数据项字体颜色 + Radar render type, in which 'polygon' and 'circle' are supported. + :param radar_text_color: + Radar chart data item font color + :param radar_text_size: + Radar chart data item font size :param kwargs: """ chart = get_all_options(**kwargs) @@ -42,7 +54,11 @@ def config(self, schema=None, radar={ "indicator": indicator, "shape": shape, - "name": {"textStyle": {"color": rader_text_color}}, + "name": { + "textStyle": { + "color": radar_text_color, + "fontSize": radar_text_size, + }}, "splitLine": chart['split_line'], "splitArea": chart['split_area'], "axisLine": chart['axis_line']} @@ -55,23 +71,31 @@ def __add(self, name, value, item_color=None, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param value: - 数据项,类型为包含列表的列表 [[]]。数据中,每一行是一个『数据项』,每一列属于一个『维度』 + data array of series, it is represented by a two-dimension array -> [[],[]] :param item_color: - 指定单图例颜色 + Specify a single legend color :param kwargs: """ - kwargs.update(flag=True) + kwargs.update(flag=True, type='radar') chart = get_all_options(**kwargs) - self._option.get('legend').get('data').append(name) + self._option.get('legend')[0].get('data').append(name) + self._option.get('series').append({ "type": "radar", "name": name, "data": value, "symbol": chart['symbol'], - "itemStyle": {"normal": {"color": item_color}}, + "label": chart['label'], + "itemStyle": { + "normal": { + "color": item_color + }}, "lineStyle": chart['line_style'], - "areaStyle": {"normal": chart['area_style']} + "areaStyle": { + "normal": chart['area_style'] + }, }) - self._legend_visualmap_colorlst(**kwargs) + self._config_components(**kwargs) diff --git a/pyecharts/charts/sankey.py b/pyecharts/charts/sankey.py new file mode 100644 index 000000000..e0c05bcb5 --- /dev/null +++ b/pyecharts/charts/sankey.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Sankey(Base): + """ + <<< Sankey chart >>> + + Sankey graphs are a specific type of stream graphs, in which the width of each branch is + shown proportionally to the flow quantity. These graphs are typically used to + visualize energy or material or cost transfers between processes. + They can also visualize the energy accounts, material flow accounts on a regional or + national level, and also the breakdown of cost of item or services. + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(Sankey, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, nodes, links, + sankey_node_width=20, + sankey_node_gap=8, + **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param nodes: + Relational nodes data + name:Name of data item. # required!! + value: Value of data item. # required!! + :param links: + Relational data between nodes + source:name of source node on edge # required!! + target:name of target node on edge # required!! + value:value of edge,It can be used in the force layout to map to the length of the edge + :param sankey_node_width: + The node width of rectangle in graph. + :param sankey_node_gap: + The gap between any two regtangles in each column from the graph. + :param kwargs: + :return: + """ + chart = get_all_options(**kwargs) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "sankey", + "name": name, + "layout": None, + "data": nodes, + "links": links, + "nodeWidth": sankey_node_width, + "nodeGap": sankey_node_gap, + "label": chart['label'], + "lineStyle": chart['line_style'], + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/scatter.py b/pyecharts/charts/scatter.py index e2020db54..32e98c661 100644 --- a/pyecharts/charts/scatter.py +++ b/pyecharts/charts/scatter.py @@ -1,19 +1,21 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 -try: - from PIL import Image -except ImportError: - import Image +from PIL import Image from pyecharts.base import Base from pyecharts.option import get_all_options + class Scatter(Base): """ - <<< 散点图 >>> - 直角坐标系上的散点图可以用来展现数据的 x,y 之间的关系,如果数据项有多个维度,可以用颜色来表现,利用 geo 组件。 + <<< Scatter chart >>> + + The scatter chart in rectangular coordinate could be used to present the + relation between x and y. + If data have multiple dimensions, the values of the other dimensions can + be visualized through symbol with various sizes and colors,which becomes + a bubble chart. These can be done by using with visualMap component. """ def __init__(self, title="", subtitle="", **kwargs): super(Scatter, self).__init__(title, subtitle, **kwargs) @@ -21,58 +23,66 @@ def __init__(self, title="", subtitle="", **kwargs): def add(self, *args, **kwargs): self.__add(*args, **kwargs) - def __add(self, name, x_value, y_value, + def __add(self, name, x_axis, y_axis, extra_data=None, symbol_size=10, **kwargs): """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. :param x_axis: - x 坐标轴数据 + data of xAxis :param y_axis: - y 坐标轴数据 + data of yAxis + :param extra_data: + other dimension data :param symbol_size: - 标记图形大小 + symbol size :param kwargs: """ - if isinstance(x_value, list) and isinstance(y_value, list): - assert len(x_value) == len(y_value) - kwargs.update(type="scatter") - chart = get_all_options(**kwargs) - xaxis, yaxis = chart['xy_axis'] - self._option.update(xAxis=xaxis, yAxis=yaxis) - self._option.get('legend').get('data').append(name) - self._option.get('series').append({ - "type": "scatter", - "name": name, - "symbol": chart['symbol'], - "symbolSize": symbol_size, - "data": [list(z) for z in zip(x_value, y_value)], - "label": chart['label'], - }) - self._legend_visualmap_colorlst(**kwargs) + assert len(x_axis) == len(y_axis) + kwargs.update(type="scatter", x_axis=x_axis) + chart = get_all_options(**kwargs) + + xaxis, yaxis = chart['xy_axis'] + self._option.update(xAxis=xaxis, yAxis=yaxis) + self._option.get('legend')[0].get('data').append(name) + + if extra_data: + _data = [list(z) for z in zip(x_axis, y_axis, extra_data)] else: - raise TypeError("x_axis and y_axis must be list") + _data = [list(z) for z in zip(x_axis, y_axis)] + + self._option.get('series').append({ + "type": "scatter", + "name": name, + "symbol": chart['symbol'], + "symbolSize": symbol_size, + "data": _data, + "label": chart['label'], + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) def draw(self, path, color=None): - """ 将图片上的像素点转换为数组,如 color 为(255,255,255)时只保留非白色像素点的坐标信息 + """ Converts the pixels on the image to an array :param path: - 转换图片的地址 + path of Image that want to draw :param color: - 所要排除的颜色 + select a color to exclude, (225, 225, 225) means Keep only white pixel information. :return: """ color = color or (255, 255, 255) im = Image.open(path) width, height = im.size imarray = im.load() - # 垂直翻转图片 + # flip vertical Images for x in range(width): for y in range(height): if y < int(height / 2): imarray[x, y], imarray[x, height-y-1] = imarray[x, height-y-1], imarray[x, y] - # [:3] 为 r,g,b + # [:3] is r,g,b result = [(x, y) for x in range(width) for y in range(height) if imarray[x, y][:3] != color] return self.cast(result) diff --git a/pyecharts/charts/scatter3D.py b/pyecharts/charts/scatter3D.py new file mode 100644 index 000000000..b94294ecb --- /dev/null +++ b/pyecharts/charts/scatter3D.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class Scatter3D(Base): + """ + <<< Scatter3D chart >>> + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(Scatter3D, self).__init__(title, subtitle, **kwargs) + self._js_dependencies.add('echartsgl') + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, data, + grid3d_opacity=1, + **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param data: + data of Scatter3D + :param grid3d_opacity: + opacity of gird3D item + :param kwargs: + :return: + """ + kwargs.update(xaxis3d_type='value', + yaxis3d_type='value', + zaxis3d_type='value') + chart = get_all_options(**kwargs) + + self._option.get('legend')[0].get('data').append(name) + self._option.update( + xAxis3D=chart['xaxis3D'], + yAxis3D=chart['yaxis3D'], + zAxis3D=chart['zaxis3D'], + grid3D=chart['grid3D'] + ) + + self._option.get('series').append({ + "type": "scatter3D", + "name": name, + "data": data, + "label": chart['label'], + "itemStyle": { + "opacity": grid3d_opacity + } + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/themeriver.py b/pyecharts/charts/themeriver.py new file mode 100644 index 000000000..684a4b170 --- /dev/null +++ b/pyecharts/charts/themeriver.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class ThemeRiver(Base): + """ + <<< Theme river >>> + + It is a special flow graph which is mainly used to present the + changes of an event or theme during a period. + """ + def __init__(self, title="", subtitle="", **kwargs): + super(ThemeRiver, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, data, **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption.It must be a list. + :param data: + data array of series, it is represented by a two-dimension array -> [[],[]] + every data item need three value, for example + ['2015/11/08',10,'DQ'] -> [time, value, legend(category)] + :param kwargs: + :return: + """ + chart = get_all_options(**kwargs) + self._option.get('legend')[0].get('data').extend(name) + + self._option.get('series').append({ + "type": "themeRiver", + "name": name, + "data": data, + "label": chart['label'], + "seriesId": self._option.get('series_id'), + }) + + self._option.update(singleAxis={"type": "time"}) + self._config_components(**kwargs) + self._option.get('tooltip').update(trigger='axis') diff --git a/pyecharts/charts/treemap.py b/pyecharts/charts/treemap.py new file mode 100644 index 000000000..671aa3da8 --- /dev/null +++ b/pyecharts/charts/treemap.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.base import Base +from pyecharts.option import get_all_options + + +class TreeMap(Base): + """ + <<< TreeMap >>> + + TreeMap is a common way to present "hierarchical data" or "tree data". + It primarily highlights the important nodes at all hierarchies in 『Tree』 + with area. + """ + + def __init__(self, title="", subtitle="", **kwargs): + super(TreeMap, self).__init__(title, subtitle, **kwargs) + + def add(self, *args, **kwargs): + self.__add(*args, **kwargs) + + def __add(self, name, data, + treemap_left_depth=None, + treemap_drilldown_icon='▶', + treemap_visible_min=10, + **kwargs): + """ + + :param name: + Series name used for displaying in tooltip and filtering with legend, + or updating data and configuration with setOption. + :param data: + the the data format of series-treemap.data is a forest. For example: + [ # Tips, the top level is a list. + { + value: 1212, + children: [ + { + # The value of this node, indicating the area size. + value: 2323, + # show the description text in rectangle. + name: 'description of this node', + children: [...], + }, + { + value: 4545, + name: 'description of this node', + children: [ + { + value: 5656, + name: 'description of this node', + children: [...] + }, + ... + ] + } + ] + }, + ... + ] + :param treemap_left_depth: + When leafDepth is set, the feature "drill down" is enabled, which means + when clicking a tree node, this node will be set as root and its + children will be shown. + leafDepth represents how many levels are shown at most. For example, + when leafDepth is set to 1, only one level will be shown. + :param treemap_drilldown_icon: + Marker when the node is able to be drilled down. + :param treemap_visible_min: + A node will not be shown when its area size is smaller than this + value (unit: px square). + In this way, tiny nodes will be hidden, otherwise they will huddle + together. When user zoom the treemap, the area size will increase + and the rectangle will be shown if the area size is larger than + this threshold. + :param kwargs: + """ + chart = get_all_options(**kwargs) + self._option.get('legend')[0].get('data').append(name) + + self._option.get('series').append({ + "type": "treemap", + "name": name, + "data": data, + "label": chart['label'], + "leafDepth": treemap_left_depth, + "drillDownIcon": treemap_drilldown_icon, + "visibleMin": treemap_visible_min, + "seriesId": self._option.get('series_id'), + }) + self._config_components(**kwargs) diff --git a/pyecharts/charts/wordcloud.py b/pyecharts/charts/wordcloud.py index 27e877e53..c9af18d83 100644 --- a/pyecharts/charts/wordcloud.py +++ b/pyecharts/charts/wordcloud.py @@ -1,16 +1,17 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 from pyecharts.base import Base from pyecharts.option import gen_color + class WordCloud(Base): """ - <<< 词云图 >>> + <<< WordCloud chart >>> """ def __init__(self, title="", subtitle="", **kwargs): super(WordCloud, self).__init__(title, subtitle, **kwargs) + self._js_dependencies.add('wordcloud') def add(self, *args, **kwargs): self.__add(*args, **kwargs) @@ -23,51 +24,58 @@ def __add(self, name, attr, value, """ :param name: - 图例名称 + Series name used for displaying in tooltip and filtering with legend, + or updaing data and configuration with setOption. :param attr: - 属性名称 + name of attribute :param value: - 属性所对应的值 + value of attribute :param shape: - 词云图轮廓,包括 - cardioid, diamond, triangle-forward, triangle, pentagon, star + shape of wordcloud + It can be 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', + 'pentagon', 'star' :param word_gap: - 单词间隔 + Gap of word + size of the grid in pixels for marking the availability of the canvas + the larger the grid size, the bigger the gap between words. :param word_size_range: - 单词字体大小范围 + Text size range which the value in data will be mapped to. + Default to have minimum 12px and maximum 60px size. :param rotate_step: - 旋转单词角度,默认为 45 度 + Text rotation range and step in degree. + Text will be rotated randomly in range [-90, 90] by rotationStep 45 """ - if isinstance(attr, list) and isinstance(value, list): - assert len(attr) == len(value) - _data = [] - for data in zip(attr, value): - _name, _value = data - _data.append({ - "name": _name, - "value": _value, - "textStyle": { - "normal": {"color": gen_color()}} - }) - _min, _max = 12, 60 - if word_size_range is not None: - if len(word_size_range) == 2: - _min, _max = word_size_range - _rmin, _rmax = -90, 90 - # 确保选择形状时能够生效,需使字体不旋转 - if shape in ("cardioid", "diamond", "triangle-forward", "triangle", "pentagon", "star"): - _rmin = _rmax = 0 - else: - shape = "circle" - self._option.get('series').append({ - "type": "wordCloud", - "name": name, - "shape": shape, - "rotationRange": [_rmin, _rmax], - "rotationStep": rotate_step, - "girdSize": word_gap, - "sizeRange": [_min, _max], - "data": _data + assert len(attr) == len(value) + _data = [] + for data in zip(attr, value): + _name, _value = data + _data.append({ + "name": _name, + "value": _value, + "textStyle": { + "normal": { + "color": gen_color() + }} }) + _min, _max = 12, 60 + if word_size_range is not None: + if len(word_size_range) == 2: + _min, _max = word_size_range + + _rmin, _rmax = -90, 90 + # make sure shape valid, need to set ratated range [-90, 90] + if shape in ("cardioid", "diamond", "triangle-forward", "triangle", "pentagon", "star"): + _rmin = _rmax = 0 else: - raise TypeError("attr and value must be list") + shape = "circle" + + self._option.get('series').append({ + "type": "wordCloud", + "name": name, + "shape": shape, + "rotationRange": [_rmin, _rmax], + "rotationStep": rotate_step, + "girdSize": word_gap, + "sizeRange": [_min, _max], + "data": _data + }) diff --git a/pyecharts/constants.py b/pyecharts/constants.py new file mode 100644 index 000000000..0175ca534 --- /dev/null +++ b/pyecharts/constants.py @@ -0,0 +1,3744 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +import os +import json +import codecs + +from pyecharts.utils import get_resource_dir + + +DEFAULT_HOST = 'https://chfw.github.io/jupyter-echarts/echarts' + +CONFIGURATION = dict( + HOST='/nbextensions/echarts' +) + +DEFAULT_ECHARTS_REGISTRY = os.path.join( + get_resource_dir('templates'), 'js', 'echarts', 'registry.json') + +with codecs.open(DEFAULT_ECHARTS_REGISTRY, 'r', 'utf-8') as f: + content = f.read() + CONFIG = json.loads(content) + +DEFAULT_JS_LIBRARIES = CONFIG['FILE_MAP'] +CITY_NAME_PINYIN_MAP = CONFIG['PINYIN_MAP'] + +PAGE_TITLE = "Echarts" + + +CITY_GEO_COORDS = { + '阿城': [126.58, 45.32], + '阿克苏': [80.19, 41.09], + '阿勒泰': [88.12, 47.50], + '阿图什': [76.08, 39.42], + '安达': [125.18, 46.24], + '安国': [115.20, 38.24], + '安康': [109.01, 32.41], + '安陆': [113.41, 31.15], + '安庆': [117.02, 30.31], + '安丘': [119.12, 36.25], + '安顺': [105.55, 26.14], + '安阳': [114.35, 36.1], + '鞍山': [122.85, 41.12], + '澳门': [115.07, 21.33], + '巴中': [106.43, 31.51], + '霸州': [116.24, 39.06], + '白城': [122.50, 45.38], + '白山': [126.26, 41.56], + '白银': [104.12, 36.33], + '百色': [106.36, 23.54], + '蚌埠': [117.21, 32.56], + '包头': [110, 40.58], + '宝鸡': [107.15, 34.38], + '保定': [115.48, 38.85], + '保山': [99.10, 25.08], + '北海': [109.12, 21.49], + '北京': [116.46, 39.92], + '北流': [110.21, 22.42], + '北票': [120.47, 41.48], + '本溪': [123.73, 41.3], + '毕节': [105.18, 27.18], + '滨州': [118.03, 37.36], + '亳州': [115.47, 33.52], + '博乐': [82.08, 44.57], + '沧州': [116.83, 38.33], + '昌吉': [87.18, 44.02], + '昌邑': [119.24, 39.52], + '常德': [111.69, 29.05], + '常熟': [120.74, 31.64], + '常州': [119.95, 31.79], + '巢湖': [117.52, 31.36], + '朝阳': [120.27, 41.34], + '潮阳': [116.36, 23.16], + '潮州': [116.63, 23.68], + '郴州': [113.02, 25.46], + '成都': [104.06, 30.67], + '承德': [117.93, 40.97], + '澄海': [116.46, 23.28], + '赤峰': [118.87, 42.28], + '赤水': [105.42, 28.34], + '重庆': [106.54, 29.59], + '崇州': [103.40, 30.39], + '滁州': [118.18, 32.18], + '楚雄': [101.32, 25.01], + '慈溪': [121.15, 30.11], + '从化': [113.33, 23.33], + '达川': [107.29, 31.14], + '大安': [124.18, 45.30], + '大理': [100.13, 25.34], + '大连': [121.62, 38.92], + '大庆': [125.03, 46.58], + '大石桥': [122.31, 40.37], + '大同': [113.3, 40.12], + '大冶': [114.58, 30.06], + '丹东': [124.37, 40.13], + '丹江口': [108.30, 32.33], + '丹阳': [119.32, 32.00], + '儋州': [109.34, 19.31], + '当阳': [111.47, 30.50], + '德惠': [125.42, 44.32], + '德令哈': [97.23, 37.22], + '德兴': [117.35, 28.57], + '德阳': [104.37, 31.13], + '德州': [116.29, 37.45], + '登封': [113.02, 34.27], + '邓州': [112.05, 32.42], + '定州': [115.00, 38.30], + '东川': [103.12, 26.06], + '东港': [124.08, 39.53], + '东莞': [113.75, 23.04], + '东胜': [109.59, 39.48], + '东台': [120.19, 32.51], + '东阳': [120.14, 29.16], + '东营': [118.49, 37.46], + '都江堰': [103.37, 31.01], + '都匀': [107.31, 26.15], + '敦化': [128.13, 43.22], + '敦煌': [94.41, 40.08], + '峨眉山': [103.29, 29.36], + '额尔古纳': [120.11, 50.13], + '鄂尔多斯': [109.781327, 39.608266], + '鄂州': [114.52, 30.23], + '恩平': [112.19, 22.12], + '恩施': [109.29, 30.16], + '二连浩特': [111.58, 43.38], + '番禺': [113.22, 22.57], + '防城港': [108.20, 21.37], + '肥城': [116.46, 36.14], + '丰城': [115.48, 28.12], + '丰南': [118.06, 39.34], + '丰镇': [113.09, 40.27], + '凤城': [124.02, 40.28], + '奉化': [121.24, 29.39], + '佛山': [113.11, 23.05], + '涪陵': [107.22, 29.42], + '福安': [119.39, 27.06], + '福清': [119.23, 25.42], + '福州': [119.3, 26.08], + '抚顺': [123.97, 41.97], + '阜康': [87.58, 44.09], + '阜新': [121.39, 42.01], + '阜阳': [115.48, 32.54], + '富锦': [132.02, 47.15], + '富阳': [119.95, 30.07], + '盖州': [122.21, 40.24], + '赣州': [114.56, 28.52], + '高安': [115.22, 28.25], + '高碑店': [115.51, 39.20], + '高密': [119.44, 36.22], + '高明': [112.50, 22.53], + '高平': [112.55, 35.48], + '高要': [112.26, 23.02], + '高邮': [119.27, 32.47], + '高州': [110.50, 21.54], + '格尔木': [94.55, 36.26], + '个旧': [103.09, 23.21], + '根河': [121.29, 50.48], + '公主岭': [124.49, 43.31], + '巩义': [112.58, 34.46], + '古交': [112.09, 37.54], + '广汉': [104.15, 30.58], + '广水': [113.48, 31.37], + '广元': [105.51, 32.28], + '广州': [113.23, 23.16], + '贵池': [117.28, 30.39], + '贵港': [109.36, 23.06], + '贵阳': [106.71, 26.57], + '桂林': [110.28, 25.29], + '桂平': [110.04, 23.22], + '哈尔滨': [126.63, 45.75], + '哈密': [93.28, 42.50], + '海城': [122.43, 40.51], + '海口': [110.35, 20.02], + '海拉尔': [119.39, 49.12], + '海林': [129.21, 44.35], + '海伦': [126.57, 47.28], + '海门': [121.15, 31.89], + '海宁': [120.42, 30.32], + '邯郸': [114.47, 36.6], + '韩城': [110.27, 35.28], + '汉中': [107.01, 33.04], + '杭州': [120.19, 30.26], + '蒿城': [114.50, 38.02], + '合川': [106.15, 30.02], + '合肥': [117.27, 31.86], + '合山': [108.52, 23.47], + '和龙': [129.00, 42.32], + '和田': [79.55, 37.09], + '河池': [108.03, 24.42], + '河间': [116.05, 38.26], + '河津': [110.41, 35.35], + '河源': [114.68, 23.73], + '菏泽': [115.480656, 35.23375], + '鹤壁': [114.11, 35.54], + '鹤岗': [130.16, 47.20], + '鹤山': [112.57, 22.46], + '黑河': [127.29, 50.14], + '衡水': [115.72, 37.72], + '衡阳': [112.37, 26.53], + '洪湖': [113.27, 29.48], + '洪江': [109.59, 27.07], + '侯马': [111.21, 35.37], + '呼和浩特': [111.65, 40.82], + '湖州': [120.1, 30.86], + '葫芦岛': [120.836932, 40.711052], + '花都': [113.12, 23.23], + '华阴': [110.05, 34.34], + '华蓥': [106.44, 30.26], + '化州': [110.37, 21.39], + '桦甸': [126.44, 42.58], + '怀化': [109.58, 27.33], + '淮安': [119.15, 33.5], + '淮北': [116.47, 33.57], + '淮南': [116.58, 32.37], + '淮阴': [119.02, 33.36], + '黄骅': [117.21, 38.21], + '黄山': [118.18, 29.43], + '黄石': [115.06, 30.12], + '黄州': [114.52, 30.27], + '珲春': [130.22, 42.52], + '辉县': [113.47, 35.27], + '惠阳': [114.28, 22.48], + '惠州': [114.4, 23.09], + '霍林郭勒': [119.38, 45.32], + '霍州': [111.42, 36.34], + '鸡西': [130.57, 45.17], + '吉安': [114.58, 27.07], + '吉林': [126.57, 43.87], + '吉首': [109.43, 28.18], + '即墨': [120.45, 36.38], + '集安': [126.11, 41.08], + '集宁': [113.06, 41.02], + '济南': [117, 36.65], + '济宁': [116.59, 35.38], + '济源': [112.35, 35.04], + '冀州': [115.33, 37.34], + '佳木斯': [130.22, 46.47], + '嘉兴': [120.76, 30.77], + '嘉峪关': [98.289152, 39.77313], + '简阳': [104.32, 30.24], + '建德': [119.16, 29.29], + '建瓯': [118.20, 27.03], + '建阳': [118.07, 27.21], + '江都': [119.32, 32.26], + '江津': [106.16, 29.18], + '江门': [113.06, 22.61], + '江山': [118.37, 28.45], + '江阴': [120.26, 31.91], + '江油': [104.42, 31.48], + '姜堰': [120.08, 32.34], + '胶南': [119.97, 35.88], + '胶州': [120.03336, 36.264622], + '焦作': [113.21, 35.24], + '蛟河': [127.21, 43.42], + '揭阳': [116.35, 23.55], + '介休': [111.55, 37.02], + '界首': [115.21, 33.15], + '金昌': [102.188043, 38.520089], + '金华': [119.64, 29.12], + '金坛': [119.56, 31.74], + '津市': [111.52, 29.38], + '锦州': [121.15, 41.13], + '晋城': [112.51, 35.30], + '晋江': [118.35, 24.49], + '晋州': [115.02, 38.02], + '荆门': [112.12, 31.02], + '荆沙': [112.16, 30.18], + '荆州': [112.239741, 30.335165], + '井冈山': [114.10, 26.34], + '景德镇': [117.13, 29.17], + '景洪': [100.48, 22.01], + '靖江': [120.17, 32.02], + '九江': [115.97, 29.71], + '九台': [125.51, 44.09], + '酒泉': [98.31, 39.44], + '句容': [119.16, 31.95], + '喀什': [75.59, 39.30], + '开封': [114.35, 34.79], + '开平': [112.40, 22.22], + '开原': [124.02, 42.32], + '开远': [103.13, 23.43], + '凯里': [107.58, 26.35], + '克拉玛依': [84.77, 45.59], + '库尔勒': [86.06, 41.68], + '奎屯': [84.56, 44.27], + '昆明': [102.73, 25.04], + '昆山': [120.95, 31.39], + '廓坊': [116.42, 39.31], + '拉萨': [91.11, 29.97], + '莱芜': [117.67, 36.19], + '莱西': [120.53, 36.86], + '莱阳': [120.42, 36.58], + '莱州': [119.942327, 37.177017], + '兰溪': [119.28, 29.12], + '兰州': [103.73, 36.03], + '阆中': [105.58, 31.36], + '廊坊': [116.7, 39.53], + '老河口': [111.40, 32.23], + '乐昌': [113.21, 25.09], + '乐陵': [117.12, 37.44], + '乐平': [117.08, 28.58], + '乐清': [120.58, 28.08], + '乐山': [103.44, 29.36], + '雷州': [110.04, 20.54], + '耒阳': [112.51, 26.24], + '冷水江': [111.26, 27.42], + '冷水滩': [111.35, 26.26], + '醴陵': [113.30, 27.40], + '丽水': [119.92, 28.45], + '利川': [108.56, 30.18], + '溧阳': [119.48, 31.43], + '连云港': [119.16, 34.59], + '连州': [112.23, 24.48], + '涟源': [111.41, 27.41], + '廉江': [110.17, 21.37], + '辽阳': [123.12, 41.16], + '辽源': [125.09, 42.54], + '聊城': [115.97, 36.45], + '林州': [113.49, 36.03], + '临安': [119.72, 30.23], + '临川': [116.21, 27.59], + '临汾': [111.5, 36.08], + '临海': [121.08, 28.51], + '临河': [107.22, 40.46], + '临江': [126.53, 41.49], + '临清': [115.42, 36.51], + '临夏': [103.12, 35.37], + '临湘': [113.27, 29.29], + '临沂': [118.35, 35.05], + '赁祥': [106.44, 22.07], + '灵宝': [110.52, 34.31], + '凌海': [121.21, 41.10], + '凌源': [119.22, 41.14], + '浏阳': [113.37, 28.09], + '柳州': [109.4, 24.33], + '六安': [116.28, 31.44], + '六盘水': [104.50, 26.35], + '龙海': [117.48, 24.26], + '龙井': [129.26, 42.46], + '龙口': [120.21, 37.39], + '龙泉': [119.08, 28.04], + '龙岩': [117.01, 25.06], + '娄底': [111.59, 27.44], + '泸州': [105.39, 28.91], + '鹿泉': [114.19, 38.04], + '潞城': [113.14, 36.21], + '罗定': [111.33, 22.46], + '洛阳': [112.44, 34.7], + '漯河': [114.02, 33.33], + '麻城': [115.01, 31.10], + '马鞍山': [118.48, 31.56], + '满洲里': [117.23, 49.35], + '茂名': [110.88, 21.68], + '梅河口': [125.40, 42.32], + '梅州': [116.1, 24.55], + '汨罗': [113.03, 28.49], + '密山': [131.50, 45.32], + '绵阳': [104.73, 31.48], + '明光': [117.58, 32.47], + '牡丹江': [129.58, 44.6], + '南安': [118.23, 24.57], + '南昌': [115.89, 28.68], + '南充': [106.110698, 30.837793], + '南川': [107.05, 29.10], + '南宫': [115.23, 37.22], + '南海': [113.09, 23.01], + '南京': [118.78, 32.04], + '南宁': [108.33, 22.84], + '南平': [118.10, 26.38], + '南通': [121.05, 32.08], + '南阳': [112.32, 33.00], + '讷河': [124.51, 48.29], + '内江': [105.02, 29.36], + '宁安': [129.28, 44.21], + '宁波': [121.56, 29.86], + '宁德': [119.31, 26.39], + '攀枝花': [101.718637, 26.582347], + '盘锦': [122.070714, 41.119997], + '彭州': [103.57, 30.59], + '蓬莱': [120.75, 37.8], + '邳州': [117.59, 34.19], + '平顶山': [113.29, 33.75], + '平度': [119.97, 36.77], + '平湖': [121.01, 30.42], + '平凉': [106.40, 35.32], + '萍乡': [113.50, 27.37], + '泊头': [116.34, 38.04], + '莆田': [119.01, 24.26], + '濮阳': [115.01, 35.44], + '浦圻': [113.51, 29.42], + '普兰店': [121.58, 39.23], + '普宁': [116.10, 23.18], + '七台河': [130.49, 45.48], + '齐齐哈尔': [123.97, 47.33], + '启乐': [121.39, 31.48], + '潜江': [112.53, 30.26], + '钦州': [108.37, 21.57], + '秦皇岛': [119.57, 39.95], + '沁阳': [112.57, 35.05], + '青岛': [120.33, 36.07], + '青铜峡': [105.59, 37.56], + '青州': [118.28, 36.42], + '清远': [113.01, 23.7], + '清镇': [106.27, 26.33], + '邛崃': [103.28, 30.26], + '琼海': [110.28, 19.14], + '琼山': [110.21, 19.59], + '曲阜': [116.58, 35.36], + '曲靖': [103.79, 25.51], + '衢州': [118.88, 28.97], + '泉州': [118.58, 24.93], + '任丘': [116.07, 38.42], + '日喀则': [88.51, 29.16], + '日照': [119.46, 35.42], + '荣成': [122.41, 37.16], + '如皋': [120.33, 32.23], + '汝州': [112.50, 34.09], + '乳山': [121.52, 36.89], + '瑞安': [120.38, 27.48], + '瑞昌': [115.38, 29.40], + '瑞金': [116.01, 25.53], + '瑞丽': [97.50, 24.00], + '三河': [117.04, 39.58], + '三门峡': [111.19, 34.76], + '三明': [117.36, 26.13], + '三水': [112.52, 23.10], + '三亚': [109.511909, 18.252847], + '沙河': [114.30, 36.51], + '厦门': [118.1, 24.46], + '汕头': [116.69, 23.39], + '汕尾': [115.375279, 22.786211], + '商丘': [115.38, 34.26], + '商州': [109.57, 33.52], + '上海': [121.48, 31.22], + '上饶': [117.58, 25.27], + '上虞': [120.52, 30.01], + '尚志': [127.55, 45.14], + '韶关': [113.62, 24.84], + '韶山': [112.29, 27.54], + '邵武': [117.29, 27.20], + '邵阳': [111.28, 27.14], + '绍兴': [120.58, 30.01], + '深圳': [114.07, 22.62], + '深州': [115.32, 38.01], + '沈阳': [123.38, 41.8], + '十堰': [110.47, 32.40], + '石河子': [86.00, 44.18], + '石家庄': [114.48, 38.03], + '石狮': [118.38, 24.44], + '石首': [112.24, 29.43], + '石嘴山': [106.39, 39.04], + '寿光': [118.73, 36.86], + '舒兰': [126.57, 44.24], + '双城': [126.15, 45.22], + '双鸭山': [131.11, 46.38], + '顺德': [113.15, 22.50], + '朔州': [112.26, 39.19], + '思茅': [100.58, 22.48], + '四会': [112.41, 23.21], + '四平': [124.22, 43.10], + '松原': [124.49, 45.11], + '苏州': [120.62, 31.32], + '宿迁': [118.3, 33.96], + '宿州': [116.58, 33.38], + '绥芬河': [131.11, 44.25], + '绥化': [126.59, 46.38], + '随州': [113.22, 31.42], + '遂宁': [105.33, 30.31], + '塔城': [82.59, 46.46], + '台北': [121.30, 25.03], + '台山': [112.48, 22.15], + '台州': [121.420757, 28.656386], + '太仓': [121.1, 31.45], + '太原': [112.53, 37.87], + '泰安': [117.13, 36.18], + '泰兴': [120.01, 32.10], + '泰州': [119.9, 32.49], + '唐山': [118.02, 39.63], + '洮南': [122.47, 45.20], + '滕州': [117.09, 35.06], + '天津': [117.2, 39.13], + '天门': [113.10, 30.39], + '天水': [105.42, 34.37], + '天长': [118.59, 32.41], + '铁法': [123.32, 42.28], + '铁力': [128.01, 46.59], + '铁岭': [123.51, 42.18], + '通化': [125.56, 41.43], + '通辽': [122.16, 43.37], + '通什': [109.31, 18.46], + '通州': [121.03, 32.05], + '同江': [132.30, 47.39], + '桐乡': [120.32, 30.38], + '铜川': [109.11, 35.09], + '铜陵': [117.48, 30.56], + '铜仁': [109.12, 27.43], + '图们': [129.51, 42.57], + '吐鲁番': [89.11, 42.54], + '瓦房店': [121.979603, 39.627114], + '畹町': [98.04, 24.06], + '万县': [108.21, 30.50], + '万源': [108.03, 32.03], + '威海': [122.1, 37.5], + '潍坊': [119.1, 36.62], + '卫辉': [114.03, 35.24], + '渭南': [109.5, 34.52], + '温岭': [121.21, 28.22], + '温州': [120.65, 28.01], + '文登': [122.05, 37.2], + '乌海': [106.48, 39.40], + '乌兰浩特': [122.03, 46.03], + '乌鲁木齐': [87.68, 43.77], + '无锡': [120.29, 31.59], + '吴川': [110.47, 21.26], + '吴江': [120.63, 31.16], + '吴忠': [106.11, 37.59], + '芜湖': [118.38, 31.33], + '梧州': [111.20, 23.29], + '五常': [127.11, 44.55], + '五大连池': [126.07, 48.38], + '武安': [114.11, 36.42], + '武冈': [110.37, 26.43], + '武汉': [114.31, 30.52], + '武威': [102.39, 37.56], + '武穴': [115.33, 29.51], + '武夷山': [118.02, 27.46], + '舞钢': [113.30, 33.17], + '西安': [108.95, 34.27], + '西昌': [102.16, 27.54], + '西峰': [107.40, 35.45], + '西宁': [101.74, 36.56], + '锡林浩特': [116.03, 43.57], + '仙桃': [113.27, 30.22], + '咸宁': [114.17, 29.53], + '咸阳': [108.72, 34.36], + '香港': [115.12, 21.23], + '湘潭': [112.91, 27.87], + '湘乡': [112.31, 27.44], + '襄樊': [112.08, 32.02], + '项城': [114.54, 33.26], + '萧山': [120.16, 30.09], + '孝感': [113.54, 30.56], + '孝义': [111.48, 37.08], + '忻州': [112.43, 38.24], + '辛集': [115.12, 37.54], + '新会': [113.01, 22.32], + '新乐': [114.41, 38.20], + '新密': [113.22, 34.31], + '新民': [122.49, 41.59], + '新泰': [117.45, 35.54], + '新乡': [113.52, 35.18], + '新沂': [118.20, 34.22], + '新余': [114.56, 27.48], + '新郑': [113.43, 34.24], + '信阳': [114.04, 32.07], + '邢台': [114.48, 37.05], + '荥阳': [113.21, 34.46], + '兴城': [120.41, 40.37], + '兴化': [119.50, 32.56], + '兴宁': [115.43, 24.09], + '兴平': [108.29, 34.18], + '兴义': [104.53, 25.05], + '徐州': [117.2, 34.26], + '许昌': [113.49, 34.01], + '宣威': [104.06, 26.13], + '宣州': [118.44, 30.57], + '牙克石': [120.40, 49.17], + '雅安': [102.59, 29.59], + '烟台': [121.39, 37.52], + '延安': [109.47, 36.6], + '延吉': [129.30, 42.54], + '盐城': [120.13, 33.38], + '盐在': [120.08, 33.22], + '兖州': [116.49, 35.32], + '偃师': [112.47, 34.43], + '扬中': [119.49, 32.14], + '扬州': [119.42, 32.39], + '阳春': [111.48, 22.10], + '阳江': [111.95, 21.85], + '阳泉': [113.57, 37.85], + '伊春': [128.56, 47.42], + '伊宁': [81.20, 43.55], + '仪征': [119.10, 32.16], + '宜宾': [104.56, 29.77], + '宜昌': [111.3, 30.7], + '宜城': [112.15, 31.42], + '宜春': [114.23, 27.47], + '宜兴': [119.82, 31.36], + '宜州': [108.40, 24.28], + '义马': [111.55, 34.43], + '义乌': [120.06, 29.32], + '益阳': [112.20, 28.36], + '银川': [106.27, 38.47], + '应城': [113.33, 30.57], + '英德': [113.22, 24.10], + '鹰潭': [117.03, 28.14], + '营口': [122.18, 40.65], + '永安': [117.23, 25.58], + '永川': [105.53, 29.23], + '永济': [110.27, 34.52], + '永康': [120.01, 29.54], + '永州': [111.37, 26.13], + '余杭': [120.18, 30.26], + '余姚': [121.10, 30.02], + '愉树': [126.32, 44.49], + '榆次': [112.43, 37.41], + '榆林': [109.47, 38.18], + '禹城': [116.39, 36.56], + '禹州': [113.28, 34.09], + '玉林': [110.09, 22.38], + '玉门': [97.35, 39.49], + '玉溪': [102.52, 24.35], + '沅江': [112.22, 28.50], + '原平': [112.42, 38.43], + '岳阳': [113.09, 29.37], + '云浮': [112.02, 22.93], + '运城': [110.59, 35.02], + '枣阳': [112.44, 32.07], + '枣庄': [117.57, 34.86], + '增城': [113.49, 23.18], + '扎兰屯': [122.47, 48.00], + '湛江': [110.359377, 21.270708], + '张家港': [120.555821, 31.875428], + '张家界': [110.479191, 29.117096], + '张家口': [114.87, 40.82], + '张掖': [100.26, 38.56], + '章丘': [117.53, 36.72], + '漳平': [117.24, 25.17], + '漳州': [117.39, 24.31], + '樟树': [115.32, 28.03], + '长春': [125.35, 43.88], + '长葛': [113.47, 34.12], + '长乐': [119.31, 25.58], + '长沙': [113, 28.21], + '长治': [113.08, 36.18], + '招远': [120.38, 37.35], + '昭通': [103.42, 27.20], + '肇东': [125.58, 46.04], + '肇庆': [112.44, 23.05], + '镇江': [119.44, 32.2], + '郑州': [113.65, 34.76], + '枝城': [111.27, 30.23], + '中山': [113.38, 22.52], + '钟祥': [112.34, 31.10], + '舟山': [122.207216, 29.985295], + '周口': [114.38, 33.37], + '株洲': [113.16, 27.83], + '珠海': [113.52, 22.3], + '诸城': [119.24, 35.59], + '诸暨': [120.23, 29.71], + '驻马店': [114.01, 32.58], + '庄河': [122.58, 39.41], + '涿州': [115.59, 39.29], + '资兴': [113.13, 25.58], + '资阳': [104.38, 30.09], + '淄博': [118.05, 36.78], + '自贡': [104.778442, 29.33903], + '邹城': [116.58, 35.24], + '遵化': [117.58, 40.11], + '遵义': [106.9, 27.7], + '北京市': [116.4, 39.9], + '天安门': [116.38, 39.9], + '东城区': [116.42, 39.93], + '西城区': [116.37, 39.92], + '崇文区': [116.43, 39.88], + '宣武区': [116.35, 39.87], + '丰台区': [116.28, 39.85], + '石景山区': [116.22, 39.9], + '海淀区': [116.3, 39.95], + '门头沟区': [116.1, 39.93], + '房山区': [116.13, 39.75], + '通州区': [116.65, 39.92], + '顺义区': [116.65, 40.13], + '昌平区': [116.23, 40.22], + '大兴区': [116.33, 39.73], + '怀柔区': [116.63, 40.32], + '平谷区': [117.12, 40.13], + '密云县': [116.83, 40.37], + '延庆县': [115.97, 40.45], + '天津市': [117.2, 39.12], + '河西区': [117.22, 39.12], + '南开区': [117.15, 39.13], + '河北区': [117.18, 39.15], + '红桥区': [117.15, 39.17], + '塘沽区': [117.65, 39.02], + '汉沽区': [117.8, 39.25], + '大港区': [117.45, 38.83], + '东丽区': [117.3, 39.08], + '西青区': [117.0, 39.13], + '津南区': [117.38, 38.98], + '北辰区': [117.13, 39.22], + '武清区': [117.03, 39.38], + '宝坻区': [117.3, 39.72], + '滨海新区': [117.68, 39.03], + '宁河县': [117.82, 39.33], + '静海县': [116.92, 38.93], + '蓟县': [117.4, 40.05], + '石家庄市': [114.52, 38.05], + '井陉矿区': [114.05, 38.08], + '裕华区': [114.52, 38.02], + '井陉县': [114.13, 38.03], + '正定县': [114.57, 38.15], + '栾城县': [114.65, 37.88], + '行唐县': [114.55, 38.43], + '灵寿县': [114.37, 38.3], + '高邑县': [114.6, 37.6], + '深泽县': [115.2, 38.18], + '赞皇县': [114.38, 37.67], + '无极县': [114.97, 38.18], + '平山县': [114.2, 38.25], + '元氏县': [114.52, 37.75], + '赵县': [114.77, 37.75], + '辛集市': [115.22, 37.92], + '藁城市': [114.83, 38.03], + '晋州市': [115.03, 38.03], + '新乐市': [114.68, 38.35], + '鹿泉市': [114.3, 38.08], + '唐山市': [118.2, 39.63], + '路南区': [118.17, 39.63], + '路北区': [118.22, 39.63], + '古冶区': [118.42, 39.73], + '开平区': [118.27, 39.68], + '丰南区': [118.1, 39.57], + '丰润区': [118.17, 39.83], + '滦县': [118.7, 39.75], + '滦南县': [118.68, 39.5], + '乐亭县': [118.9, 39.42], + '迁西县': [118.32, 40.15], + '玉田县': [117.73, 39.88], + '唐海县': [118.45, 39.27], + '遵化市': [117.95, 40.18], + '迁安市': [118.7, 40.02], + '秦皇岛市': [119.6, 39.93], + '海港区': [119.6, 39.93], + '山海关区': [119.77, 40.0], + '北戴河区': [119.48, 39.83], + '青龙满族自治县': [118.95, 40.4], + '昌黎县': [119.17, 39.7], + '抚宁县': [119.23, 39.88], + '卢龙县': [118.87, 39.88], + '邯郸市': [114.48, 36.62], + '邯山区': [114.48, 36.6], + '丛台区': [114.48, 36.63], + '复兴区': [114.45, 36.63], + '峰峰矿区': [114.2, 36.42], + '邯郸县': [114.53, 36.6], + '临漳县': [114.62, 36.35], + '成安县': [114.68, 36.43], + '大名县': [115.15, 36.28], + '涉县': [113.67, 36.57], + '磁县': [114.37, 36.35], + '肥乡县': [114.8, 36.55], + '永年县': [114.48, 36.78], + '邱县': [115.17, 36.82], + '鸡泽县': [114.87, 36.92], + '广平县': [114.93, 36.48], + '馆陶县': [115.3, 36.53], + '魏县': [114.93, 36.37], + '曲周县': [114.95, 36.78], + '武安市': [114.2, 36.7], + '邢台市': [114.48, 37.07], + '邢台县': [114.5, 37.08], + '临城县': [114.5, 37.43], + '内丘县': [114.52, 37.3], + '柏乡县': [114.68, 37.5], + '隆尧县': [114.77, 37.35], + '任县': [114.68, 37.13], + '南和县': [114.68, 37.0], + '宁晋县': [114.92, 37.62], + '巨鹿县': [115.03, 37.22], + '新河县': [115.25, 37.53], + '广宗县': [115.15, 37.07], + '平乡县': [115.03, 37.07], + '威县': [115.25, 36.98], + '清河县': [115.67, 37.07], + '临西县': [115.5, 36.85], + '南宫市': [115.38, 37.35], + '沙河市': [114.5, 36.85], + '保定市': [115.47, 38.87], + '北市区': [115.48, 38.87], + '南市区': [115.5, 38.85], + '满城县': [115.32, 38.95], + '清苑县': [115.48, 38.77], + '涞水县': [115.72, 39.4], + '阜平县': [114.18, 38.85], + '徐水县': [115.65, 39.02], + '定兴县': [115.77, 39.27], + '唐县': [114.98, 38.75], + '高阳县': [115.78, 38.68], + '容城县': [115.87, 39.05], + '涞源县': [114.68, 39.35], + '望都县': [115.15, 38.72], + '安新县': [115.93, 38.92], + '易县': [115.5, 39.35], + '曲阳县': [114.7, 38.62], + '蠡县': [115.57, 38.48], + '顺平县': [115.13, 38.83], + '博野县': [115.47, 38.45], + '雄县': [116.1, 38.98], + '涿州市': [115.97, 39.48], + '定州市': [114.97, 38.52], + '安国市': [115.32, 38.42], + '高碑店市': [115.85, 39.33], + '张家口市': [114.88, 40.82], + '宣化区': [115.05, 40.6], + '下花园区': [115.27, 40.48], + '宣化县': [115.02, 40.55], + '张北县': [114.7, 41.15], + '康保县': [114.62, 41.85], + '沽源县': [115.7, 41.67], + '尚义县': [113.97, 41.08], + '蔚县': [114.57, 39.85], + '阳原县': [114.17, 40.12], + '怀安县': [114.42, 40.67], + '万全县': [114.72, 40.75], + '怀来县': [115.52, 40.4], + '涿鹿县': [115.22, 40.38], + '赤城县': [115.83, 40.92], + '崇礼县': [115.27, 40.97], + '承德市': [117.93, 40.97], + '双滦区': [117.78, 40.95], + '鹰手营子矿区': [117.65, 40.55], + '承德县': [118.17, 40.77], + '兴隆县': [117.52, 40.43], + '平泉县': [118.68, 41.0], + '滦平县': [117.33, 40.93], + '隆化县': [117.72, 41.32], + '丰宁满族自治县': [116.65, 41.2], + '宽城满族自治县': [118.48, 40.6], + '围场满族蒙古族自治县': [117.75, 41.93], + '沧州市': [116.83, 38.3], + '运河区': [116.85, 38.32], + '沧县': [116.87, 38.3], + '青县': [116.82, 38.58], + '东光县': [116.53, 37.88], + '海兴县': [117.48, 38.13], + '盐山县': [117.22, 38.05], + '肃宁县': [115.83, 38.43], + '南皮县': [116.7, 38.03], + '吴桥县': [116.38, 37.62], + '献县': [116.12, 38.18], + '孟村回族自治县': [117.1, 38.07], + '泊头市': [116.57, 38.07], + '任丘市': [116.1, 38.72], + '黄骅市': [117.35, 38.37], + '河间市': [116.08, 38.43], + '廊坊市': [116.7, 39.52], + '安次区': [116.68, 39.52], + '广阳区': [116.72, 39.53], + '固安县': [116.3, 39.43], + '永清县': [116.5, 39.32], + '香河县': [117.0, 39.77], + '大城县': [116.63, 38.7], + '文安县': [116.47, 38.87], + '大厂回族自治县': [116.98, 39.88], + '霸州市': [116.4, 39.1], + '三河市': [117.07, 39.98], + '衡水市': [115.68, 37.73], + '桃城区': [115.68, 37.73], + '枣强县': [115.72, 37.52], + '武邑县': [115.88, 37.82], + '武强县': [115.98, 38.03], + '饶阳县': [115.73, 38.23], + '安平县': [115.52, 38.23], + '故城县': [115.97, 37.35], + '景县': [116.27, 37.7], + '阜城县': [116.15, 37.87], + '冀州市': [115.57, 37.57], + '深州市': [115.55, 38.02], + '太原市': [112.55, 37.87], + '小店区': [112.57, 37.73], + '迎泽区': [112.57, 37.87], + '杏花岭区': [112.57, 37.88], + '尖草坪区': [112.48, 37.93], + '万柏林区': [112.52, 37.87], + '晋源区': [112.48, 37.73], + '清徐县': [112.35, 37.6], + '阳曲县': [112.67, 38.07], + '娄烦县': [111.78, 38.07], + '古交市': [112.17, 37.92], + '大同市': [113.3, 40.08], + '南郊区': [113.13, 40.0], + '新荣区': [113.15, 40.27], + '阳高县': [113.75, 40.37], + '天镇县': [114.08, 40.42], + '广灵县': [114.28, 39.77], + '灵丘县': [114.23, 39.43], + '浑源县': [113.68, 39.7], + '左云县': [112.7, 40.0], + '大同县': [113.6, 40.03], + '阳泉市': [113.57, 37.85], + '平定县': [113.62, 37.8], + '盂县': [113.4, 38.08], + '长治市': [113.12, 36.2], + '长治县': [113.03, 36.05], + '襄垣县': [113.05, 36.53], + '屯留县': [112.88, 36.32], + '平顺县': [113.43, 36.2], + '黎城县': [113.38, 36.5], + '壶关县': [113.2, 36.12], + '长子县': [112.87, 36.12], + '武乡县': [112.85, 36.83], + '沁县': [112.7, 36.75], + '沁源县': [112.33, 36.5], + '潞城市': [113.22, 36.33], + '晋城市': [112.83, 35.5], + '沁水县': [112.18, 35.68], + '阳城县': [112.42, 35.48], + '陵川县': [113.27, 35.78], + '泽州县': [112.83, 35.5], + '高平市': [112.92, 35.8], + '朔州市': [112.43, 39.33], + '朔城区': [112.43, 39.33], + '山阴县': [112.82, 39.52], + '应县': [113.18, 39.55], + '右玉县': [112.47, 39.98], + '怀仁县': [113.08, 39.83], + '晋中市': [112.75, 37.68], + '榆次区': [112.75, 37.68], + '榆社县': [112.97, 37.07], + '左权县': [113.37, 37.07], + '和顺县': [113.57, 37.33], + '昔阳县': [113.7, 37.62], + '寿阳县': [113.18, 37.88], + '太谷县': [112.55, 37.42], + '祁县': [112.33, 37.35], + '平遥县': [112.17, 37.18], + '灵石县': [111.77, 36.85], + '介休市': [111.92, 37.03], + '运城市': [110.98, 35.02], + '盐湖区': [110.98, 35.02], + '临猗县': [110.77, 35.15], + '万荣县': [110.83, 35.42], + '闻喜县': [111.22, 35.35], + '稷山县': [110.97, 35.6], + '新绛县': [111.22, 35.62], + '绛县': [111.57, 35.48], + '垣曲县': [111.67, 35.3], + '夏县': [111.22, 35.15], + '平陆县': [111.22, 34.83], + '芮城县': [110.68, 34.7], + '河津市': [110.7, 35.6], + '忻州市': [112.73, 38.42], + '忻府区': [112.73, 38.42], + '定襄县': [112.95, 38.48], + '五台县': [113.25, 38.73], + '代县': [112.95, 39.07], + '繁峙县': [113.25, 39.18], + '宁武县': [112.3, 39.0], + '静乐县': [111.93, 38.37], + '神池县': [112.2, 39.08], + '五寨县': [111.85, 38.9], + '岢岚县': [111.57, 38.7], + '河曲县': [111.13, 39.38], + '偏关县': [111.5, 39.43], + '原平市': [112.7, 38.73], + '临汾市': [111.52, 36.08], + '尧都区': [111.52, 36.08], + '曲沃县': [111.47, 35.63], + '翼城县': [111.72, 35.73], + '襄汾县': [111.43, 35.88], + '洪洞县': [111.67, 36.25], + '古县': [111.92, 36.27], + '安泽县': [112.25, 36.15], + '浮山县': [111.83, 35.97], + '吉县': [110.68, 36.1], + '乡宁县': [110.83, 35.97], + '大宁县': [110.75, 36.47], + '隰县': [110.93, 36.7], + '永和县': [110.63, 36.77], + '蒲县': [111.08, 36.42], + '汾西县': [111.57, 36.65], + '侯马市': [111.35, 35.62], + '霍州市': [111.72, 36.57], + '吕梁市': [111.13, 37.52], + '离石区': [111.13, 37.52], + '文水县': [112.02, 37.43], + '交城县': [112.15, 37.55], + '兴县': [111.12, 38.47], + '临县': [110.98, 37.95], + '柳林县': [110.9, 37.43], + '石楼县': [110.83, 37.0], + '岚县': [111.67, 38.28], + '方山县': [111.23, 37.88], + '中阳县': [111.18, 37.33], + '交口县': [111.2, 36.97], + '孝义市': [111.77, 37.15], + '汾阳市': [111.78, 37.27], + '呼和浩特市': [111.73, 40.83], + '回民区': [111.6, 40.8], + '玉泉区': [111.67, 40.75], + '赛罕区': [111.68, 40.8], + '土默特左旗': [111.13, 40.72], + '托克托县': [111.18, 40.27], + '和林格尔县': [111.82, 40.38], + '清水河县': [111.68, 39.92], + '武川县': [111.45, 41.08], + '包头市': [109.83, 40.65], + '东河区': [110.02, 40.58], + '昆都仑区': [109.83, 40.63], + '石拐区': [110.27, 40.68], + '九原区': [109.97, 40.6], + '土默特右旗': [110.52, 40.57], + '固阳县': [110.05, 41.03], + '达尔罕茂明安联合旗': [110.43, 41.7], + '乌海市': [106.82, 39.67], + '海勃湾区': [106.83, 39.7], + '海南区': [106.88, 39.43], + '乌达区': [106.7, 39.5], + '赤峰市': [118.92, 42.27], + '红山区': [118.97, 42.28], + '元宝山区': [119.28, 42.03], + '松山区': [118.92, 42.28], + '阿鲁科尔沁旗': [120.08, 43.88], + '巴林左旗': [119.38, 43.98], + '巴林右旗': [118.67, 43.52], + '林西县': [118.05, 43.6], + '克什克腾旗': [117.53, 43.25], + '翁牛特旗': [119.02, 42.93], + '喀喇沁旗': [118.7, 41.93], + '宁城县': [119.33, 41.6], + '敖汉旗': [119.9, 42.28], + '通辽市': [122.27, 43.62], + '科尔沁区': [122.27, 43.62], + '科尔沁左翼中旗': [123.32, 44.13], + '科尔沁左翼后旗': [122.35, 42.95], + '开鲁县': [121.3, 43.6], + '库伦旗': [121.77, 42.73], + '奈曼旗': [120.65, 42.85], + '扎鲁特旗': [120.92, 44.55], + '霍林郭勒市': [119.65, 45.53], + '鄂尔多斯市': [109.8, 39.62], + '东胜区': [110.0, 39.82], + '达拉特旗': [110.03, 40.4], + '准格尔旗': [111.23, 39.87], + '鄂托克前旗': [107.48, 38.18], + '鄂托克旗': [107.98, 39.1], + '杭锦旗': [108.72, 39.83], + '乌审旗': [108.85, 38.6], + '伊金霍洛旗': [109.73, 39.57], + '呼伦贝尔市': [119.77, 49.22], + '海拉尔区': [119.77, 49.22], + '阿荣旗': [123.47, 48.13], + '鄂伦春自治旗': [123.72, 50.58], + '鄂温克族自治旗': [119.75, 49.13], + '陈巴尔虎旗': [119.43, 49.32], + '新巴尔虎左旗': [118.27, 48.22], + '新巴尔虎右旗': [116.82, 48.67], + '满洲里市': [117.45, 49.58], + '牙克石市': [120.73, 49.28], + '扎兰屯市': [122.75, 47.98], + '额尔古纳市': [120.18, 50.23], + '根河市': [121.52, 50.78], + '巴彦淖尔市': [107.42, 40.75], + '临河区': [107.4, 40.75], + '五原县': [108.27, 41.1], + '磴口县': [107.02, 40.33], + '乌拉特前旗': [108.65, 40.72], + '乌拉特中旗': [108.52, 41.57], + '乌拉特后旗': [107.07, 41.1], + '杭锦后旗': [107.15, 40.88], + '乌兰察布市': [113.12, 40.98], + '集宁区': [113.1, 41.03], + '卓资县': [112.57, 40.9], + '化德县': [114.0, 41.9], + '商都县': [113.53, 41.55], + '兴和县': [113.88, 40.88], + '凉城县': [112.48, 40.53], + '察哈尔右翼前旗': [113.22, 40.78], + '察哈尔右翼中旗': [112.63, 41.27], + '察哈尔右翼后旗': [113.18, 41.45], + '四子王旗': [111.7, 41.52], + '丰镇市': [113.15, 40.43], + '兴安盟': [122.05, 46.08], + '乌兰浩特市': [122.05, 46.08], + '阿尔山市': [119.93, 47.18], + '科尔沁右翼前旗': [121.92, 46.07], + '科尔沁右翼中旗': [121.47, 45.05], + '扎赉特旗': [122.9, 46.73], + '突泉县': [121.57, 45.38], + '锡林郭勒盟': [116.07, 43.95], + '二连浩特市': [111.98, 43.65], + '锡林浩特市': [116.07, 43.93], + '阿巴嘎旗': [114.97, 44.02], + '苏尼特左旗': [113.63, 43.85], + '苏尼特右旗': [112.65, 42.75], + '东乌珠穆沁旗': [116.97, 45.52], + '西乌珠穆沁旗': [117.6, 44.58], + '太仆寺旗': [115.28, 41.9], + '镶黄旗': [113.83, 42.23], + '正镶白旗': [115.0, 42.3], + '正蓝旗': [116.0, 42.25], + '多伦县': [116.47, 42.18], + '阿拉善盟': [105.67, 38.83], + '阿拉善左旗': [105.67, 38.83], + '阿拉善右旗': [101.68, 39.2], + '额济纳旗': [101.07, 41.97], + '沈阳市': [123.43, 41.8], + '和平区': [123.4, 41.78], + '沈河区': [123.45, 41.8], + '大东区': [123.47, 41.8], + '皇姑区': [123.42, 41.82], + '铁西区': [123.35, 41.8], + '苏家屯区': [123.33, 41.67], + '东陵区': [123.47, 41.77], + '新城子区': [123.52, 42.05], + '于洪区': [123.3, 41.78], + '辽中县': [122.72, 41.52], + '康平县': [123.35, 42.75], + '法库县': [123.4, 42.5], + '新民市': [122.82, 42.0], + '大连市': [121.62, 38.92], + '中山区': [121.63, 38.92], + '西岗区': [121.6, 38.92], + '沙河口区': [121.58, 38.9], + '甘井子区': [121.57, 38.95], + '旅顺口区': [121.27, 38.82], + '金州区': [121.7, 39.1], + '长海县': [122.58, 39.27], + '瓦房店市': [122.0, 39.62], + '普兰店市': [121.95, 39.4], + '庄河市': [122.98, 39.7], + '鞍山市': [122.98, 41.1], + '立山区': [123.0, 41.15], + '千山区': [122.97, 41.07], + '台安县': [122.42, 41.38], + '岫岩满族自治县': [123.28, 40.28], + '海城市': [122.7, 40.88], + '抚顺市': [123.98, 41.88], + '新抚区': [123.88, 41.87], + '东洲区': [124.02, 41.85], + '望花区': [123.78, 41.85], + '顺城区': [123.93, 41.88], + '抚顺县': [123.9, 41.88], + '新宾满族自治县': [125.03, 41.73], + '清原满族自治县': [124.92, 42.1], + '本溪市': [123.77, 41.3], + '平山区': [123.77, 41.3], + '溪湖区': [123.77, 41.33], + '明山区': [123.82, 41.3], + '南芬区': [123.73, 41.1], + '本溪满族自治县': [124.12, 41.3], + '桓仁满族自治县': [125.35, 41.27], + '丹东市': [124.38, 40.13], + '元宝区': [124.38, 40.13], + '振兴区': [124.35, 40.08], + '振安区': [124.42, 40.17], + '宽甸满族自治县': [124.78, 40.73], + '东港市': [124.15, 39.87], + '凤城市': [124.07, 40.45], + '锦州市': [121.13, 41.1], + '古塔区': [121.12, 41.13], + '凌河区': [121.15, 41.12], + '太和区': [121.1, 41.1], + '黑山县': [122.12, 41.7], + '义县': [121.23, 41.53], + '凌海市': [121.35, 41.17], + '营口市': [122.23, 40.67], + '站前区': [122.27, 40.68], + '西市区': [122.22, 40.67], + '鲅鱼圈区': [122.12, 40.27], + '老边区': [122.37, 40.67], + '盖州市': [122.35, 40.4], + '大石桥市': [122.5, 40.65], + '阜新市': [121.67, 42.02], + '海州区': [121.65, 42.02], + '太平区': [121.67, 42.02], + '清河门区': [121.42, 41.75], + '细河区': [121.68, 42.03], + '阜新蒙古族自治县': [121.75, 42.07], + '彰武县': [122.53, 42.38], + '辽阳市': [123.17, 41.27], + '白塔区': [123.17, 41.27], + '文圣区': [123.18, 41.27], + '宏伟区': [123.2, 41.2], + '弓长岭区': [123.45, 41.13], + '太子河区': [123.18, 41.25], + '辽阳县': [123.07, 41.22], + '灯塔市': [123.33, 41.42], + '盘锦市': [122.07, 41.12], + '双台子区': [122.05, 41.2], + '兴隆台区': [122.07, 41.12], + '大洼县': [122.07, 40.98], + '盘山县': [122.02, 41.25], + '铁岭市': [123.83, 42.28], + '银州区': [123.85, 42.28], + '铁岭县': [123.83, 42.3], + '西丰县': [124.72, 42.73], + '昌图县': [124.1, 42.78], + '调兵山市': [123.55, 42.47], + '开原市': [124.03, 42.55], + '朝阳市': [120.45, 41.57], + '双塔区': [120.45, 41.57], + '龙城区': [120.43, 41.6], + '朝阳县': [120.47, 41.58], + '建平县': [119.63, 41.4], + '北票市': [120.77, 41.8], + '凌源市': [119.4, 41.25], + '葫芦岛市': [120.83, 40.72], + '连山区': [120.87, 40.77], + '龙港区': [120.93, 40.72], + '南票区': [120.75, 41.1], + '绥中县': [120.33, 40.32], + '建昌县': [119.8, 40.82], + '兴城市': [120.72, 40.62], + '长春市': [125.32, 43.9], + '南关区': [125.33, 43.87], + '宽城区': [125.32, 43.92], + '朝阳区': [125.28, 43.83], + '二道区': [125.37, 43.87], + '绿园区': [125.25, 43.88], + '双阳区': [125.67, 43.52], + '农安县': [125.18, 44.43], + '九台市': [125.83, 44.15], + '榆树市': [126.55, 44.82], + '德惠市': [125.7, 44.53], + '吉林市': [126.55, 43.83], + '昌邑区': [126.57, 43.88], + '龙潭区': [126.57, 43.92], + '船营区': [126.53, 43.83], + '丰满区': [126.57, 43.82], + '永吉县': [126.5, 43.67], + '蛟河市': [127.33, 43.72], + '桦甸市': [126.73, 42.97], + '舒兰市': [126.95, 44.42], + '磐石市': [126.05, 42.95], + '四平市': [124.35, 43.17], + '铁东区': [124.38, 43.17], + '梨树县': [124.33, 43.32], + '伊通满族自治县': [125.3, 43.35], + '公主岭市': [124.82, 43.5], + '双辽市': [123.5, 43.52], + '辽源市': [125.13, 42.88], + '龙山区': [125.12, 42.9], + '西安区': [125.15, 42.92], + '东丰县': [125.53, 42.68], + '东辽县': [125.0, 42.92], + '通化市': [125.93, 41.73], + '东昌区': [125.95, 41.73], + '二道江区': [126.03, 41.77], + '通化县': [125.75, 41.68], + '辉南县': [126.03, 42.68], + '柳河县': [125.73, 42.28], + '梅河口市': [125.68, 42.53], + '集安市': [126.18, 41.12], + '白山市': [126.42, 41.93], + '八道江区': [126.4, 41.93], + '抚松县': [127.28, 42.33], + '靖宇县': [126.8, 42.4], + '长白朝鲜族自治县': [128.2, 41.42], + '临江市': [126.9, 41.8], + '松原市': [124.82, 45.13], + '宁江区': [124.8, 45.17], + '长岭县': [123.98, 44.28], + '乾安县': [124.02, 45.02], + '扶余县': [126.02, 44.98], + '白城市': [122.83, 45.62], + '洮北区': [122.85, 45.62], + '镇赉县': [123.2, 45.85], + '通榆县': [123.08, 44.82], + '洮南市': [122.78, 45.33], + '大安市': [124.28, 45.5], + '延边朝鲜族自治州': [129.5, 42.88], + '延吉市': [129.5, 42.88], + '图们市': [129.83, 42.97], + '敦化市': [128.23, 43.37], + '珲春市': [130.37, 42.87], + '龙井市': [129.42, 42.77], + '和龙市': [129.0, 42.53], + '汪清县': [129.75, 43.32], + '安图县': [128.9, 43.12], + '哈尔滨市': [126.53, 45.8], + '道里区': [126.62, 45.77], + '南岗区': [126.68, 45.77], + '道外区': [126.65, 45.78], + '香坊区': [126.68, 45.72], + '平房区': [126.62, 45.62], + '松北区': [126.55, 45.8], + '呼兰区': [126.58, 45.9], + '依兰县': [129.55, 46.32], + '方正县': [128.83, 45.83], + '宾县': [127.48, 45.75], + '巴彦县': [127.4, 46.08], + '木兰县': [128.03, 45.95], + '通河县': [128.75, 45.97], + '延寿县': [128.33, 45.45], + '双城市': [126.32, 45.37], + '尚志市': [127.95, 45.22], + '五常市': [127.15, 44.92], + '齐齐哈尔市': [123.95, 47.33], + '龙沙区': [123.95, 47.32], + '建华区': [123.95, 47.35], + '铁锋区': [123.98, 47.35], + '昂昂溪区': [123.8, 47.15], + '富拉尔基区': [123.62, 47.2], + '龙江县': [123.18, 47.33], + '依安县': [125.3, 47.88], + '泰来县': [123.42, 46.4], + '甘南县': [123.5, 47.92], + '富裕县': [124.47, 47.82], + '克山县': [125.87, 48.03], + '克东县': [126.25, 48.03], + '拜泉县': [126.08, 47.6], + '讷河市': [124.87, 48.48], + '鸡西市': [130.97, 45.3], + '鸡冠区': [130.97, 45.3], + '恒山区': [130.93, 45.2], + '滴道区': [130.78, 45.37], + '梨树区': [130.68, 45.08], + '城子河区': [131.0, 45.33], + '麻山区': [130.52, 45.2], + '鸡东县': [131.13, 45.25], + '虎林市': [132.98, 45.77], + '密山市': [131.87, 45.55], + '鹤岗市': [130.27, 47.33], + '向阳区': [130.28, 47.33], + '工农区': [130.25, 47.32], + '兴安区': [130.22, 47.27], + '东山区': [130.32, 47.33], + '兴山区': [130.3, 47.37], + '萝北县': [130.83, 47.58], + '绥滨县': [131.85, 47.28], + '双鸭山市': [131.15, 46.63], + '尖山区': [131.17, 46.63], + '岭东区': [131.13, 46.57], + '四方台区': [131.33, 46.58], + '集贤县': [131.13, 46.72], + '友谊县': [131.8, 46.78], + '宝清县': [132.2, 46.32], + '饶河县': [134.02, 46.8], + '大庆市': [125.03, 46.58], + '萨尔图区': [125.02, 46.6], + '龙凤区': [125.1, 46.53], + '让胡路区': [124.85, 46.65], + '红岗区': [124.88, 46.4], + '大同区': [124.82, 46.03], + '肇州县': [125.27, 45.7], + '肇源县': [125.08, 45.52], + '林甸县': [124.87, 47.18], + '杜尔伯特蒙古族自治县': [124.45, 46.87], + '伊春市': [128.9, 47.73], + '南岔区': [129.28, 47.13], + '友好区': [128.82, 47.85], + '西林区': [129.28, 47.48], + '翠峦区': [128.65, 47.72], + '新青区': [129.53, 48.28], + '美溪区': [129.13, 47.63], + '金山屯区': [129.43, 47.42], + '五营区': [129.25, 48.12], + '乌马河区': [128.78, 47.72], + '汤旺河区': [129.57, 48.45], + '带岭区': [129.02, 47.02], + '乌伊岭区': [129.42, 48.6], + '红星区': [129.38, 48.23], + '上甘岭区': [129.02, 47.97], + '嘉荫县': [130.38, 48.88], + '铁力市': [128.02, 46.98], + '佳木斯市': [130.37, 46.82], + '前进区': [130.37, 46.82], + '东风区': [130.4, 46.82], + '桦南县': [130.57, 46.23], + '桦川县': [130.72, 47.02], + '汤原县': [129.9, 46.73], + '抚远县': [134.28, 48.37], + '同江市': [132.52, 47.65], + '富锦市': [132.03, 47.25], + '七台河市': [130.95, 45.78], + '新兴区': [130.83, 45.8], + '桃山区': [130.97, 45.77], + '茄子河区': [131.07, 45.77], + '勃利县': [130.57, 45.75], + '牡丹江市': [129.6, 44.58], + '东安区': [129.62, 44.58], + '阳明区': [129.63, 44.6], + '爱民区': [129.58, 44.58], + '东宁县': [131.12, 44.07], + '林口县': [130.27, 45.3], + '绥芬河市': [131.15, 44.42], + '海林市': [129.38, 44.57], + '宁安市': [129.47, 44.35], + '穆棱市': [130.52, 44.92], + '黑河市': [127.48, 50.25], + '爱辉区': [127.48, 50.25], + '逊克县': [128.47, 49.58], + '孙吴县': [127.32, 49.42], + '北安市': [126.52, 48.23], + '五大连池市': [126.2, 48.52], + '绥化市': [126.98, 46.63], + '北林区': [126.98, 46.63], + '望奎县': [126.48, 46.83], + '兰西县': [126.28, 46.27], + '青冈县': [126.1, 46.68], + '庆安县': [127.52, 46.88], + '明水县': [125.9, 47.18], + '绥棱县': [127.1, 47.25], + '安达市': [125.33, 46.4], + '肇东市': [125.98, 46.07], + '海伦市': [126.97, 47.47], + '大兴安岭地区': [124.12, 50.42], + '呼玛县': [126.65, 51.73], + '塔河县': [124.7, 52.32], + '漠河县': [122.53, 52.97], + '上海市': [121.47, 31.23], + '黄浦区': [121.48, 31.23], + '卢湾区': [121.47, 31.22], + '徐汇区': [121.43, 31.18], + '长宁区': [121.42, 31.22], + '静安区': [121.45, 31.23], + '闸北区': [121.45, 31.25], + '虹口区': [121.5, 31.27], + '杨浦区': [121.52, 31.27], + '闵行区': [121.38, 31.12], + '宝山区': [121.48, 31.4], + '嘉定区': [121.27, 31.38], + '浦东新区': [121.53, 31.22], + '金山区': [121.33, 30.75], + '松江区': [121.22, 31.03], + '青浦区': [121.12, 31.15], + '南汇区': [121.75, 31.05], + '奉贤区': [121.47, 30.92], + '崇明县': [121.4, 31.62], + '南京市': [118.78, 32.07], + '玄武区': [118.8, 32.05], + '白下区': [118.78, 32.03], + '秦淮区': [118.8, 32.02], + '建邺区': [118.75, 32.03], + '下关区': [118.73, 32.08], + '浦口区': [118.62, 32.05], + '栖霞区': [118.88, 32.12], + '雨花台区': [118.77, 32.0], + '江宁区': [118.85, 31.95], + '六合区': [118.83, 32.35], + '溧水县': [119.02, 31.65], + '高淳县': [118.88, 31.33], + '无锡市': [120.3, 31.57], + '崇安区': [120.3, 31.58], + '南长区': [120.3, 31.57], + '北塘区': [120.28, 31.58], + '锡山区': [120.35, 31.6], + '惠山区': [120.28, 31.68], + '滨湖区': [120.27, 31.57], + '江阴市': [120.27, 31.9], + '宜兴市': [119.82, 31.35], + '徐州市': [117.18, 34.27], + '云龙区': [117.22, 34.25], + '九里区': [117.13, 34.3], + '贾汪区': [117.45, 34.45], + '泉山区': [117.18, 34.25], + '丰县': [116.6, 34.7], + '沛县': [116.93, 34.73], + '铜山县': [117.17, 34.18], + '睢宁县': [117.95, 33.9], + '新沂市': [118.35, 34.38], + '邳州市': [117.95, 34.32], + '常州市': [119.95, 31.78], + '天宁区': [119.93, 31.75], + '钟楼区': [119.93, 31.78], + '戚墅堰区': [120.05, 31.73], + '新北区': [119.97, 31.83], + '武进区': [119.93, 31.72], + '溧阳市': [119.48, 31.42], + '金坛市': [119.57, 31.75], + '苏州市': [120.58, 31.3], + '沧浪区': [120.63, 31.3], + '平江区': [120.63, 31.32], + '金阊区': [120.6, 31.32], + '虎丘区': [120.57, 31.3], + '吴中区': [120.63, 31.27], + '相城区': [120.63, 31.37], + '常熟市': [120.75, 31.65], + '张家港市': [120.55, 31.87], + '昆山市': [120.98, 31.38], + '吴江市': [120.63, 31.17], + '太仓市': [121.1, 31.45], + '南通市': [120.88, 31.98], + '崇川区': [120.85, 32.0], + '港闸区': [120.8, 32.03], + '海安县': [120.45, 32.55], + '如东县': [121.18, 32.32], + '启东市': [121.65, 31.82], + '如皋市': [120.57, 32.4], + '通州市': [121.07, 32.08], + '海门市': [121.17, 31.9], + '连云港市': [119.22, 34.6], + '连云区': [119.37, 34.75], + '新浦区': [119.17, 34.6], + '赣榆县': [119.12, 34.83], + '东海县': [118.77, 34.53], + '灌云县': [119.25, 34.3], + '灌南县': [119.35, 34.08], + '淮安市': [119.02, 33.62], + '清河区': [119.02, 33.6], + '楚州区': [119.13, 33.5], + '淮阴区': [119.03, 33.63], + '清浦区': [119.03, 33.58], + '涟水县': [119.27, 33.78], + '洪泽县': [118.83, 33.3], + '盱眙县': [118.48, 33.0], + '金湖县': [119.02, 33.02], + '盐城市': [120.15, 33.35], + '亭湖区': [120.13, 33.4], + '盐都区': [120.15, 33.33], + '响水县': [119.57, 34.2], + '滨海县': [119.83, 33.98], + '阜宁县': [119.8, 33.78], + '射阳县': [120.25, 33.78], + '建湖县': [119.8, 33.47], + '东台市': [120.3, 32.85], + '大丰市': [120.47, 33.2], + '扬州市': [119.4, 32.4], + '广陵区': [119.43, 32.38], + '邗江区': [119.4, 32.38], + '维扬区': [119.4, 32.42], + '宝应县': [119.3, 33.23], + '仪征市': [119.18, 32.27], + '高邮市': [119.43, 32.78], + '江都市': [119.55, 32.43], + '镇江市': [119.45, 32.2], + '京口区': [119.47, 32.2], + '润州区': [119.4, 32.2], + '丹徒区': [119.45, 32.13], + '丹阳市': [119.57, 32.0], + '扬中市': [119.82, 32.23], + '句容市': [119.17, 31.95], + '泰州市': [119.92, 32.45], + '兴化市': [119.85, 32.92], + '靖江市': [120.27, 32.02], + '泰兴市': [120.02, 32.17], + '姜堰市': [120.15, 32.52], + '宿迁市': [118.28, 33.97], + '宿城区': [118.25, 33.97], + '宿豫区': [118.32, 33.95], + '沭阳县': [118.77, 34.13], + '泗阳县': [118.68, 33.72], + '泗洪县': [118.22, 33.47], + '杭州市': [120.15, 30.28], + '上城区': [120.17, 30.25], + '下城区': [120.17, 30.28], + '江干区': [120.2, 30.27], + '拱墅区': [120.13, 30.32], + '滨江区': [120.2, 30.2], + '萧山区': [120.27, 30.17], + '余杭区': [120.3, 30.42], + '桐庐县': [119.67, 29.8], + '淳安县': [119.03, 29.6], + '建德市': [119.28, 29.48], + '富阳市': [119.95, 30.05], + '临安市': [119.72, 30.23], + '宁波市': [121.55, 29.88], + '海曙区': [121.55, 29.87], + '江东区': [121.57, 29.87], + '北仑区': [121.85, 29.93], + '镇海区': [121.72, 29.95], + '鄞州区': [121.53, 29.83], + '象山县': [121.87, 29.48], + '宁海县': [121.43, 29.28], + '余姚市': [121.15, 30.03], + '慈溪市': [121.23, 30.17], + '奉化市': [121.4, 29.65], + '温州市': [120.7, 28.0], + '鹿城区': [120.65, 28.02], + '龙湾区': [120.82, 27.93], + '洞头县': [121.15, 27.83], + '永嘉县': [120.68, 28.15], + '平阳县': [120.57, 27.67], + '苍南县': [120.4, 27.5], + '文成县': [120.08, 27.78], + '泰顺县': [119.72, 27.57], + '瑞安市': [120.63, 27.78], + '乐清市': [120.95, 28.13], + '嘉兴市': [120.75, 30.75], + '秀洲区': [120.7, 30.77], + '嘉善县': [120.92, 30.85], + '海盐县': [120.95, 30.53], + '海宁市': [120.68, 30.53], + '平湖市': [121.02, 30.7], + '桐乡市': [120.57, 30.63], + '湖州市': [120.08, 30.9], + '吴兴区': [120.12, 30.87], + '南浔区': [120.43, 30.88], + '德清县': [119.97, 30.53], + '长兴县': [119.9, 31.02], + '安吉县': [119.68, 30.63], + '绍兴市': [120.57, 30.0], + '越城区': [120.57, 30.0], + '绍兴县': [120.47, 30.08], + '新昌县': [120.9, 29.5], + '诸暨市': [120.23, 29.72], + '上虞市': [120.87, 30.03], + '嵊州市': [120.82, 29.58], + '金华市': [119.65, 29.08], + '婺城区': [119.65, 29.08], + '金东区': [119.7, 29.08], + '武义县': [119.82, 28.9], + '浦江县': [119.88, 29.45], + '磐安县': [120.43, 29.05], + '兰溪市': [119.45, 29.22], + '义乌市': [120.07, 29.3], + '东阳市': [120.23, 29.28], + '永康市': [120.03, 28.9], + '衢州市': [118.87, 28.93], + '柯城区': [118.87, 28.93], + '衢江区': [118.93, 28.98], + '常山县': [118.52, 28.9], + '开化县': [118.42, 29.13], + '龙游县': [119.17, 29.03], + '江山市': [118.62, 28.75], + '舟山市': [122.2, 30.0], + '定海区': [122.1, 30.02], + '普陀区': [122.3, 29.95], + '岱山县': [122.2, 30.25], + '嵊泗县': [122.45, 30.73], + '台州市': [121.43, 28.68], + '椒江区': [121.43, 28.68], + '黄岩区': [121.27, 28.65], + '路桥区': [121.38, 28.58], + '玉环县': [121.23, 28.13], + '三门县': [121.38, 29.12], + '天台县': [121.03, 29.13], + '仙居县': [120.73, 28.87], + '温岭市': [121.37, 28.37], + '临海市': [121.12, 28.85], + '丽水市': [119.92, 28.45], + '莲都区': [119.92, 28.45], + '青田县': [120.28, 28.15], + '缙云县': [120.07, 28.65], + '遂昌县': [119.27, 28.6], + '松阳县': [119.48, 28.45], + '云和县': [119.57, 28.12], + '庆元县': [119.05, 27.62], + '景宁畲族自治县': [119.63, 27.98], + '龙泉市': [119.13, 28.08], + '合肥市': [117.25, 31.83], + '瑶海区': [117.3, 31.87], + '庐阳区': [117.25, 31.88], + '蜀山区': [117.27, 31.85], + '包河区': [117.3, 31.8], + '长丰县': [117.17, 32.48], + '肥东县': [117.47, 31.88], + '肥西县': [117.17, 31.72], + '芜湖市': [118.38, 31.33], + '镜湖区': [118.37, 31.35], + '鸠江区': [118.38, 31.37], + '芜湖县': [118.57, 31.15], + '繁昌县': [118.2, 31.08], + '南陵县': [118.33, 30.92], + '蚌埠市': [117.38, 32.92], + '龙子湖区': [117.38, 32.95], + '蚌山区': [117.35, 32.95], + '禹会区': [117.33, 32.93], + '淮上区': [117.35, 32.97], + '怀远县': [117.18, 32.97], + '五河县': [117.88, 33.15], + '固镇县': [117.32, 33.32], + '淮南市': [117.0, 32.63], + '大通区': [117.05, 32.63], + '田家庵区': [117.0, 32.67], + '谢家集区': [116.85, 32.6], + '八公山区': [116.83, 32.63], + '潘集区': [116.82, 32.78], + '凤台县': [116.72, 32.7], + '马鞍山市': [118.5, 31.7], + '金家庄区': [118.48, 31.73], + '花山区': [118.5, 31.72], + '雨山区': [118.48, 31.68], + '当涂县': [118.48, 31.55], + '淮北市': [116.8, 33.95], + '杜集区': [116.82, 34.0], + '相山区': [116.8, 33.95], + '烈山区': [116.8, 33.9], + '濉溪县': [116.77, 33.92], + '铜陵市': [117.82, 30.93], + '铜官山区': [117.82, 30.93], + '狮子山区': [117.85, 30.95], + '铜陵县': [117.78, 30.95], + '安庆市': [117.05, 30.53], + '迎江区': [117.05, 30.5], + '大观区': [117.03, 30.52], + '怀宁县': [116.83, 30.72], + '枞阳县': [117.2, 30.7], + '潜山县': [116.57, 30.63], + '太湖县': [116.27, 30.43], + '宿松县': [116.12, 30.15], + '望江县': [116.68, 30.13], + '岳西县': [116.35, 30.85], + '桐城市': [116.95, 31.05], + '黄山市': [118.33, 29.72], + '屯溪区': [118.33, 29.72], + '黄山区': [118.13, 30.3], + '徽州区': [118.33, 29.82], + '歙县': [118.43, 29.87], + '休宁县': [118.18, 29.78], + '黟县': [117.93, 29.93], + '祁门县': [117.72, 29.87], + '滁州市': [118.32, 32.3], + '琅琊区': [118.3, 32.3], + '南谯区': [118.3, 32.32], + '来安县': [118.43, 32.45], + '全椒县': [118.27, 32.1], + '定远县': [117.67, 32.53], + '凤阳县': [117.57, 32.87], + '天长市': [119.0, 32.7], + '明光市': [117.98, 32.78], + '阜阳市': [115.82, 32.9], + '颍州区': [115.8, 32.88], + '颍东区': [115.85, 32.92], + '颍泉区': [115.8, 32.93], + '临泉县': [115.25, 33.07], + '太和县': [115.62, 33.17], + '阜南县': [115.58, 32.63], + '颍上县': [116.27, 32.63], + '宿州市': [116.98, 33.63], + '埇桥区': [116.97, 33.63], + '砀山县': [116.35, 34.42], + '萧县': [116.93, 34.18], + '灵璧县': [117.55, 33.55], + '泗县': [117.88, 33.48], + '巢湖市': [117.87, 31.6], + '居巢区': [117.85, 31.6], + '庐江县': [117.28, 31.25], + '无为县': [117.92, 31.3], + '含山县': [118.1, 31.72], + '和县': [118.37, 31.72], + '六安市': [116.5, 31.77], + '金安区': [116.5, 31.77], + '裕安区': [116.48, 31.77], + '寿县': [116.78, 32.58], + '霍邱县': [116.27, 32.33], + '舒城县': [116.93, 31.47], + '金寨县': [115.92, 31.72], + '霍山县': [116.33, 31.4], + '亳州市': [115.78, 33.85], + '谯城区': [115.77, 33.88], + '涡阳县': [116.22, 33.52], + '蒙城县': [116.57, 33.27], + '利辛县': [116.2, 33.15], + '池州市': [117.48, 30.67], + '贵池区': [117.48, 30.65], + '东至县': [117.02, 30.1], + '石台县': [117.48, 30.22], + '青阳县': [117.85, 30.65], + '宣城市': [118.75, 30.95], + '宣州区': [118.75, 30.95], + '郎溪县': [119.17, 31.13], + '广德县': [119.42, 30.9], + '泾县': [118.4, 30.7], + '绩溪县': [118.6, 30.07], + '旌德县': [118.53, 30.28], + '宁国市': [118.98, 30.63], + '福州市': [119.3, 26.08], + '鼓楼区': [119.3, 26.08], + '台江区': [119.3, 26.07], + '仓山区': [119.32, 26.05], + '马尾区': [119.45, 26.0], + '晋安区': [119.32, 26.08], + '闽侯县': [119.13, 26.15], + '连江县': [119.53, 26.2], + '罗源县': [119.55, 26.48], + '闽清县': [118.85, 26.22], + '永泰县': [118.93, 25.87], + '平潭县': [119.78, 25.52], + '福清市': [119.38, 25.72], + '长乐市': [119.52, 25.97], + '厦门市': [118.08, 24.48], + '思明区': [118.08, 24.45], + '海沧区': [117.98, 24.47], + '湖里区': [118.08, 24.52], + '集美区': [118.1, 24.57], + '同安区': [118.15, 24.73], + '翔安区': [118.23, 24.62], + '莆田市': [119.0, 25.43], + '城厢区': [119.0, 25.43], + '涵江区': [119.1, 25.45], + '荔城区': [119.02, 25.43], + '秀屿区': [119.08, 25.32], + '仙游县': [118.68, 25.37], + '三明市': [117.62, 26.27], + '梅列区': [117.63, 26.27], + '三元区': [117.6, 26.23], + '明溪县': [117.2, 26.37], + '清流县': [116.82, 26.18], + '宁化县': [116.65, 26.27], + '大田县': [117.85, 25.7], + '尤溪县': [118.18, 26.17], + '沙县': [117.78, 26.4], + '将乐县': [117.47, 26.73], + '泰宁县': [117.17, 26.9], + '建宁县': [116.83, 26.83], + '永安市': [117.37, 25.98], + '泉州市': [118.67, 24.88], + '鲤城区': [118.6, 24.92], + '丰泽区': [118.6, 24.92], + '洛江区': [118.67, 24.95], + '泉港区': [118.88, 25.12], + '惠安县': [118.8, 25.03], + '安溪县': [118.18, 25.07], + '永春县': [118.3, 25.32], + '德化县': [118.23, 25.5], + '金门县': [118.32, 24.43], + '石狮市': [118.65, 24.73], + '晋江市': [118.58, 24.82], + '南安市': [118.38, 24.97], + '漳州市': [117.65, 24.52], + '芗城区': [117.65, 24.52], + '龙文区': [117.72, 24.52], + '云霄县': [117.33, 23.95], + '漳浦县': [117.62, 24.13], + '诏安县': [117.18, 23.72], + '长泰县': [117.75, 24.62], + '东山县': [117.43, 23.7], + '南靖县': [117.37, 24.52], + '平和县': [117.3, 24.37], + '华安县': [117.53, 25.02], + '龙海市': [117.82, 24.45], + '南平市': [118.17, 26.65], + '延平区': [118.17, 26.65], + '顺昌县': [117.8, 26.8], + '浦城县': [118.53, 27.92], + '光泽县': [117.33, 27.55], + '松溪县': [118.78, 27.53], + '政和县': [118.85, 27.37], + '邵武市': [117.48, 27.37], + '武夷山市': [118.03, 27.77], + '建瓯市': [118.32, 27.03], + '建阳市': [118.12, 27.33], + '龙岩市': [117.03, 25.1], + '新罗区': [117.03, 25.1], + '长汀县': [116.35, 25.83], + '永定县': [116.73, 24.72], + '上杭县': [116.42, 25.05], + '武平县': [116.1, 25.1], + '连城县': [116.75, 25.72], + '漳平市': [117.42, 25.3], + '宁德市': [119.52, 26.67], + '蕉城区': [119.52, 26.67], + '霞浦县': [120.0, 26.88], + '古田县': [118.75, 26.58], + '屏南县': [118.98, 26.92], + '寿宁县': [119.5, 27.47], + '周宁县': [119.33, 27.12], + '柘荣县': [119.9, 27.23], + '福安市': [119.65, 27.08], + '福鼎市': [120.22, 27.33], + '南昌市': [115.85, 28.68], + '东湖区': [115.9, 28.68], + '西湖区': [115.87, 28.67], + '青云谱区': [115.92, 28.63], + '湾里区': [115.73, 28.72], + '青山湖区': [115.95, 28.68], + '南昌县': [115.93, 28.55], + '新建县': [115.82, 28.7], + '安义县': [115.55, 28.85], + '进贤县': [116.27, 28.37], + '景德镇市': [117.17, 29.27], + '昌江区': [117.17, 29.27], + '珠山区': [117.2, 29.3], + '浮梁县': [117.25, 29.37], + '乐平市': [117.12, 28.97], + '萍乡市': [113.85, 27.63], + '安源区': [113.87, 27.65], + '湘东区': [113.73, 27.65], + '莲花县': [113.95, 27.13], + '上栗县': [113.8, 27.88], + '芦溪县': [114.03, 27.63], + '九江市': [116.0, 29.7], + '庐山区': [115.98, 29.68], + '浔阳区': [115.98, 29.73], + '九江县': [115.88, 29.62], + '武宁县': [115.1, 29.27], + '修水县': [114.57, 29.03], + '永修县': [115.8, 29.03], + '德安县': [115.77, 29.33], + '星子县': [116.03, 29.45], + '都昌县': [116.18, 29.27], + '湖口县': [116.22, 29.73], + '彭泽县': [116.55, 29.9], + '瑞昌市': [115.67, 29.68], + '新余市': [114.92, 27.82], + '渝水区': [114.93, 27.8], + '分宜县': [114.67, 27.82], + '鹰潭市': [117.07, 28.27], + '月湖区': [117.05, 28.23], + '余江县': [116.82, 28.2], + '贵溪市': [117.22, 28.28], + '赣州市': [114.93, 25.83], + '章贡区': [114.93, 25.87], + '赣县': [115.0, 25.87], + '信丰县': [114.93, 25.38], + '大余县': [114.35, 25.4], + '上犹县': [114.53, 25.8], + '崇义县': [114.3, 25.7], + '安远县': [115.38, 25.13], + '龙南县': [114.78, 24.92], + '定南县': [115.03, 24.78], + '全南县': [114.52, 24.75], + '宁都县': [116.02, 26.48], + '于都县': [115.42, 25.95], + '兴国县': [115.35, 26.33], + '会昌县': [115.78, 25.6], + '寻乌县': [115.65, 24.95], + '石城县': [116.33, 26.33], + '瑞金市': [116.03, 25.88], + '南康市': [114.75, 25.65], + '吉安市': [114.98, 27.12], + '吉州区': [114.98, 27.12], + '青原区': [115.0, 27.1], + '吉安县': [114.9, 27.05], + '吉水县': [115.13, 27.22], + '峡江县': [115.33, 27.62], + '新干县': [115.4, 27.77], + '永丰县': [115.43, 27.32], + '泰和县': [114.88, 26.8], + '遂川县': [114.52, 26.33], + '万安县': [114.78, 26.47], + '安福县': [114.62, 27.38], + '永新县': [114.23, 26.95], + '井冈山市': [114.27, 26.72], + '宜春市': [114.38, 27.8], + '袁州区': [114.38, 27.8], + '奉新县': [115.38, 28.7], + '万载县': [114.43, 28.12], + '上高县': [114.92, 28.23], + '宜丰县': [114.78, 28.38], + '靖安县': [115.35, 28.87], + '铜鼓县': [114.37, 28.53], + '丰城市': [115.78, 28.2], + '樟树市': [115.53, 28.07], + '高安市': [115.37, 28.42], + '抚州市': [116.35, 28.0], + '临川区': [116.35, 27.98], + '南城县': [116.63, 27.55], + '黎川县': [116.92, 27.3], + '南丰县': [116.53, 27.22], + '崇仁县': [116.05, 27.77], + '乐安县': [115.83, 27.43], + '宜黄县': [116.22, 27.55], + '金溪县': [116.77, 27.92], + '资溪县': [117.07, 27.7], + '东乡县': [116.62, 28.23], + '广昌县': [116.32, 26.83], + '上饶市': [117.97, 28.45], + '信州区': [117.95, 28.43], + '上饶县': [117.92, 28.43], + '广丰县': [118.18, 28.43], + '玉山县': [118.25, 28.68], + '铅山县': [117.7, 28.32], + '横峰县': [117.6, 28.42], + '弋阳县': [117.43, 28.4], + '余干县': [116.68, 28.7], + '鄱阳县': [116.67, 29.0], + '万年县': [117.07, 28.7], + '婺源县': [117.85, 29.25], + '德兴市': [117.57, 28.95], + '济南市': [116.98, 36.67], + '历下区': [117.08, 36.67], + '市中区': [117.57, 34.87], + '槐荫区': [116.93, 36.65], + '天桥区': [116.98, 36.68], + '历城区': [117.07, 36.68], + '长清区': [116.73, 36.55], + '平阴县': [116.45, 36.28], + '济阳县': [117.22, 36.98], + '商河县': [117.15, 37.32], + '章丘市': [117.53, 36.72], + '青岛市': [120.38, 36.07], + '市南区': [120.38, 36.07], + '市北区': [120.38, 36.08], + '四方区': [120.35, 36.1], + '黄岛区': [120.18, 35.97], + '崂山区': [120.47, 36.1], + '李沧区': [120.43, 36.15], + '城阳区': [120.37, 36.3], + '胶州市': [120.03, 36.27], + '即墨市': [120.45, 36.38], + '平度市': [119.95, 36.78], + '胶南市': [120.03, 35.87], + '莱西市': [120.5, 36.87], + '淄博市': [118.05, 36.82], + '张店区': [118.03, 36.82], + '博山区': [117.85, 36.5], + '临淄区': [118.3, 36.82], + '周村区': [117.87, 36.8], + '桓台县': [118.08, 36.97], + '高青县': [117.82, 37.17], + '沂源县': [118.17, 36.18], + '枣庄市': [117.32, 34.82], + '薛城区': [117.25, 34.8], + '峄城区': [117.58, 34.77], + '台儿庄区': [117.73, 34.57], + '山亭区': [117.45, 35.08], + '滕州市': [117.15, 35.08], + '东营市': [118.67, 37.43], + '东营区': [118.5, 37.47], + '河口区': [118.53, 37.88], + '垦利县': [118.55, 37.58], + '利津县': [118.25, 37.48], + '广饶县': [118.4, 37.07], + '烟台市': [121.43, 37.45], + '芝罘区': [121.38, 37.53], + '福山区': [121.25, 37.5], + '牟平区': [121.6, 37.38], + '莱山区': [121.43, 37.5], + '长岛县': [120.73, 37.92], + '龙口市': [120.52, 37.65], + '莱阳市': [120.7, 36.98], + '莱州市': [119.93, 37.18], + '蓬莱市': [120.75, 37.82], + '招远市': [120.4, 37.37], + '栖霞市': [120.83, 37.3], + '海阳市': [121.15, 36.78], + '潍坊市': [119.15, 36.7], + '潍城区': [119.1, 36.72], + '寒亭区': [119.22, 36.77], + '坊子区': [119.17, 36.67], + '奎文区': [119.12, 36.72], + '临朐县': [118.53, 36.52], + '昌乐县': [118.82, 36.7], + '青州市': [118.47, 36.68], + '诸城市': [119.4, 36.0], + '寿光市': [118.73, 36.88], + '安丘市': [119.2, 36.43], + '高密市': [119.75, 36.38], + '昌邑市': [119.4, 36.87], + '济宁市': [116.58, 35.42], + '任城区': [116.58, 35.42], + '微山县': [117.13, 34.82], + '鱼台县': [116.65, 35.0], + '金乡县': [116.3, 35.07], + '嘉祥县': [116.33, 35.42], + '汶上县': [116.48, 35.73], + '泗水县': [117.27, 35.67], + '梁山县': [116.08, 35.8], + '曲阜市': [116.98, 35.58], + '兖州市': [116.83, 35.55], + '邹城市': [116.97, 35.4], + '泰安市': [117.08, 36.2], + '泰山区': [117.13, 36.18], + '岱岳区': [117.0, 36.18], + '宁阳县': [116.8, 35.77], + '东平县': [116.47, 35.93], + '新泰市': [117.77, 35.92], + '肥城市': [116.77, 36.18], + '威海市': [122.12, 37.52], + '环翠区': [122.12, 37.5], + '文登市': [122.05, 37.2], + '荣成市': [122.42, 37.17], + '乳山市': [121.53, 36.92], + '日照市': [119.52, 35.42], + '东港区': [119.45, 35.42], + '岚山区': [119.33, 35.1], + '五莲县': [119.2, 35.75], + '莒县': [118.83, 35.58], + '莱芜市': [117.67, 36.22], + '莱城区': [117.65, 36.2], + '钢城区': [117.8, 36.07], + '临沂市': [118.35, 35.05], + '兰山区': [118.33, 35.07], + '罗庄区': [118.28, 34.98], + '河东区': [118.4, 35.08], + '沂南县': [118.47, 35.55], + '郯城县': [118.35, 34.62], + '沂水县': [118.62, 35.78], + '苍山县': [118.05, 34.85], + '费县': [117.97, 35.27], + '平邑县': [117.63, 35.5], + '莒南县': [118.83, 35.18], + '蒙阴县': [117.93, 35.72], + '临沭县': [118.65, 34.92], + '德州市': [116.3, 37.45], + '德城区': [116.3, 37.45], + '陵县': [116.57, 37.33], + '宁津县': [116.78, 37.65], + '庆云县': [117.38, 37.78], + '临邑县': [116.87, 37.18], + '齐河县': [116.75, 36.8], + '平原县': [116.43, 37.17], + '夏津县': [116.0, 36.95], + '武城县': [116.07, 37.22], + '乐陵市': [117.23, 37.73], + '禹城市': [116.63, 36.93], + '聊城市': [115.98, 36.45], + '东昌府区': [115.98, 36.45], + '阳谷县': [115.78, 36.12], + '莘县': [115.67, 36.23], + '茌平县': [116.25, 36.58], + '东阿县': [116.25, 36.33], + '冠县': [115.43, 36.48], + '高唐县': [116.23, 36.87], + '临清市': [115.7, 36.85], + '滨州市': [117.97, 37.38], + '滨城区': [118.0, 37.38], + '惠民县': [117.5, 37.48], + '阳信县': [117.58, 37.63], + '无棣县': [117.6, 37.73], + '沾化县': [118.13, 37.7], + '博兴县': [118.13, 37.15], + '邹平县': [117.73, 36.88], + '牡丹区': [115.43, 35.25], + '曹县': [115.53, 34.83], + '单县': [116.08, 34.8], + '成武县': [115.88, 34.95], + '巨野县': [116.08, 35.4], + '郓城县': [115.93, 35.6], + '鄄城县': [115.5, 35.57], + '定陶县': [115.57, 35.07], + '东明县': [115.08, 35.28], + '郑州市': [113.62, 34.75], + '中原区': [113.6, 34.75], + '二七区': [113.65, 34.73], + '管城回族区': [113.67, 34.75], + '金水区': [113.65, 34.78], + '上街区': [113.28, 34.82], + '惠济区': [113.6, 34.87], + '中牟县': [113.97, 34.72], + '巩义市': [112.98, 34.77], + '荥阳市': [113.4, 34.78], + '新密市': [113.38, 34.53], + '新郑市': [113.73, 34.4], + '登封市': [113.03, 34.47], + '开封市': [114.3, 34.8], + '龙亭区': [114.35, 34.8], + '顺河回族区': [114.35, 34.8], + '杞县': [114.78, 34.55], + '通许县': [114.47, 34.48], + '尉氏县': [114.18, 34.42], + '开封县': [114.43, 34.77], + '兰考县': [114.82, 34.82], + '洛阳市': [112.45, 34.62], + '老城区': [112.47, 34.68], + '西工区': [112.43, 34.67], + '涧西区': [112.4, 34.67], + '吉利区': [112.58, 34.9], + '洛龙区': [112.45, 34.62], + '孟津县': [112.43, 34.83], + '新安县': [112.15, 34.72], + '栾川县': [111.62, 33.78], + '嵩县': [112.1, 34.15], + '汝阳县': [112.47, 34.15], + '宜阳县': [112.17, 34.52], + '洛宁县': [111.65, 34.38], + '伊川县': [112.42, 34.42], + '偃师市': [112.78, 34.73], + '平顶山市': [113.18, 33.77], + '新华区': [113.3, 33.73], + '卫东区': [113.33, 33.73], + '石龙区': [112.88, 33.9], + '湛河区': [113.28, 33.73], + '宝丰县': [113.07, 33.88], + '叶县': [113.35, 33.62], + '鲁山县': [112.9, 33.73], + '郏县': [113.22, 33.97], + '舞钢市': [113.52, 33.3], + '汝州市': [112.83, 34.17], + '安阳市': [114.38, 36.1], + '文峰区': [114.35, 36.08], + '北关区': [114.35, 36.12], + '殷都区': [114.3, 36.12], + '龙安区': [114.32, 36.1], + '安阳县': [114.35, 36.1], + '汤阴县': [114.35, 35.92], + '滑县': [114.52, 35.58], + '内黄县': [114.9, 35.95], + '林州市': [113.82, 36.07], + '鹤壁市': [114.28, 35.75], + '鹤山区': [114.15, 35.95], + '山城区': [114.18, 35.9], + '淇滨区': [114.3, 35.73], + '浚县': [114.55, 35.67], + '淇县': [114.2, 35.6], + '新乡市': [113.9, 35.3], + '红旗区': [113.87, 35.3], + '卫滨区': [113.85, 35.3], + '凤泉区': [113.92, 35.38], + '牧野区': [113.9, 35.32], + '新乡县': [113.8, 35.2], + '获嘉县': [113.65, 35.27], + '原阳县': [113.97, 35.05], + '延津县': [114.2, 35.15], + '封丘县': [114.42, 35.05], + '长垣县': [114.68, 35.2], + '卫辉市': [114.07, 35.4], + '辉县市': [113.8, 35.47], + '焦作市': [113.25, 35.22], + '解放区': [113.22, 35.25], + '中站区': [113.17, 35.23], + '马村区': [113.32, 35.27], + '山阳区': [113.25, 35.22], + '修武县': [113.43, 35.23], + '博爱县': [113.07, 35.17], + '武陟县': [113.38, 35.1], + '温县': [113.08, 34.93], + '济源市': [112.58, 35.07], + '沁阳市': [112.93, 35.08], + '孟州市': [112.78, 34.9], + '濮阳市': [115.03, 35.77], + '华龙区': [115.07, 35.78], + '清丰县': [115.12, 35.9], + '南乐县': [115.2, 36.08], + '范县': [115.5, 35.87], + '台前县': [115.85, 36.0], + '濮阳县': [115.02, 35.7], + '许昌市': [113.85, 34.03], + '魏都区': [113.82, 34.03], + '许昌县': [113.83, 34.0], + '鄢陵县': [114.2, 34.1], + '襄城县': [113.48, 33.85], + '禹州市': [113.47, 34.17], + '长葛市': [113.77, 34.22], + '漯河市': [114.02, 33.58], + '郾城区': [114.0, 33.58], + '召陵区': [114.07, 33.57], + '舞阳县': [113.6, 33.43], + '临颍县': [113.93, 33.82], + '三门峡市': [111.2, 34.78], + '湖滨区': [111.2, 34.78], + '渑池县': [111.75, 34.77], + '陕县': [111.08, 34.7], + '卢氏县': [111.05, 34.05], + '义马市': [111.87, 34.75], + '灵宝市': [110.87, 34.52], + '南阳市': [112.52, 33.0], + '宛城区': [112.55, 33.02], + '卧龙区': [112.53, 32.98], + '南召县': [112.43, 33.5], + '方城县': [113.0, 33.27], + '西峡县': [111.48, 33.28], + '镇平县': [112.23, 33.03], + '内乡县': [111.85, 33.05], + '淅川县': [111.48, 33.13], + '社旗县': [112.93, 33.05], + '唐河县': [112.83, 32.7], + '新野县': [112.35, 32.52], + '桐柏县': [113.4, 32.37], + '邓州市': [112.08, 32.68], + '商丘市': [115.65, 34.45], + '梁园区': [115.63, 34.45], + '睢阳区': [115.63, 34.38], + '民权县': [115.13, 34.65], + '睢县': [115.07, 34.45], + '宁陵县': [115.32, 34.45], + '柘城县': [115.3, 34.07], + '虞城县': [115.85, 34.4], + '夏邑县': [116.13, 34.23], + '永城市': [116.43, 33.92], + '信阳市': [114.07, 32.13], + '浉河区': [114.05, 32.12], + '平桥区': [114.12, 32.1], + '罗山县': [114.53, 32.2], + '光山县': [114.9, 32.02], + '新县': [114.87, 31.63], + '商城县': [115.4, 31.8], + '固始县': [115.68, 32.18], + '潢川县': [115.03, 32.13], + '淮滨县': [115.4, 32.43], + '息县': [114.73, 32.35], + '周口市': [114.65, 33.62], + '扶沟县': [114.38, 34.07], + '西华县': [114.53, 33.8], + '商水县': [114.6, 33.53], + '沈丘县': [115.07, 33.4], + '郸城县': [115.2, 33.65], + '淮阳县': [114.88, 33.73], + '太康县': [114.85, 34.07], + '鹿邑县': [115.48, 33.87], + '项城市': [114.9, 33.45], + '驻马店市': [114.02, 32.98], + '驿城区': [114.05, 32.97], + '西平县': [114.02, 33.38], + '上蔡县': [114.27, 33.27], + '平舆县': [114.63, 32.97], + '正阳县': [114.38, 32.6], + '确山县': [114.02, 32.8], + '泌阳县': [113.32, 32.72], + '汝南县': [114.35, 33.0], + '遂平县': [114.0, 33.15], + '新蔡县': [114.98, 32.75], + '武汉市': [114.3, 30.6], + '江岸区': [114.3, 30.6], + '江汉区': [114.27, 30.6], + '硚口区': [114.27, 30.57], + '汉阳区': [114.27, 30.55], + '武昌区': [114.3, 30.57], + '青山区': [114.38, 30.63], + '洪山区': [114.33, 30.5], + '东西湖区': [114.13, 30.62], + '汉南区': [114.08, 30.32], + '蔡甸区': [114.03, 30.58], + '江夏区': [114.32, 30.35], + '黄陂区': [114.37, 30.87], + '新洲区': [114.8, 30.85], + '黄石市': [115.03, 30.2], + '黄石港区': [115.07, 30.23], + '西塞山区': [115.12, 30.2], + '下陆区': [114.97, 30.18], + '铁山区': [114.9, 30.2], + '阳新县': [115.2, 29.85], + '大冶市': [114.97, 30.1], + '十堰市': [110.78, 32.65], + '茅箭区': [110.82, 32.6], + '张湾区': [110.78, 32.65], + '郧县': [110.82, 32.83], + '郧西县': [110.42, 33.0], + '竹山县': [110.23, 32.23], + '竹溪县': [109.72, 32.32], + '房县': [110.73, 32.07], + '丹江口市': [111.52, 32.55], + '宜昌市': [111.28, 30.7], + '西陵区': [111.27, 30.7], + '伍家岗区': [111.35, 30.65], + '点军区': [111.27, 30.7], + '猇亭区': [111.42, 30.53], + '夷陵区': [111.32, 30.77], + '远安县': [111.63, 31.07], + '兴山县': [110.75, 31.35], + '秭归县': [110.98, 30.83], + '长阳土家族自治县': [111.18, 30.47], + '五峰土家族自治县': [110.67, 30.2], + '宜都市': [111.45, 30.4], + '当阳市': [111.78, 30.82], + '枝江市': [111.77, 30.43], + '襄樊市': [112.15, 32.02], + '襄城区': [112.15, 32.02], + '樊城区': [112.13, 32.03], + '襄阳区': [112.2, 32.08], + '南漳县': [111.83, 31.78], + '谷城县': [111.65, 32.27], + '保康县': [111.25, 31.88], + '老河口市': [111.67, 32.38], + '枣阳市': [112.75, 32.13], + '宜城市': [112.25, 31.72], + '鄂州市': [114.88, 30.4], + '梁子湖区': [114.67, 30.08], + '华容区': [114.73, 30.53], + '鄂城区': [114.88, 30.4], + '荆门市': [112.2, 31.03], + '东宝区': [112.2, 31.05], + '掇刀区': [112.2, 30.98], + '京山县': [113.1, 31.02], + '沙洋县': [112.58, 30.7], + '钟祥市': [112.58, 31.17], + '孝感市': [113.92, 30.93], + '孝南区': [113.92, 30.92], + '孝昌县': [113.97, 31.25], + '大悟县': [114.12, 31.57], + '云梦县': [113.75, 31.02], + '应城市': [113.57, 30.95], + '安陆市': [113.68, 31.27], + '汉川市': [113.83, 30.65], + '荆州市': [112.23, 30.33], + '沙市区': [112.25, 30.32], + '荆州区': [112.18, 30.35], + '公安县': [112.23, 30.07], + '监利县': [112.88, 29.82], + '江陵县': [112.42, 30.03], + '石首市': [112.4, 29.73], + '洪湖市': [113.45, 29.8], + '松滋市': [111.77, 30.18], + '黄冈市': [114.87, 30.45], + '黄州区': [114.88, 30.43], + '团风县': [114.87, 30.63], + '红安县': [114.62, 31.28], + '罗田县': [115.4, 30.78], + '英山县': [115.67, 30.75], + '浠水县': [115.27, 30.45], + '蕲春县': [115.43, 30.23], + '黄梅县': [115.93, 30.08], + '麻城市': [115.03, 31.18], + '武穴市': [115.55, 29.85], + '咸宁市': [114.32, 29.85], + '咸安区': [114.3, 29.87], + '嘉鱼县': [113.9, 29.98], + '通城县': [113.82, 29.25], + '崇阳县': [114.03, 29.55], + '通山县': [114.52, 29.6], + '赤壁市': [113.88, 29.72], + '随州市': [113.37, 31.72], + '曾都区': [113.37, 31.72], + '广水市': [113.82, 31.62], + '恩施土家族苗族自治州': [109.47, 30.3], + '恩施市': [109.47, 30.3], + '利川市': [108.93, 30.3], + '建始县': [109.73, 30.6], + '巴东县': [110.33, 31.05], + '宣恩县': [109.48, 29.98], + '咸丰县': [109.15, 29.68], + '来凤县': [109.4, 29.52], + '鹤峰县': [110.03, 29.9], + '仙桃市': [113.45, 30.37], + '潜江市': [112.88, 30.42], + '天门市': [113.17, 30.67], + '神农架林区': [110.67, 31.75], + '长沙市': [112.93, 28.23], + '芙蓉区': [113.03, 28.18], + '天心区': [112.98, 28.12], + '岳麓区': [112.93, 28.23], + '开福区': [112.98, 28.25], + '雨花区': [113.03, 28.13], + '长沙县': [113.07, 28.25], + '望城县': [112.82, 28.37], + '宁乡县': [112.55, 28.25], + '浏阳市': [113.63, 28.15], + '株洲市': [113.13, 27.83], + '荷塘区': [113.17, 27.87], + '芦淞区': [113.15, 27.83], + '石峰区': [113.1, 27.87], + '天元区': [113.12, 27.83], + '株洲县': [113.13, 27.72], + '攸县': [113.33, 27.0], + '茶陵县': [113.53, 26.8], + '炎陵县': [113.77, 26.48], + '醴陵市': [113.48, 27.67], + '湘潭市': [112.93, 27.83], + '雨湖区': [112.9, 27.87], + '岳塘区': [112.95, 27.87], + '湘潭县': [112.95, 27.78], + '湘乡市': [112.53, 27.73], + '韶山市': [112.52, 27.93], + '衡阳市': [112.57, 26.9], + '珠晖区': [112.62, 26.9], + '雁峰区': [112.6, 26.88], + '石鼓区': [112.6, 26.9], + '蒸湘区': [112.6, 26.9], + '南岳区': [112.73, 27.25], + '衡阳县': [112.37, 26.97], + '衡南县': [112.67, 26.73], + '衡山县': [112.87, 27.23], + '衡东县': [112.95, 27.08], + '祁东县': [112.12, 26.78], + '耒阳市': [112.85, 26.42], + '常宁市': [112.38, 26.42], + '邵阳市': [111.47, 27.25], + '双清区': [111.47, 27.23], + '大祥区': [111.45, 27.23], + '北塔区': [111.45, 27.25], + '邵东县': [111.75, 27.25], + '新邵县': [111.45, 27.32], + '邵阳县': [111.27, 27.0], + '隆回县': [111.03, 27.12], + '洞口县': [110.57, 27.05], + '绥宁县': [110.15, 26.58], + '新宁县': [110.85, 26.43], + '城步苗族自治县': [110.32, 26.37], + '武冈市': [110.63, 26.73], + '岳阳市': [113.12, 29.37], + '岳阳楼区': [113.1, 29.37], + '云溪区': [113.3, 29.47], + '君山区': [113.0, 29.43], + '岳阳县': [113.12, 29.15], + '华容县': [112.57, 29.52], + '湘阴县': [112.88, 28.68], + '平江县': [113.58, 28.72], + '汨罗市': [113.08, 28.8], + '临湘市': [113.47, 29.48], + '常德市': [111.68, 29.05], + '武陵区': [111.68, 29.03], + '鼎城区': [111.68, 29.02], + '安乡县': [112.17, 29.42], + '汉寿县': [111.97, 28.9], + '澧县': [111.75, 29.63], + '临澧县': [111.65, 29.45], + '桃源县': [111.48, 28.9], + '石门县': [111.38, 29.58], + '津市市': [111.88, 29.62], + '张家界市': [110.47, 29.13], + '永定区': [110.48, 29.13], + '武陵源区': [110.53, 29.35], + '慈利县': [111.12, 29.42], + '桑植县': [110.15, 29.4], + '益阳市': [112.32, 28.6], + '资阳区': [112.32, 28.6], + '赫山区': [112.37, 28.6], + '南县': [112.4, 29.38], + '桃江县': [112.12, 28.53], + '安化县': [111.22, 28.38], + '沅江市': [112.38, 28.85], + '郴州市': [113.02, 25.78], + '北湖区': [113.02, 25.8], + '苏仙区': [113.03, 25.8], + '桂阳县': [112.73, 25.73], + '宜章县': [112.95, 25.4], + '永兴县': [113.1, 26.13], + '嘉禾县': [112.37, 25.58], + '临武县': [112.55, 25.28], + '汝城县': [113.68, 25.55], + '桂东县': [113.93, 26.08], + '安仁县': [113.27, 26.7], + '资兴市': [113.23, 25.98], + '永州市': [111.62, 26.43], + '冷水滩区': [111.6, 26.43], + '祁阳县': [111.85, 26.58], + '东安县': [111.28, 26.4], + '双牌县': [111.65, 25.97], + '道县': [111.58, 25.53], + '江永县': [111.33, 25.28], + '宁远县': [111.93, 25.6], + '蓝山县': [112.18, 25.37], + '新田县': [112.22, 25.92], + '江华瑶族自治县': [111.58, 25.18], + '怀化市': [110.0, 27.57], + '鹤城区': [109.95, 27.55], + '中方县': [109.93, 27.4], + '沅陵县': [110.38, 28.47], + '辰溪县': [110.18, 28.0], + '溆浦县': [110.58, 27.92], + '会同县': [109.72, 26.87], + '麻阳苗族自治县': [109.8, 27.87], + '新晃侗族自治县': [109.17, 27.37], + '芷江侗族自治县': [109.68, 27.45], + '靖州苗族侗族自治县': [109.68, 26.58], + '通道侗族自治县': [109.78, 26.17], + '洪江市': [109.82, 27.2], + '娄底市': [112.0, 27.73], + '娄星区': [112.0, 27.73], + '双峰县': [112.2, 27.45], + '新化县': [111.3, 27.75], + '冷水江市': [111.43, 27.68], + '涟源市': [111.67, 27.7], + '湘西土家族苗族自治州': [109.73, 28.32], + '吉首市': [109.73, 28.32], + '泸溪县': [110.22, 28.22], + '凤凰县': [109.6, 27.95], + '花垣县': [109.48, 28.58], + '保靖县': [109.65, 28.72], + '古丈县': [109.95, 28.62], + '永顺县': [109.85, 29.0], + '龙山县': [109.43, 29.47], + '广州市': [113.27, 23.13], + '荔湾区': [113.23, 23.13], + '越秀区': [113.27, 23.13], + '海珠区': [113.25, 23.1], + '天河区': [113.35, 23.12], + '黄埔区': [113.45, 23.1], + '番禺区': [113.35, 22.95], + '花都区': [113.22, 23.4], + '增城市': [113.83, 23.3], + '从化市': [113.58, 23.55], + '韶关市': [113.6, 24.82], + '武江区': [113.57, 24.8], + '浈江区': [113.6, 24.8], + '曲江区': [113.6, 24.68], + '始兴县': [114.07, 24.95], + '仁化县': [113.75, 25.08], + '翁源县': [114.13, 24.35], + '乳源瑶族自治县': [113.27, 24.78], + '新丰县': [114.2, 24.07], + '乐昌市': [113.35, 25.13], + '南雄市': [114.3, 25.12], + '深圳市': [114.05, 22.55], + '罗湖区': [114.12, 22.55], + '福田区': [114.05, 22.53], + '南山区': [113.92, 22.52], + '宝安区': [113.9, 22.57], + '龙岗区': [114.27, 22.73], + '盐田区': [114.22, 22.55], + '珠海市': [113.57, 22.27], + '香洲区': [113.55, 22.27], + '斗门区': [113.28, 22.22], + '金湾区': [113.4, 22.07], + '汕头市': [116.68, 23.35], + '龙湖区': [116.72, 23.37], + '金平区': [116.7, 23.37], + '潮阳区': [116.6, 23.27], + '潮南区': [116.43, 23.25], + '澄海区': [116.77, 23.48], + '南澳县': [117.02, 23.42], + '佛山市': [113.12, 23.02], + '南海区': [113.15, 23.03], + '顺德区': [113.3, 22.8], + '三水区': [112.87, 23.17], + '高明区': [112.88, 22.9], + '江门市': [113.08, 22.58], + '新会区': [113.03, 22.47], + '台山市': [112.78, 22.25], + '开平市': [112.67, 22.38], + '鹤山市': [112.97, 22.77], + '恩平市': [112.3, 22.18], + '湛江市': [110.35, 21.27], + '赤坎区': [110.37, 21.27], + '霞山区': [110.4, 21.2], + '坡头区': [110.47, 21.23], + '麻章区': [110.32, 21.27], + '遂溪县': [110.25, 21.38], + '徐闻县': [110.17, 20.33], + '廉江市': [110.27, 21.62], + '雷州市': [110.08, 20.92], + '吴川市': [110.77, 21.43], + '茂名市': [110.92, 21.67], + '茂南区': [110.92, 21.63], + '茂港区': [111.02, 21.47], + '电白县': [111.0, 21.5], + '高州市': [110.85, 21.92], + '化州市': [110.63, 21.67], + '信宜市': [110.95, 22.35], + '肇庆市': [112.47, 23.05], + '端州区': [112.48, 23.05], + '鼎湖区': [112.57, 23.17], + '广宁县': [112.43, 23.63], + '怀集县': [112.18, 23.92], + '封开县': [111.5, 23.43], + '德庆县': [111.77, 23.15], + '高要市': [112.45, 23.03], + '四会市': [112.68, 23.33], + '惠州市': [114.42, 23.12], + '惠城区': [114.4, 23.08], + '惠阳区': [114.47, 22.8], + '博罗县': [114.28, 23.18], + '惠东县': [114.72, 22.98], + '龙门县': [114.25, 23.73], + '梅州市': [116.12, 24.28], + '梅江区': [116.12, 24.32], + '梅县': [116.05, 24.28], + '大埔县': [116.7, 24.35], + '丰顺县': [116.18, 23.77], + '五华县': [115.77, 23.93], + '平远县': [115.88, 24.57], + '蕉岭县': [116.17, 24.67], + '兴宁市': [115.73, 24.15], + '汕尾市': [115.37, 22.78], + '海丰县': [115.33, 22.97], + '陆河县': [115.65, 23.3], + '陆丰市': [115.65, 22.95], + '河源市': [114.7, 23.73], + '源城区': [114.7, 23.73], + '紫金县': [115.18, 23.63], + '龙川县': [115.25, 24.1], + '连平县': [114.48, 24.37], + '和平县': [114.93, 24.45], + '东源县': [114.77, 23.82], + '阳江市': [111.98, 21.87], + '江城区': [111.95, 21.87], + '阳西县': [111.62, 21.75], + '阳东县': [112.02, 21.88], + '阳春市': [111.78, 22.18], + '清远市': [113.03, 23.7], + '清城区': [113.02, 23.7], + '佛冈县': [113.53, 23.88], + '阳山县': [112.63, 24.48], + '连山壮族瑶族自治县': [112.08, 24.57], + '连南瑶族自治县': [112.28, 24.72], + '清新县': [112.98, 23.73], + '英德市': [113.4, 24.18], + '连州市': [112.38, 24.78], + '东莞市': [113.75, 23.05], + '中山市': [113.38, 22.52], + '潮州市': [116.62, 23.67], + '湘桥区': [116.63, 23.68], + '潮安县': [116.68, 23.45], + '饶平县': [117.0, 23.67], + '揭阳市': [116.37, 23.55], + '揭东县': [116.42, 23.57], + '揭西县': [115.83, 23.43], + '惠来县': [116.28, 23.03], + '普宁市': [116.18, 23.3], + '云浮市': [112.03, 22.92], + '云城区': [112.03, 22.93], + '新兴县': [112.23, 22.7], + '郁南县': [111.53, 23.23], + '云安县': [112.0, 23.08], + '罗定市': [111.57, 22.77], + '南宁市': [108.37, 22.82], + '兴宁区': [108.38, 22.87], + '江南区': [108.28, 22.78], + '西乡塘区': [108.3, 22.83], + '良庆区': [108.32, 22.77], + '邕宁区': [108.48, 22.75], + '武鸣县': [108.27, 23.17], + '隆安县': [107.68, 23.18], + '马山县': [108.17, 23.72], + '上林县': [108.6, 23.43], + '宾阳县': [108.8, 23.22], + '横县': [109.27, 22.68], + '柳州市': [109.42, 24.33], + '柳南区': [109.38, 24.35], + '柳江县': [109.33, 24.27], + '柳城县': [109.23, 24.65], + '鹿寨县': [109.73, 24.48], + '融安县': [109.4, 25.23], + '融水苗族自治县': [109.25, 25.07], + '三江侗族自治县': [109.6, 25.78], + '桂林市': [110.28, 25.28], + '阳朔县': [110.48, 24.78], + '临桂县': [110.2, 25.23], + '灵川县': [110.32, 25.42], + '全州县': [111.07, 25.93], + '兴安县': [110.67, 25.62], + '永福县': [109.98, 24.98], + '灌阳县': [111.15, 25.48], + '龙胜各族自治县': [110.0, 25.8], + '资源县': [110.63, 26.03], + '平乐县': [110.63, 24.63], + '恭城瑶族自治县': [110.83, 24.83], + '梧州市': [111.27, 23.48], + '苍梧县': [111.23, 23.42], + '藤县': [110.92, 23.38], + '蒙山县': [110.52, 24.2], + '岑溪市': [110.98, 22.92], + '北海市': [109.12, 21.48], + '铁山港区': [109.43, 21.53], + '合浦县': [109.2, 21.67], + '防城港市': [108.35, 21.7], + '港口区': [108.37, 21.65], + '防城区': [108.35, 21.77], + '上思县': [107.98, 22.15], + '东兴市': [107.97, 21.53], + '钦州市': [108.62, 21.95], + '钦北区': [108.63, 21.98], + '灵山县': [109.3, 22.43], + '浦北县': [109.55, 22.27], + '贵港市': [109.6, 23.1], + '覃塘区': [109.42, 23.13], + '平南县': [110.38, 23.55], + '桂平市': [110.08, 23.4], + '玉林市': [110.17, 22.63], + '容县': [110.55, 22.87], + '陆川县': [110.27, 22.33], + '博白县': [109.97, 22.28], + '兴业县': [109.87, 22.75], + '北流市': [110.35, 22.72], + '百色市': [106.62, 23.9], + '田阳县': [106.92, 23.73], + '田东县': [107.12, 23.6], + '平果县': [107.58, 23.32], + '德保县': [106.62, 23.33], + '靖西县': [106.42, 23.13], + '那坡县': [105.83, 23.42], + '凌云县': [106.57, 24.35], + '乐业县': [106.55, 24.78], + '田林县': [106.23, 24.3], + '西林县': [105.1, 24.5], + '隆林各族自治县': [105.33, 24.77], + '贺州市': [111.55, 24.42], + '昭平县': [110.8, 24.17], + '钟山县': [111.3, 24.53], + '富川瑶族自治县': [111.27, 24.83], + '河池市': [108.07, 24.7], + '金城江区': [108.05, 24.7], + '南丹县': [107.53, 24.98], + '天峨县': [107.17, 25.0], + '凤山县': [107.05, 24.55], + '东兰县': [107.37, 24.52], + '罗城仫佬族自治县': [108.9, 24.78], + '环江毛南族自治县': [108.25, 24.83], + '巴马瑶族自治县': [107.25, 24.15], + '都安瑶族自治县': [108.1, 23.93], + '大化瑶族自治县': [107.98, 23.73], + '宜州市': [108.67, 24.5], + '来宾市': [109.23, 23.73], + '忻城县': [108.67, 24.07], + '象州县': [109.68, 23.97], + '武宣县': [109.67, 23.6], + '金秀瑶族自治县': [110.18, 24.13], + '合山市': [108.87, 23.82], + '崇左市': [107.37, 22.4], + '扶绥县': [107.9, 22.63], + '宁明县': [107.07, 22.13], + '龙州县': [106.85, 22.35], + '大新县': [107.2, 22.83], + '天等县': [107.13, 23.08], + '凭祥市': [106.75, 22.12], + '海口市': [110.32, 20.03], + '秀英区': [110.28, 20.02], + '龙华区': [110.3, 20.03], + '琼山区': [110.35, 20.0], + '美兰区': [110.37, 20.03], + '三亚市': [109.5, 18.25], + '五指山市': [109.52, 18.78], + '琼海市': [110.47, 19.25], + '儋州市': [109.57, 19.52], + '文昌市': [110.8, 19.55], + '万宁市': [110.4, 18.8], + '东方市': [108.63, 19.1], + '定安县': [110.32, 19.7], + '屯昌县': [110.1, 19.37], + '澄迈县': [110.0, 19.73], + '临高县': [109.68, 19.92], + '白沙黎族自治县': [109.45, 19.23], + '昌江黎族自治县': [109.05, 19.25], + '乐东黎族自治县': [109.17, 18.75], + '陵水黎族自治县': [110.03, 18.5], + '保亭黎族苗族自治县': [109.7, 18.63], + '琼中黎族苗族自治县': [109.83, 19.03], + '重庆市': [106.55, 29.57], + '万州区': [108.4, 30.82], + '涪陵区': [107.4, 29.72], + '渝中区': [106.57, 29.55], + '大渡口区': [106.48, 29.48], + '江北区': [106.57, 29.6], + '沙坪坝区': [106.45, 29.53], + '九龙坡区': [106.5, 29.5], + '南岸区': [106.57, 29.52], + '北碚区': [106.4, 29.8], + '万盛区': [106.92, 28.97], + '双桥区': [105.78, 29.48], + '渝北区': [106.63, 29.72], + '巴南区': [106.52, 29.38], + '黔江区': [108.77, 29.53], + '长寿区': [107.08, 29.87], + '綦江县': [106.65, 29.03], + '潼南县': [105.83, 30.18], + '铜梁县': [106.05, 29.85], + '大足县': [105.72, 29.7], + '荣昌县': [105.58, 29.4], + '璧山县': [106.22, 29.6], + '梁平县': [107.8, 30.68], + '城口县': [108.67, 31.95], + '丰都县': [107.73, 29.87], + '垫江县': [107.35, 30.33], + '武隆县': [107.75, 29.33], + '忠县': [108.02, 30.3], + '开县': [108.42, 31.18], + '云阳县': [108.67, 30.95], + '奉节县': [109.47, 31.02], + '巫山县': [109.88, 31.08], + '巫溪县': [109.63, 31.4], + '石柱土家族自治县': [108.12, 30.0], + '秀山土家族苗族自治县': [108.98, 28.45], + '酉阳土家族苗族自治县': [108.77, 28.85], + '彭水苗族土家族自治县': [108.17, 29.3], + '成都市': [104.07, 30.67], + '锦江区': [104.08, 30.67], + '青羊区': [104.05, 30.68], + '金牛区': [104.05, 30.7], + '武侯区': [104.05, 30.65], + '成华区': [104.1, 30.67], + '龙泉驿区': [104.27, 30.57], + '青白江区': [104.23, 30.88], + '新都区': [104.15, 30.83], + '温江区': [103.83, 30.7], + '金堂县': [104.43, 30.85], + '双流县': [103.92, 30.58], + '郫县': [103.88, 30.82], + '大邑县': [103.52, 30.58], + '蒲江县': [103.5, 30.2], + '新津县': [103.82, 30.42], + '都江堰市': [103.62, 31.0], + '彭州市': [103.93, 30.98], + '邛崃市': [103.47, 30.42], + '崇州市': [103.67, 30.63], + '自贡市': [104.78, 29.35], + '自流井区': [104.77, 29.35], + '贡井区': [104.72, 29.35], + '大安区': [104.77, 29.37], + '沿滩区': [104.87, 29.27], + '荣县': [104.42, 29.47], + '富顺县': [104.98, 29.18], + '攀枝花市': [101.72, 26.58], + '东区': [101.7, 26.55], + '西区': [101.6, 26.6], + '仁和区': [101.73, 26.5], + '米易县': [102.12, 26.88], + '盐边县': [101.85, 26.7], + '泸州市': [105.43, 28.87], + '江阳区': [105.45, 28.88], + '纳溪区': [105.37, 28.77], + '龙马潭区': [105.43, 28.9], + '泸县': [105.38, 29.15], + '合江县': [105.83, 28.82], + '叙永县': [105.43, 28.17], + '古蔺县': [105.82, 28.05], + '德阳市': [104.38, 31.13], + '旌阳区': [104.38, 31.13], + '中江县': [104.68, 31.03], + '罗江县': [104.5, 31.32], + '广汉市': [104.28, 30.98], + '什邡市': [104.17, 31.13], + '绵竹市': [104.2, 31.35], + '绵阳市': [104.73, 31.47], + '涪城区': [104.73, 31.47], + '游仙区': [104.75, 31.47], + '三台县': [105.08, 31.1], + '盐亭县': [105.38, 31.22], + '安县': [104.57, 31.53], + '梓潼县': [105.17, 31.63], + '北川羌族自治县': [104.45, 31.82], + '平武县': [104.53, 32.42], + '江油市': [104.75, 31.78], + '广元市': [105.83, 32.43], + '元坝区': [105.97, 32.32], + '朝天区': [105.88, 32.65], + '旺苍县': [106.28, 32.23], + '青川县': [105.23, 32.58], + '剑阁县': [105.52, 32.28], + '苍溪县': [105.93, 31.73], + '遂宁市': [105.57, 30.52], + '船山区': [105.57, 30.52], + '安居区': [105.45, 30.35], + '蓬溪县': [105.72, 30.78], + '射洪县': [105.38, 30.87], + '大英县': [105.25, 30.58], + '内江市': [105.05, 29.58], + '东兴区': [105.07, 29.6], + '威远县': [104.67, 29.53], + '资中县': [104.85, 29.78], + '隆??县': [105.28, 29.35], + '乐山市': [103.77, 29.57], + '沙湾区': [103.55, 29.42], + '五通桥区': [103.82, 29.4], + '金口河区': [103.08, 29.25], + '犍为县': [103.95, 29.22], + '井研县': [104.07, 29.65], + '夹江县': [103.57, 29.73], + '沐川县': [103.9, 28.97], + '峨边彝族自治县': [103.27, 29.23], + '马边彝族自治县': [103.55, 28.83], + '峨眉山市': [103.48, 29.6], + '南充市': [106.08, 30.78], + '顺庆区': [106.08, 30.78], + '高坪区': [106.1, 30.77], + '嘉陵区': [106.05, 30.77], + '南部县': [106.07, 31.35], + '营山县': [106.57, 31.08], + '蓬安县': [106.42, 31.03], + '仪陇县': [106.28, 31.27], + '西充县': [105.88, 31.0], + '阆中市': [106.0, 31.55], + '眉山市': [103.83, 30.05], + '东坡区': [103.83, 30.05], + '仁寿县': [104.15, 30.0], + '彭山县': [103.87, 30.2], + '洪雅县': [103.37, 29.92], + '丹棱县': [103.52, 30.02], + '青神县': [103.85, 29.83], + '宜宾市': [104.62, 28.77], + '翠屏区': [104.62, 28.77], + '宜宾县': [104.55, 28.7], + '南溪县': [104.98, 28.85], + '江安县': [105.07, 28.73], + '长宁县': [104.92, 28.58], + '高县': [104.52, 28.43], + '珙县': [104.72, 28.45], + '筠连县': [104.52, 28.17], + '兴文县': [105.23, 28.3], + '屏山县': [104.33, 28.83], + '广安市': [106.63, 30.47], + '岳池县': [106.43, 30.55], + '武胜县': [106.28, 30.35], + '邻水县': [106.93, 30.33], + '华蓥市': [106.77, 30.38], + '达州市': [107.5, 31.22], + '通川区': [107.48, 31.22], + '达县': [107.5, 31.2], + '宣汉县': [107.72, 31.35], + '开江县': [107.87, 31.08], + '大竹县': [107.2, 30.73], + '渠县': [106.97, 30.83], + '万源市': [108.03, 32.07], + '雅安市': [103.0, 29.98], + '雨城区': [103.0, 29.98], + '名山县': [103.12, 30.08], + '荥经县': [102.85, 29.8], + '汉源县': [102.65, 29.35], + '石棉县': [102.37, 29.23], + '天全县': [102.75, 30.07], + '芦山县': [102.92, 30.15], + '宝兴县': [102.82, 30.37], + '巴中市': [106.77, 31.85], + '巴州区': [106.77, 31.85], + '通江县': [107.23, 31.92], + '南江县': [106.83, 32.35], + '平昌县': [107.1, 31.57], + '资阳市': [104.65, 30.12], + '雁江区': [104.65, 30.12], + '安岳县': [105.33, 30.1], + '乐至县': [105.02, 30.28], + '简阳市': [104.55, 30.4], + '阿坝藏族羌族自治州': [102.22, 31.9], + '汶川县': [103.58, 31.48], + '理县': [103.17, 31.43], + '茂县': [103.85, 31.68], + '松潘县': [103.6, 32.63], + '九寨沟县': [104.23, 33.27], + '金川县': [102.07, 31.48], + '小金县': [102.37, 31.0], + '黑水县': [102.98, 32.07], + '马尔康县': [102.22, 31.9], + '壤塘县': [100.98, 32.27], + '阿坝县': [101.7, 32.9], + '若尔盖县': [102.95, 33.58], + '红原县': [102.55, 32.8], + '甘孜藏族自治州': [101.97, 30.05], + '康定县': [101.97, 30.05], + '泸定县': [102.23, 29.92], + '丹巴县': [101.88, 30.88], + '九龙县': [101.5, 29.0], + '雅江县': [101.02, 30.03], + '道孚县': [101.12, 30.98], + '炉霍县': [100.68, 31.4], + '甘孜县': [99.98, 31.62], + '新龙县': [100.32, 30.95], + '德格县': [98.58, 31.82], + '白玉县': [98.83, 31.22], + '石渠县': [98.1, 32.98], + '色达县': [100.33, 32.27], + '理塘县': [100.27, 30.0], + '巴塘县': [99.1, 30.0], + '乡城县': [99.8, 28.93], + '稻城县': [100.3, 29.03], + '得荣县': [99.28, 28.72], + '凉山彝族自治州': [102.27, 27.9], + '西昌市': [102.27, 27.9], + '木里藏族自治县': [101.28, 27.93], + '盐源县': [101.5, 27.43], + '德昌县': [102.18, 27.4], + '会理县': [102.25, 26.67], + '会东县': [102.58, 26.63], + '宁南县': [102.77, 27.07], + '普格县': [102.53, 27.38], + '布拖县': [102.82, 27.72], + '金阳县': [103.25, 27.7], + '昭觉县': [102.85, 28.02], + '喜德县': [102.42, 28.32], + '冕宁县': [102.17, 28.55], + '越西县': [102.52, 28.65], + '甘洛县': [102.77, 28.97], + '美姑县': [103.13, 28.33], + '雷波县': [103.57, 28.27], + '贵阳市': [106.63, 26.65], + '南明区': [106.72, 26.57], + '云岩区': [106.72, 26.62], + '乌当区': [106.75, 26.63], + '白云区': [106.65, 26.68], + '小河区': [106.7, 26.53], + '开阳县': [106.97, 27.07], + '息烽县': [106.73, 27.1], + '修文县': [106.58, 26.83], + '清镇市': [106.47, 26.55], + '六盘水市': [104.83, 26.6], + '钟山区': [104.83, 26.6], + '六枝特区': [105.48, 26.22], + '水城县': [104.95, 26.55], + '盘县': [104.47, 25.72], + '遵义市': [106.92, 27.73], + '红花岗区': [106.92, 27.65], + '汇川区': [106.92, 27.73], + '遵义县': [106.83, 27.53], + '桐梓县': [106.82, 28.13], + '绥阳县': [107.18, 27.95], + '正安县': [107.43, 28.55], + '道真仡佬族苗族自治县': [107.6, 28.88], + '务川仡佬族苗族自治县': [107.88, 28.53], + '凤冈县': [107.72, 27.97], + '湄潭县': [107.48, 27.77], + '余庆县': [107.88, 27.22], + '习水县': [106.22, 28.32], + '赤水市': [105.7, 28.58], + '仁怀市': [106.42, 27.82], + '安顺市': [105.95, 26.25], + '西秀区': [105.92, 26.25], + '平坝县': [106.25, 26.42], + '普定县': [105.75, 26.32], + '镇宁布依族苗族自治县': [105.77, 26.07], + '关岭布依族苗族自治县': [105.62, 25.95], + '紫云苗族布依族自治县': [106.08, 25.75], + '铜仁地区': [109.18, 27.72], + '铜仁市': [109.18, 27.72], + '江口县': [108.85, 27.7], + '玉屏侗族自治县': [108.92, 27.23], + '石阡县': [108.23, 27.52], + '思南县': [108.25, 27.93], + '印江土家族苗族自治县': [108.4, 28.0], + '德江县': [108.12, 28.27], + '沿河土家族自治县': [108.5, 28.57], + '松桃苗族自治县': [109.2, 28.17], + '万山特区': [109.2, 27.52], + '兴义市': [104.9, 25.08], + '兴仁县': [105.18, 25.43], + '普安县': [104.95, 25.78], + '晴隆县': [105.22, 25.83], + '贞丰县': [105.65, 25.38], + '望谟县': [106.1, 25.17], + '册亨县': [105.82, 24.98], + '安龙县': [105.47, 25.12], + '毕节地区': [105.28, 27.3], + '毕节市': [105.28, 27.3], + '大方县': [105.6, 27.15], + '黔西县': [106.03, 27.03], + '金沙县': [106.22, 27.47], + '织金县': [105.77, 26.67], + '纳雍县': [105.38, 26.78], + '赫章县': [104.72, 27.13], + '黔东南苗族侗族自治州': [107.97, 26.58], + '凯里市': [107.97, 26.58], + '黄平县': [107.9, 26.9], + '施秉县': [108.12, 27.03], + '三穗县': [108.68, 26.97], + '镇远县': [108.42, 27.05], + '岑巩县': [108.82, 27.18], + '天柱县': [109.2, 26.92], + '锦屏县': [109.2, 26.68], + '剑河县': [108.45, 26.73], + '台江县': [108.32, 26.67], + '黎平县': [109.13, 26.23], + '榕江县': [108.52, 25.93], + '从江县': [108.9, 25.75], + '雷山县': [108.07, 26.38], + '麻江县': [107.58, 26.5], + '丹寨县': [107.8, 26.2], + '黔南布依族苗族自治州': [107.52, 26.27], + '都匀市': [107.52, 26.27], + '福泉市': [107.5, 26.7], + '荔波县': [107.88, 25.42], + '贵定县': [107.23, 26.58], + '瓮安县': [107.47, 27.07], + '独山县': [107.53, 25.83], + '平塘县': [107.32, 25.83], + '罗甸县': [106.75, 25.43], + '长顺县': [106.45, 26.03], + '龙里县': [106.97, 26.45], + '惠水县': [106.65, 26.13], + '三都水族自治县': [107.87, 25.98], + '昆明市': [102.72, 25.05], + '五华区': [102.7, 25.05], + '盘龙区': [102.72, 25.03], + '官渡区': [102.75, 25.02], + '西山区': [102.67, 25.03], + '东川区': [103.18, 26.08], + '呈贡县': [102.8, 24.88], + '晋宁县': [102.6, 24.67], + '富民县': [102.5, 25.22], + '宜良县': [103.15, 24.92], + '石林彝族自治县': [103.27, 24.77], + '嵩明县': [103.03, 25.35], + '禄劝彝族苗族自治县': [102.47, 25.55], + '寻甸回族彝族自治县': [103.25, 25.57], + '安宁市': [102.48, 24.92], + '曲靖市': [103.8, 25.5], + '麒麟区': [103.8, 25.5], + '马龙县': [103.58, 25.43], + '陆良县': [103.67, 25.03], + '师宗县': [103.98, 24.83], + '罗平县': [104.3, 24.88], + '富源县': [104.25, 25.67], + '会泽县': [103.3, 26.42], + '沾益县': [103.82, 25.62], + '宣威市': [104.1, 26.22], + '玉溪市': [102.55, 24.35], + '江川县': [102.75, 24.28], + '澄江县': [102.92, 24.67], + '通海县': [102.75, 24.12], + '华宁县': [102.93, 24.2], + '易门县': [102.17, 24.67], + '峨山彝族自治县': [102.4, 24.18], + '新平彝族傣族自治县': [101.98, 24.07], + '保山市': [99.17, 25.12], + '隆阳区': [99.17, 25.12], + '施甸县': [99.18, 24.73], + '腾冲县': [98.5, 25.03], + '龙陵县': [98.68, 24.58], + '昌宁县': [99.6, 24.83], + '昭通市': [103.72, 27.33], + '昭阳区': [103.72, 27.33], + '鲁甸县': [103.55, 27.2], + '巧家县': [102.92, 26.92], + '盐津县': [104.23, 28.12], + '大关县': [103.88, 27.75], + '永善县': [103.63, 28.23], + '绥江县': [103.95, 28.6], + '镇雄县': [104.87, 27.45], + '彝良县': [104.05, 27.63], + '威信县': [105.05, 27.85], + '水富县': [104.4, 28.63], + '丽江市': [100.23, 26.88], + '古城区': [100.23, 26.88], + '玉龙纳西族自治县': [100.23, 26.82], + '永胜县': [100.75, 26.68], + '华坪县': [101.27, 26.63], + '宁蒗彝族自治县': [100.85, 27.28], + '墨江哈尼族自治县': [101.68, 23.43], + '景东彝族自治县': [100.83, 24.45], + '景谷傣族彝族自治县': [100.7, 23.5], + '江城哈尼族彝族自治县': [101.85, 22.58], + '澜沧拉祜族自治县': [99.93, 22.55], + '西盟佤族自治县': [99.62, 22.63], + '临沧市': [100.08, 23.88], + '临翔区': [100.08, 23.88], + '凤庆县': [99.92, 24.6], + '云县': [100.13, 24.45], + '永德县': [99.25, 24.03], + '镇康县': [98.83, 23.78], + '耿马傣族佤族自治县': [99.4, 23.55], + '沧源佤族自治县': [99.25, 23.15], + '楚雄彝族自治州': [101.55, 25.03], + '楚雄市': [101.55, 25.03], + '双柏县': [101.63, 24.7], + '牟定县': [101.53, 25.32], + '南华县': [101.27, 25.2], + '姚安县': [101.23, 25.5], + '大姚县': [101.32, 25.73], + '永仁县': [101.67, 26.07], + '元谋县': [101.88, 25.7], + '武定县': [102.4, 25.53], + '禄丰县': [102.08, 25.15], + '红河哈尼族彝族自治州': [103.4, 23.37], + '个旧市': [103.15, 23.37], + '开远市': [103.27, 23.72], + '蒙自县': [103.4, 23.37], + '屏边苗族自治县': [103.68, 22.98], + '建水县': [102.83, 23.62], + '石屏县': [102.5, 23.72], + '弥勒县': [103.43, 24.4], + '泸西县': [103.77, 24.53], + '元阳县': [102.83, 23.23], + '红河县': [102.42, 23.37], + '绿春县': [102.4, 23.0], + '河口瑶族自治县': [103.97, 22.52], + '文山壮族苗族自治州': [104.25, 23.37], + '文山县': [104.25, 23.37], + '砚山县': [104.33, 23.62], + '西畴县': [104.67, 23.45], + '麻栗坡县': [104.7, 23.12], + '马关县': [104.4, 23.02], + '丘北县': [104.18, 24.05], + '广南县': [105.07, 24.05], + '富宁县': [105.62, 23.63], + '西双版纳傣族自治州': [100.8, 22.02], + '景洪市': [100.8, 22.02], + '勐海县': [100.45, 21.97], + '勐腊县': [101.57, 21.48], + '大理白族自治州': [100.23, 25.6], + '大理市': [100.23, 25.6], + '漾濞彝族自治县': [99.95, 25.67], + '祥云县': [100.55, 25.48], + '宾川县': [100.58, 25.83], + '弥渡县': [100.48, 25.35], + '南涧彝族自治县': [100.52, 25.05], + '巍山彝族回族自治县': [100.3, 25.23], + '永平县': [99.53, 25.47], + '云龙县': [99.37, 25.88], + '洱源县': [99.95, 26.12], + '剑川县': [99.9, 26.53], + '鹤庆县': [100.18, 26.57], + '德宏傣族景颇族自治州': [98.58, 24.43], + '瑞丽市': [97.85, 24.02], + '潞西市': [98.58, 24.43], + '梁河县': [98.3, 24.82], + '盈江县': [97.93, 24.72], + '陇川县': [97.8, 24.2], + '怒江傈僳族自治州': [98.85, 25.85], + '泸水县': [98.85, 25.85], + '福贡县': [98.87, 26.9], + '贡山独龙族怒族自治县': [98.67, 27.73], + '兰坪白族普米族自治县': [99.42, 26.45], + '迪庆藏族自治州': [99.7, 27.83], + '香格里拉县': [99.7, 27.83], + '德钦县': [98.92, 28.48], + '维西傈僳族自治县': [99.28, 27.18], + '拉萨市': [91.13, 29.65], + '林周县': [91.25, 29.9], + '当雄县': [91.1, 30.48], + '尼木县': [90.15, 29.45], + '曲水县': [90.73, 29.37], + '堆龙德庆县': [91.0, 29.65], + '达孜县': [91.35, 29.68], + '墨竹工卡县': [91.73, 29.83], + '昌都地区': [97.18, 31.13], + '昌都县': [97.18, 31.13], + '江达县': [98.22, 31.5], + '贡觉县': [98.27, 30.87], + '类乌齐县': [96.6, 31.22], + '丁青县': [95.6, 31.42], + '察雅县': [97.57, 30.65], + '八宿县': [96.92, 30.05], + '左贡县': [97.85, 29.67], + '芒康县': [98.6, 29.68], + '洛隆县': [95.83, 30.75], + '边坝县': [94.7, 30.93], + '山南地区': [91.77, 29.23], + '乃东县': [91.77, 29.23], + '扎囊县': [91.33, 29.25], + '贡嘎县': [90.98, 29.3], + '桑日县': [92.02, 29.27], + '琼结县': [91.68, 29.03], + '曲松县': [92.2, 29.07], + '措美县': [91.43, 28.43], + '洛扎县': [90.87, 28.38], + '加查县': [92.58, 29.15], + '隆子县': [92.47, 28.42], + '错那县': [91.95, 28.0], + '浪卡子县': [90.4, 28.97], + '日喀则地区': [88.88, 29.27], + '日喀则市': [88.88, 29.27], + '南木林县': [89.1, 29.68], + '江孜县': [89.6, 28.92], + '定日县': [87.12, 28.67], + '萨迦县': [88.02, 28.9], + '拉孜县': [87.63, 29.08], + '昂仁县': [87.23, 29.3], + '谢通门县': [88.27, 29.43], + '白朗县': [89.27, 29.12], + '仁布县': [89.83, 29.23], + '康马县': [89.68, 28.57], + '定结县': [87.77, 28.37], + '仲巴县': [84.03, 29.77], + '亚东县': [88.9, 27.48], + '吉隆县': [85.3, 28.85], + '聂拉木县': [85.98, 28.17], + '萨嘎县': [85.23, 29.33], + '岗巴县': [88.52, 28.28], + '那曲地区': [92.07, 31.48], + '那曲县': [92.07, 31.48], + '嘉黎县': [93.25, 30.65], + '比如县': [93.68, 31.48], + '聂荣县': [92.3, 32.12], + '安多县': [91.68, 32.27], + '申扎县': [88.7, 30.93], + '索县': [93.78, 31.88], + '班戈县': [90.02, 31.37], + '巴青县': [94.03, 31.93], + '尼玛县': [87.23, 31.78], + '阿里地区': [80.1, 32.5], + '普兰县': [81.17, 30.3], + '札达县': [79.8, 31.48], + '噶尔县': [80.1, 32.5], + '日土县': [79.72, 33.38], + '革吉县': [81.12, 32.4], + '改则县': [84.07, 32.3], + '措勤县': [85.17, 31.02], + '林芝地区': [94.37, 29.68], + '林芝县': [94.37, 29.68], + '工布江达县': [93.25, 29.88], + '米林县': [94.22, 29.22], + '墨脱县': [95.33, 29.33], + '波密县': [95.77, 29.87], + '察隅县': [97.47, 28.67], + '朗县': [93.07, 29.05], + '西安市': [108.93, 34.27], + '新城区': [108.95, 34.27], + '碑林区': [108.93, 34.23], + '莲湖区': [108.93, 34.27], + '灞桥区': [109.07, 34.27], + '未央区': [108.93, 34.28], + '雁塔区': [108.95, 34.22], + '阎良区': [109.23, 34.65], + '临潼区': [109.22, 34.37], + '长安区': [108.93, 34.17], + '蓝田县': [109.32, 34.15], + '周至县': [108.2, 34.17], + '户县': [108.6, 34.1], + '高陵县': [109.08, 34.53], + '铜川市': [108.93, 34.9], + '王益区': [109.07, 35.07], + '印台区': [109.1, 35.1], + '耀州区': [108.98, 34.92], + '宜君县': [109.12, 35.4], + '宝鸡市': [107.13, 34.37], + '渭滨区': [107.15, 34.37], + '金台区': [107.13, 34.38], + '陈仓区': [107.37, 34.37], + '凤翔县': [107.38, 34.52], + '岐山县': [107.62, 34.45], + '扶风县': [107.87, 34.37], + '眉县': [107.75, 34.28], + '陇县': [106.85, 34.9], + '千阳县': [107.13, 34.65], + '麟游县': [107.78, 34.68], + '凤县': [106.52, 33.92], + '太白县': [107.32, 34.07], + '咸阳市': [108.7, 34.33], + '秦都区': [108.72, 34.35], + '杨凌区': [108.07, 34.28], + '渭城区': [108.73, 34.33], + '三原县': [108.93, 34.62], + '泾阳县': [108.83, 34.53], + '乾县': [108.23, 34.53], + '礼泉县': [108.42, 34.48], + '永寿县': [108.13, 34.7], + '彬县': [108.08, 35.03], + '长武县': [107.78, 35.2], + '旬邑县': [108.33, 35.12], + '淳化县': [108.58, 34.78], + '武功县': [108.2, 34.27], + '兴平市': [108.48, 34.3], + '渭南市': [109.5, 34.5], + '临渭区': [109.48, 34.5], + '华县': [109.77, 34.52], + '潼关县': [110.23, 34.55], + '大荔县': [109.93, 34.8], + '合阳县': [110.15, 35.23], + '澄城县': [109.93, 35.18], + '蒲城县': [109.58, 34.95], + '白水县': [109.58, 35.18], + '富平县': [109.18, 34.75], + '韩城市': [110.43, 35.48], + '华阴市': [110.08, 34.57], + '延安市': [109.48, 36.6], + '宝塔区': [109.48, 36.6], + '延长县': [110.0, 36.58], + '延川县': [110.18, 36.88], + '子长县': [109.67, 37.13], + '安塞县': [109.32, 36.87], + '志丹县': [108.77, 36.82], + '甘泉县': [109.35, 36.28], + '富县': [109.37, 35.98], + '洛川县': [109.43, 35.77], + '宜川县': [110.17, 36.05], + '黄龙县': [109.83, 35.58], + '黄陵县': [109.25, 35.58], + '汉中市': [107.02, 33.07], + '汉台区': [107.03, 33.07], + '南郑县': [106.93, 33.0], + '城固县': [107.33, 33.15], + '洋县': [107.55, 33.22], + '西乡县': [107.77, 32.98], + '勉县': [106.67, 33.15], + '宁强县': [106.25, 32.83], + '略阳县': [106.15, 33.33], + '镇巴县': [107.9, 32.53], + '留坝县': [106.92, 33.62], + '佛坪县': [107.98, 33.53], + '榆林市': [109.73, 38.28], + '榆阳区': [109.75, 38.28], + '神木县': [110.5, 38.83], + '府谷县': [111.07, 39.03], + '横山县': [109.28, 37.95], + '靖边县': [108.8, 37.6], + '定边县': [107.6, 37.58], + '绥德县': [110.25, 37.5], + '米脂县': [110.18, 37.75], + '佳县': [110.48, 38.02], + '吴堡县': [110.73, 37.45], + '清涧县': [110.12, 37.08], + '子洲县': [110.03, 37.62], + '安康市': [109.02, 32.68], + '汉滨区': [109.02, 32.68], + '汉阴县': [108.5, 32.9], + '石泉县': [108.25, 33.05], + '宁陕县': [108.32, 33.32], + '紫阳县': [108.53, 32.52], + '岚皋县': [108.9, 32.32], + '平利县': [109.35, 32.4], + '镇坪县': [109.52, 31.88], + '旬阳县': [109.38, 32.83], + '白河县': [110.1, 32.82], + '商洛市': [109.93, 33.87], + '商州区': [109.93, 33.87], + '洛南县': [110.13, 34.08], + '丹凤县': [110.33, 33.7], + '商南县': [110.88, 33.53], + '山阳县': [109.88, 33.53], + '镇安县': [109.15, 33.43], + '柞水县': [109.1, 33.68], + '兰州市': [103.82, 36.07], + '城关区': [103.83, 36.05], + '西固区': [103.62, 36.1], + '红古区': [102.87, 36.33], + '永登县': [103.27, 36.73], + '皋兰县': [103.95, 36.33], + '榆中县': [104.12, 35.85], + '嘉峪关市': [98.27, 39.8], + '金昌市': [102.18, 38.5], + '金川区': [102.18, 38.5], + '永昌县': [101.97, 38.25], + '白银市': [104.18, 36.55], + '白银区': [104.18, 36.55], + '平川区': [104.83, 36.73], + '靖远县': [104.68, 36.57], + '会宁县': [105.05, 35.7], + '景泰县': [104.07, 37.15], + '天水市': [105.72, 34.58], + '清水县': [106.13, 34.75], + '秦安县': [105.67, 34.87], + '甘谷县': [105.33, 34.73], + '武山县': [104.88, 34.72], + '张家川回族自治县': [106.22, 35.0], + '武威市': [102.63, 37.93], + '凉州区': [102.63, 37.93], + '民勤县': [103.08, 38.62], + '古浪县': [102.88, 37.47], + '天祝藏族自治县': [103.13, 36.98], + '张掖市': [100.45, 38.93], + '甘州区': [100.45, 38.93], + '肃南裕固族自治县': [99.62, 38.83], + '民乐县': [100.82, 38.43], + '临泽县': [100.17, 39.13], + '高台县': [99.82, 39.38], + '山丹县': [101.08, 38.78], + '平凉市': [106.67, 35.55], + '崆峒区': [106.67, 35.55], + '泾川县': [107.37, 35.33], + '灵台县': [107.62, 35.07], + '崇信县': [107.03, 35.3], + '华亭县': [106.65, 35.22], + '庄浪县': [106.05, 35.2], + '静宁县': [105.72, 35.52], + '酒泉市': [98.52, 39.75], + '肃州区': [98.52, 39.75], + '金塔县': [98.9, 39.98], + '肃北蒙古族自治县': [94.88, 39.52], + '阿克塞哈萨克族自治县': [94.33, 39.63], + '玉门市': [97.05, 40.28], + '敦煌市': [94.67, 40.13], + '庆阳市': [107.63, 35.73], + '西峰区': [107.63, 35.73], + '庆城县': [107.88, 36.0], + '环县': [107.3, 36.58], + '华池县': [107.98, 36.47], + '合水县': [108.02, 35.82], + '正宁县': [108.37, 35.5], + '宁县': [107.92, 35.5], + '镇原县': [107.2, 35.68], + '定西市': [104.62, 35.58], + '安定区': [104.62, 35.58], + '通渭县': [105.25, 35.2], + '陇西县': [104.63, 35.0], + '渭源县': [104.22, 35.13], + '临洮县': [103.87, 35.38], + '漳县': [104.47, 34.85], + '岷县': [104.03, 34.43], + '陇南市': [104.92, 33.4], + '武都区': [104.92, 33.4], + '成县': [105.72, 33.73], + '文县': [104.68, 32.95], + '宕昌县': [104.38, 34.05], + '康县': [105.6, 33.33], + '西和县': [105.3, 34.02], + '礼县': [105.17, 34.18], + '徽县': [106.08, 33.77], + '两当县': [106.3, 33.92], + '临夏回族自治州': [103.22, 35.6], + '临夏市': [103.22, 35.6], + '临夏县': [103.0, 35.5], + '康乐县': [103.72, 35.37], + '永靖县': [103.32, 35.93], + '广河县': [103.58, 35.48], + '和政县': [103.35, 35.43], + '东乡族自治县': [103.4, 35.67], + '甘南藏族自治州': [102.92, 34.98], + '合作市': [102.92, 34.98], + '临潭县': [103.35, 34.7], + '卓尼县': [103.5, 34.58], + '舟曲县': [104.37, 33.78], + '迭部县': [103.22, 34.05], + '玛曲县': [102.07, 34.0], + '碌曲县': [102.48, 34.58], + '夏河县': [102.52, 35.2], + '西宁市': [101.78, 36.62], + '城东区': [101.8, 36.62], + '城中区': [101.78, 36.62], + '城西区': [101.77, 36.62], + '城北区': [101.77, 36.67], + '大通回族土族自治县': [101.68, 36.93], + '湟中县': [101.57, 36.5], + '湟源县': [101.27, 36.68], + '海东地区': [102.12, 36.5], + '平安县': [102.12, 36.5], + '民和回族土族自治县': [102.8, 36.33], + '乐都县': [102.4, 36.48], + '互助土族自治县': [101.95, 36.83], + '化隆回族自治县': [102.27, 36.1], + '循化撒拉族自治县': [102.48, 35.85], + '海北藏族自治州': [100.9, 36.97], + '门源回族自治县': [101.62, 37.38], + '祁连县': [100.25, 38.18], + '海晏县': [100.98, 36.9], + '刚察县': [100.13, 37.33], + '黄南藏族自治州': [102.02, 35.52], + '同仁县': [102.02, 35.52], + '尖扎县': [102.03, 35.93], + '泽库县': [101.47, 35.03], + '河南蒙古族自治县': [101.6, 34.73], + '海南藏族自治州': [100.62, 36.28], + '共和县': [100.62, 36.28], + '同德县': [100.57, 35.25], + '贵德县': [101.43, 36.05], + '兴海县': [99.98, 35.58], + '贵南县': [100.75, 35.58], + '果洛藏族自治州': [100.23, 34.48], + '玛沁县': [100.23, 34.48], + '班玛县': [100.73, 32.93], + '甘德县': [99.9, 33.97], + '达日县': [99.65, 33.75], + '久治县': [101.48, 33.43], + '玛多县': [98.18, 34.92], + '玉树藏族自治州': [97.02, 33.0], + '玉树县': [97.02, 33.0], + '杂多县': [95.3, 32.9], + '称多县': [97.1, 33.37], + '治多县': [95.62, 33.85], + '囊谦县': [96.48, 32.2], + '曲麻莱县': [95.8, 34.13], + '海西蒙古族藏族自治州': [97.37, 37.37], + '格尔木市': [94.9, 36.42], + '德令哈市': [97.37, 37.37], + '乌兰县': [98.48, 36.93], + '都兰县': [98.08, 36.3], + '天峻县': [99.02, 37.3], + '银川市': [106.28, 38.47], + '兴庆区': [106.28, 38.48], + '西夏区': [106.18, 38.48], + '金凤区': [106.25, 38.47], + '永宁县': [106.25, 38.28], + '贺兰县': [106.35, 38.55], + '灵武市': [106.33, 38.1], + '石嘴山市': [106.38, 39.02], + '大武口区': [106.38, 39.02], + '惠农区': [106.78, 39.25], + '平罗县': [106.53, 38.9], + '吴忠市': [106.2, 37.98], + '利通区': [106.2, 37.98], + '盐池县': [107.4, 37.78], + '同心县': [105.92, 36.98], + '青铜峡市': [106.07, 38.02], + '固原市': [106.28, 36.0], + '原州区': [106.28, 36.0], + '西吉县': [105.73, 35.97], + '隆德县': [106.12, 35.62], + '泾源县': [106.33, 35.48], + '彭阳县': [106.63, 35.85], + '中卫市': [105.18, 37.52], + '沙坡头区': [105.18, 37.52], + '中宁县': [105.67, 37.48], + '海原县': [105.65, 36.57], + '乌鲁木齐市': [87.62, 43.82], + '天山区': [87.65, 43.78], + '沙依巴克区': [87.6, 43.78], + '新市区': [87.6, 43.85], + '水磨沟区': [87.63, 43.83], + '头屯河区': [87.42, 43.87], + '达坂城区': [88.3, 43.35], + '乌鲁木齐县': [87.6, 43.8], + '克拉玛依市': [84.87, 45.6], + '独山子区': [84.85, 44.32], + '克拉玛依区': [84.87, 45.6], + '白碱滩区': [85.13, 45.7], + '乌尔禾区': [85.68, 46.08], + '吐鲁番地区': [89.17, 42.95], + '吐鲁番市': [89.17, 42.95], + '鄯善县': [90.22, 42.87], + '托克逊县': [88.65, 42.78], + '哈密地区': [93.52, 42.83], + '哈密市': [93.52, 42.83], + '伊吾县': [94.7, 43.25], + '昌吉回族自治州': [87.3, 44.02], + '昌吉市': [87.3, 44.02], + '阜康市': [87.98, 44.15], + '米泉市': [87.65, 43.97], + '呼图壁县': [86.9, 44.18], + '玛纳斯县': [86.22, 44.3], + '奇台县': [89.58, 44.02], + '吉木萨尔县': [89.18, 44.0], + '木垒哈萨克自治县': [90.28, 43.83], + '博尔塔拉蒙古自治州': [82.07, 44.9], + '博乐市': [82.07, 44.9], + '精河县': [82.88, 44.6], + '温泉县': [81.03, 44.97], + '巴音郭楞蒙古自治州': [86.15, 41.77], + '库尔勒市': [86.15, 41.77], + '轮台县': [84.27, 41.78], + '尉犁县': [86.25, 41.33], + '若羌县': [88.17, 39.02], + '且末县': [85.53, 38.13], + '焉耆回族自治县': [86.57, 42.07], + '和静县': [86.4, 42.32], + '和硕县': [86.87, 42.27], + '博湖县': [86.63, 41.98], + '阿克苏地区': [80.27, 41.17], + '阿克苏市': [80.27, 41.17], + '温宿县': [80.23, 41.28], + '库车县': [82.97, 41.72], + '沙雅县': [82.78, 41.22], + '新和县': [82.6, 41.55], + '拜城县': [81.87, 41.8], + '乌什县': [79.23, 41.22], + '阿瓦提县': [80.38, 40.63], + '柯坪县': [79.05, 40.5], + '阿图什市': [76.17, 39.72], + '阿克陶县': [75.95, 39.15], + '阿合奇县': [78.45, 40.93], + '乌恰县': [75.25, 39.72], + '喀什地区': [75.98, 39.47], + '喀什市': [75.98, 39.47], + '疏附县': [75.85, 39.38], + '疏勒县': [76.05, 39.4], + '英吉沙县': [76.17, 38.93], + '泽普县': [77.27, 38.18], + '莎车县': [77.23, 38.42], + '叶城县': [77.42, 37.88], + '麦盖提县': [77.65, 38.9], + '岳普湖县': [76.77, 39.23], + '伽师县': [76.73, 39.5], + '巴楚县': [78.55, 39.78], + '和田地区': [79.92, 37.12], + '和田市': [79.92, 37.12], + '和田县': [79.93, 37.1], + '墨玉县': [79.73, 37.27], + '皮山县': [78.28, 37.62], + '洛浦县': [80.18, 37.07], + '策勒县': [80.8, 37.0], + '于田县': [81.67, 36.85], + '民丰县': [82.68, 37.07], + '伊犁哈萨克自治州': [81.32, 43.92], + '伊宁市': [81.32, 43.92], + '奎屯市': [84.9, 44.42], + '伊宁县': [81.52, 43.98], + '察布查尔锡伯自治县': [81.15, 43.83], + '霍城县': [80.88, 44.05], + '巩留县': [82.23, 43.48], + '新源县': [83.25, 43.43], + '昭苏县': [81.13, 43.15], + '特克斯县': [81.83, 43.22], + '尼勒克县': [82.5, 43.78], + '塔城地区': [82.98, 46.75], + '塔城市': [82.98, 46.75], + '乌苏市': [84.68, 44.43], + '额敏县': [83.63, 46.53], + '沙湾县': [85.62, 44.33], + '托里县': [83.6, 45.93], + '裕民县': [82.98, 46.2], + '和布克赛尔蒙古自治县': [85.72, 46.8], + '阿勒泰地区': [88.13, 47.85], + '阿勒泰市': [88.13, 47.85], + '布尔津县': [86.85, 47.7], + '富蕴县': [89.52, 47.0], + '福海县': [87.5, 47.12], + '哈巴河县': [86.42, 48.07], + '青河县': [90.38, 46.67], + '吉木乃县': [85.88, 47.43], + '石河子市': [86.03, 44.3], + '阿拉尔市': [81.28, 40.55], + '图木舒克市': [79.13, 39.85], + '五家渠市': [87.53, 44.17], + '台北市': [121.5, 25.03], + '高雄市': [120.28, 22.62], + '基隆市': [121.73, 25.13], + '台中市': [120.67, 24.15], + '台南市': [120.2, 23.0], + '新竹市': [120.95, 24.82], + '嘉义市': [120.43, 23.48], + '台北县': [121.47, 25.02], + '宜兰县': [121.75, 24.77], + '桃园县': [121.3, 24.97], + '苗栗县': [120.8, 24.53], + '台中县': [120.72, 24.25], + '彰化县': [120.53, 24.08], + '南投县': [120.67, 23.92], + '云林县': [120.53, 23.72], + '台南县': [120.32, 23.32], + '高雄县': [120.37, 22.63], + '屏东县': [120.48, 22.67], + '台东县': [121.15, 22.75], + '花莲县': [121.6, 23.98], + '澎湖县': [119.58, 23.58] +} diff --git a/pyecharts/custom/__init__.py b/pyecharts/custom/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/pyecharts/custom/grid.py b/pyecharts/custom/grid.py new file mode 100644 index 000000000..b3e99d592 --- /dev/null +++ b/pyecharts/custom/grid.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts.option import grid +from pyecharts import template +from pyecharts.constants import PAGE_TITLE + + +class Grid(object): + + def __init__(self, page_title=PAGE_TITLE): + self._chart = None + self._js_dependencies = set() + self._page_title = page_title + + def add(self, chart, + grid_width=None, + grid_height=None, + grid_top=None, + grid_bottom=None, + grid_left=None, + grid_right=None): + """ + + :param chart: + chart instance + :param grid_width: + Width of grid component. Adaptive by default. + :param grid_height: + Height of grid component. Adaptive by default. + :param grid_top: + Distance between grid component and the top side of the container. + :param grid_bottom: + Distance between grid component and the bottom side of the container. + :param grid_left: + Distance between grid component and the left side of the container. + :param grid_right: + Distance between grid component and the right side of the container. + :return: + """ + if self._chart is None: + self._chart = chart + self._chart._option.update(grid=[]) + self._js_dependencies = chart._js_dependencies + + _grid = grid( + grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right) + if _grid: + for _ in range(len(self._chart._option.get('series'))): + self._chart._option.get('grid').append(_grid) + else: + _series = ( + chart._option.get('series'), + chart._option.get('xAxis', None), + chart._option.get('yAxis', None), + chart._option.get('legend')[0], + chart._option.get('title')[0] + ) + _index, _index_once, _xaxis, _yaxis, _legend, _title = self.__custom(_series) + self._chart._option.get('legend').append(_legend) + self._chart._option.get('title').append(_title) + + if _xaxis and _yaxis is not None: + for _x in _xaxis: + _x.update(gridIndex=_index - 1) + self._chart._option.get('xAxis').append(_x) + for _y in _yaxis: + _y.update(gridIndex=_index - 1) + self._chart._option.get('yAxis').append(_y) + + # series id is the only identify for every series + _flag = self._chart._option.get('series')[0].get('seriesId') + _series_index = 0 + for s in self._chart._option.get('series'): + if _flag == s.get('seriesId'): + s.update(xAxisIndex=_series_index, yAxisIndex=_series_index) + else: + _series_index += 1 + s.update(xAxisIndex=_series_index, yAxisIndex=_series_index) + _flag = s.get('seriesId') + + _grid = grid( + grid_width, grid_height, grid_top,grid_bottom, grid_left, grid_right) + for _ in range(_index_once): + self._chart._option.get('grid').append(_grid) + self._js_dependencies = self._js_dependencies.union(chart._js_dependencies) + + def __custom(self, series): + """ + + :param series: + series data + :return: + """ + _series, _xaxis, _yaxis, _legend, _title = series + for s in _series: + self._chart._option.get('series').append(s) + return len(self._chart._option.get('series')), len(_series), \ + _xaxis, _yaxis, _legend, _title + + def render(self, path="render.html"): + """ + + :param path: + :return: + """ + self._chart.render(path) + + def render_embed(self): + """ + + :return: + """ + return self._chart.render_embed() + + def show_config(self): + """ + + :return: + """ + self._chart.show_config() + + @property + def chart(self): + """ + + :return: + """ + return self._chart + + @property + def options(self): + """ + + :return: + """ + return self._chart._option + + def _repr_html_(self): + """ + + :return: + """ + return self._chart._repr_html_() + + def get_js_dependencies(self): + """ + Declare its javascript dependencies for embedding purpose + """ + return template.produce_html_script_list(self._js_dependencies) diff --git a/pyecharts/custom/overlap.py b/pyecharts/custom/overlap.py new file mode 100644 index 000000000..ccf0f9d44 --- /dev/null +++ b/pyecharts/custom/overlap.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts import template +from pyecharts.constants import PAGE_TITLE + + +class Overlap(object): + + def __init__(self, page_title=PAGE_TITLE): + self._chart = None + self._js_dependencies = set() + self._page_title = page_title + + def add(self, chart, + xaxis_index=0, + yaxis_index=0, + is_add_xaxis=False, + is_add_yaxis=False): + """ + + :param chart: + chart instance + :param xaxis_index: + xAxis index + :param yaxis_index: + yAxis index + :param is_add_xaxis: + whether to add a new xaxis + :param is_add_yaxis: + whether to add a new yaxis + :return: + """ + if self._chart is None: + self._chart = chart + self._series_id = chart._option.get('series')[0].get('seriesId') + self._js_dependencies = chart._js_dependencies + else: + _series = ( + chart._option.get('legend')[0].get('data'), + chart._option.get('series'), + chart._option.get('xAxis')[0], + chart._option.get('yAxis')[0], + is_add_xaxis, + is_add_yaxis, + xaxis_index, + yaxis_index + ) + self.__custom(_series) + self._js_dependencies = self._js_dependencies.union(chart._js_dependencies) + self._option = self._chart._option + + def __custom(self, series): + """ Appends the data for the series of the chart type + + :param series: + series data + """ + (_name, _series, _xaxis, _yaxis, is_add_xaxis, is_add_yaxis, + _xaxis_index, _yaxis_index) = series + for n in _name: + self._chart._option.get('legend')[0].get('data').append(n) + for s in _series: + s.update(xAxisIndex=_xaxis_index, yAxisIndex=_yaxis_index, + seriesId=self._series_id) + self._chart._option.get('series').append(s) + + if is_add_xaxis: + self._chart._option.get('xAxis').append(_xaxis) + if is_add_yaxis: + self._chart._option.get('yAxis').append(_yaxis) + + def render(self, path="render.html"): + """ + + :param path: + :return: + """ + self._chart.render(path) + + def render_embed(self): + """ + + :return: + """ + return self._chart.render_embed() + + def show_config(self): + """ + + :return: + """ + self._chart.show_config() + + @property + def chart(self): + """ + + :return: + """ + return self._chart + + @property + def options(self): + """ + + :return: + """ + return self._chart._option + + def _repr_html_(self): + """ + + :return: + """ + return self._chart._repr_html_() + + def get_js_dependencies(self): + """ + Declare its javascript dependencies for embedding purpose + """ + return template.produce_html_script_list(self._js_dependencies) diff --git a/pyecharts/custom/page.py b/pyecharts/custom/page.py new file mode 100644 index 000000000..598d36ef2 --- /dev/null +++ b/pyecharts/custom/page.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# coding=utf-8 + +from pyecharts import template +from pyecharts import utils +import pyecharts.constants as constants +from pyecharts.template import ( + produce_require_configuration, + produce_html_script_list) + + +class Page(object): + """ + A composite object to present multiple charts vertically in a single page + """ + def __init__(self, jshost=None, page_title=constants.PAGE_TITLE): + self.__charts = [] + self._page_title = page_title + self._jshost = jshost if jshost else constants.CONFIGURATION['HOST'] + + def add(self, achart_or_charts): + """ + Append chart(s) to the rendering page + + :param achart_or_charts: + :return: + """ + if isinstance(achart_or_charts, list): + self.__charts.extend(achart_or_charts) + else: + self.__charts.append(achart_or_charts) + + def render(self, path="render.html"): + """ + Produce rendered charts in a html file + + :param path: + :return: + """ + template_name = "multicharts.html" + chart_content = self.render_embed() + dependencies = self._merge_dependencies() + script_list = produce_html_script_list(dependencies) + tmp = template.JINJA2_ENV.get_template(template_name) + html = tmp.render(multi_chart_content=chart_content, + page_title=self._page_title, + script_list=script_list) + html = utils.freeze_js(html) + utils.write_utf8_html_file(path, html) + + def render_embed(self): + """ + Produce rendered charts in html for embedding purpose + + :return: + """ + chart_content = "" + for chart in self.__charts: + chart_content += chart.render_embed() + chart_content += '<br>' + return chart_content + + def get_js_dependencies(self): + """ + Declare its javascript dependencies for embedding purpose + """ + unordered_js_dependencies = self._merge_dependencies() + return produce_html_script_list(unordered_js_dependencies) + + def _repr_html_(self): + """ + + :return: + """ + _tmp = "notebook.html" + doms = "" + components = "" + dependencies = self._merge_dependencies() + for chart in self.__charts: + doms += chart._render_notebook_dom_() + components += chart._render_notebook_component_() + + require_config = produce_require_configuration( + dependencies, self._jshost) + tmp = template.JINJA2_ENV.get_template(_tmp) + html = tmp.render( + single_chart=components, dom=doms, **require_config) + return html + + def _merge_dependencies(self): + dependencies = set() + for chart in self.__charts: + dependencies = dependencies.union(chart._js_dependencies) + # make sure echarts is the item in the list + # require(['echarts'....], function(ec) {..}) need it to be first + # but dependencies is a set so has no sequence + if len(dependencies) > 1: + dependencies.remove('echarts') + dependencies = ['echarts'] + list(dependencies) + return dependencies diff --git a/pyecharts/custom/timeline.py b/pyecharts/custom/timeline.py new file mode 100644 index 000000000..b9e768513 --- /dev/null +++ b/pyecharts/custom/timeline.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python +# coding=utf-8 + +import pprint +from pyecharts import template +from pyecharts.constants import PAGE_TITLE + + +class Timeline(object): + + def __init__(self, page_title=PAGE_TITLE, + is_auto_play=False, + is_loop_play=True, + is_rewind_play=False, + is_timeline_show=True, + timeline_play_interval=2000, + timeline_symbol="emptyCircle", + timeline_symbol_size=10, + timeline_left="auto", + timeline_right="auto", + timeline_top="auto", + timeline_bottom="atuo"): + """ + + :param is_auto_play: + Whether to play automatically. + :param is_loop_play: + Whether to loop playing. + :param is_rewind_play: + Whether supports playing reversely. + :param is_timeline_show: + Whether to show the timeline component. + It would not show with a setting of false, but its functions still remain. + :param timeline_play_interval: + Indicates play speed (gap time between two state), whose unit is millisecond. + :param timeline_symbol: + Symbol of timeline. + Icon types provided by ECharts includes 'circle', 'rect', 'roundRect', 'triangle', + 'diamond', 'pin', 'arrow' + :param timeline_symbol_size: + timeline symbol size. + It can be set to single numbers like 10, or use an array to represent width and height. + For example, [20, 10] means symbol width is 20, and height is10. + :param timeline_left: + Distance between timeline component and the left side of the container. + :param timeline_right: + Distance between timeline component and the right side of the container. + :param timeline_top: + Distance between timeline component and the top side of the container. + :param timeline_bottom: + Distance between timeline component and the bottom side of the container. + """ + + self._chart = None + self._page_title = page_title + self._js_dependencies = set() + self._time_points = [] + self._timeline_options = { + "baseOption": { + "timeline": { + "axisType": "category", + "autoPlay": is_auto_play, + "loop": is_loop_play, + "rewind": is_rewind_play, + "show": is_timeline_show, + "symbol": timeline_symbol, + "symbolSize": timeline_symbol_size, + "playInterval": timeline_play_interval, + "left": timeline_left, + "right": timeline_right, + "top": timeline_top, + "bottom": timeline_bottom + }}, + "options": [] + } + + def add(self, chart, time_point): + """ + + :param chart: + :param time_point: + :return: + """ + self._chart = chart + self._js_dependencies = self._js_dependencies.union(chart._js_dependencies) + self.__check_components(chart) + self._time_points.append(time_point) + self._timeline_options.get('baseOption').update( + legend=chart._option.get('legend'), + backgroundColor=chart._option.get('backgroundColor') + ) + self._timeline_options.get('baseOption').get('timeline').update( + data=self._time_points + ) + self._timeline_options.get('options').append({ + "series": chart._option.get('series'), + "title": chart._option.get('title') + }) + + def show_config(self): + """ + + :return: + """ + pprint.pprint(self._timeline_options) + + def render(self, path="render.html"): + """ + + :param path: + :return: + """ + self._chart._option = self._timeline_options + self._chart.render(path) + + def render_embed(self): + """ + + :return: + """ + self._chart._option = self._timeline_options + return self._chart.render_embed() + + @property + def chart(self): + """ + + :return: + """ + return self._chart + + @property + def options(self): + """ + + :return: + """ + return self._timeline_options + + def _repr_html_(self): + """ + + :return: + """ + return self._chart._repr_html_() + + def get_js_dependencies(self): + """ + Declare its javascript dependencies for embedding purpose + """ + return template.produce_html_script_list(self._js_dependencies) + + def __check_components(self, chart): + """ + + :param chart: + :return: + """ + _grid = chart._option.get('grid', None) + if _grid is not None: + self._timeline_options.get('baseOption').update(grid=_grid) + + _xaxis = chart._option.get('xAxis', None) + if _xaxis is not None: + self._timeline_options.get('baseOption').update(xAxis=_xaxis) + + _yaxis = chart._option.get('yAxis', None) + if _yaxis is not None: + self._timeline_options.get('baseOption').update(yAxis=_yaxis) + + _polar = chart._option.get('polar', None) + if _polar is not None: + self._timeline_options.get('baseOption').update(polar=_polar) + + _radiusAxis = chart._option.get('radiusAxis', None) + if _radiusAxis is not None: + self._timeline_options.get('baseOption').update(radiusAxis=_radiusAxis) + + _angleAxis = chart._option.get('angleAxis', None) + if _angleAxis is not None: + self._timeline_options.get('baseOption').update(angleAxis=_angleAxis) + + _radar = chart._option.get('radar', None) + if _radar is not None: + self._timeline_options.get('baseOption').update(radar=_radar) + + _visualMap = chart._option.get('visualMap', None) + if _visualMap is not None: + self._timeline_options.get('baseOption').update(visualMap=_visualMap) + + _geo = chart._option.get('geo', None) + if _geo is not None: + self._timeline_options.get('baseOption').update(geo=_geo) + + _datazoom = chart._option.get('dataZoom', None) + if _geo is not None: + self._timeline_options.get('baseOption').update(dataZoom=_datazoom) + + _parallelAxis = chart._option.get('parallelAxis', None) + if _parallelAxis is not None: + self._timeline_options.get('baseOption').update(parallelAxis=_parallelAxis) diff --git a/pyecharts/option.py b/pyecharts/option.py index 691d88c47..833538908 100644 --- a/pyecharts/option.py +++ b/pyecharts/option.py @@ -1,11 +1,12 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 +# coding=utf-8 +from __future__ import unicode_literals import random fs = [] + def collectfuncs(func): fs.append(func) return func @@ -13,48 +14,81 @@ def collectfuncs(func): @collectfuncs def label(type=None, - is_emphasis=True, - label_pos=None, is_label_show=False, + is_label_emphasis=True, + label_pos=None, label_text_color="#000", label_text_size=12, - formatter=None, + label_formatter=None, + label_emphasis_pos=None, + label_emphasis_textcolor='#fff', + label_emphasis_textsize=12, **kwargs): - """ + """ Text label of , to explain some data information about graphic item like value, + name and so on.In ECharts 3, to make the configuration structure flatter, + labelis taken to be at the same level with itemStyle, and has two status + normal and emphasis as itemStyle does. :param type: - 图例类型 - :param is_emphasis: - 是否高亮显示标签 - :param label_pos: - 标签位置 + Chart type + :param is_label_emphasis: + It specifies whether to show laebl in emphasis status. :param is_label_show: - 是否正常显示标签 + It specifies whether to show laebl in normal status. + :param label_pos: + Label position.It can be 'top', 'left', 'right', 'bottom', 'inside','outside' :param label_text_color: - 标签字体颜色 + Label text color. :param label_text_size: - 标签字体大小 - :param formatter: - 标签内容格式器,有 series,name,value,percent 可选 + Label font size. + :param label_formatter: + The template variables are {a}, {b}, {c}, {d} and {e}, which stands for series name, + data name and data value and ect. When trigger is set to be 'axis', + there may be data from multiple series. + In this time, series index can be refered as {a0}, {a1}, or {a2}. + {a}, {b}, {c}, {d} have different meanings for different series types: + Line: (area) charts, bar (column) charts, + K charts: + {a} for series name, {b} for category name, {c} for data value, {d} for none; + Scatter: (bubble) charts: + {a} for series name, {b} for data name, {c} for data value, {d} for none; + Map: + {a} for series name, {b} for area name, {c} for merging data, {d} for none; + Pie: charts, gauge charts, funnel charts: {a} for series name, + {b} for data item name, {c} for data value, {d} for percentage. + :param label_emphasis_pos: + Label emphasis position.It can be 'top', 'left', 'right', 'bottom', 'inside','outside' + :param label_emphasis_textcolor: + Label emphasis text color. + :param label_emphasis_textsize: + Label emphasis font size. :param kwargs: :return: """ if label_pos is None: label_pos = "outside" if type in ["pie", "graph"] else "top" _label = { - "normal": {"show": is_label_show, - "position": label_pos, - "textStyle": {"color": label_text_color, - "fontSize": label_text_size}}, - "emphasis": {"show": is_emphasis} + "normal": { + "show": is_label_show, + "position": label_pos, + "textStyle": { + "color": label_text_color, + "fontSize": label_text_size + }}, + "emphasis": { + "show": is_label_emphasis, + "position": label_emphasis_pos, + "textStyle": { + "color": label_emphasis_textcolor, + "fontSize": label_emphasis_textsize, + }} } - fmat = {"series": "{a} ", "name": "{b} ", "value": "{c} ", "percent": "{d}% "} - if formatter is None: - _formatter = "{b} {d}%" if type == "pie" else None - else: - _formatter = "".join([fmat.get(f) for f in formatter if fmat.get(f, None)]) + + if label_formatter is None: + if type == "pie": + label_formatter = "{b}: {d}%" if type != "graph": - _label.get("normal").update(formatter=_formatter) + _label.get("normal").update(formatter=label_formatter) return _label @@ -66,11 +100,11 @@ def color(colorlst=None, """ :param colorlst: - 全局颜色列表 + Global color list :param is_random: - 是否随机排列颜色列表 + It specifies whether to random global color list. :param label_color: - 追加颜色项 + color append to global color list :param kwargs: :return: """ @@ -85,29 +119,43 @@ def color(colorlst=None, @collectfuncs -def line_style(line_width=1, +def line_style(type=None, + line_width=1, line_opacity=1, line_curve=0, line_type="solid", + line_color=None, **kwargs): """ + :param type: + Chart type :param line_width: - 线的宽度 + Line width. :param line_opacity: - 线的透明度,0 为完全透明,1 为完全不透明 + Opacity of the component. + Supports value from 0 to 1, and the component will not be drawn when set to 0. :param line_curve: - 线的弯曲程度,0 为完全不弯曲,1 为最弯曲 + Edge curvature, which supports value from 0 to 1. + The larger the value, the greater the curvature. -> Graph、Sankey :param line_type: - 线的类型,有 solid,dashed,dotted + Line type,it can be 'solid', 'dashed', 'dotted' + :param line_color: + color of line :param kwargs: :return: """ + if line_color is None and type == "graph": + line_color = '#aaa' + _line_style = { - "normal": {"width": line_width, - "opacity": line_opacity, - "curveness": line_curve, - "type": line_type} + "normal": { + "width": line_width, + "opacity": line_opacity, + "curveness": line_curve, + "type": line_type, + "color": line_color + } } return _line_style @@ -117,7 +165,7 @@ def split_line(is_splitline_show=True, **kwargs): """ :param is_splitline_show: - 是否显示分割线 + It specifies whether to show split line. :param kwargs: :return: """ @@ -133,7 +181,7 @@ def axis_line(is_axisline_show=True, **kwargs): """ :param is_axisline_show: - 是否显示坐标轴线 + It specifies whether to show axis line. :param kwargs: :return: """ @@ -149,13 +197,13 @@ def split_area(is_area_show=True, **kwargs): """ :param is_area_show: - 是否显示填充区域 + It specifies whether to show split area. :param kwargs: :return: """ _split_area = { "show": is_area_show, - "areaStyle": axis_line(**kwargs) + "areaStyle": area_style(**kwargs) } return _split_area @@ -168,11 +216,12 @@ def area_style(flag=False, """ :param flag: - 图例类型标记位 + chart type flag :param area_opacity: - 填充区域透明度 + Opacity of the component. + Supports value from 0 to 1, and the component will not be drawn when set to 0. :param area_color: - 填充区域颜色 + Fill color. :param kwargs: :return: """ @@ -187,85 +236,314 @@ def area_style(flag=False, @collectfuncs def xy_axis(type=None, - xy_font_size=14, - namegap=25, + x_axis=None, + xaxis_margin=8, + xaxis_name_size=14, + xaxis_name_gap=25, xaxis_name="", xaxis_name_pos="middle", - interval="auto", + xaxis_rotate=0, + xaxis_min=None, + xaxis_max=None, + xaxis_type=None, + xaxis_interval="auto", + xaxis_force_interval=None, + xaxis_pos=None, + yaxis_margin=8, + yaxis_name_size=14, + yaxis_name_gap=25, yaxis_name="", yaxis_name_pos="middle", + yaxis_rotate=0, + yaxis_min=None, + yaxis_max=None, + yaxis_type=None, + yaxis_interval="auto", + yaxis_force_interval=None, + yaxis_pos=None, + yaxis_formatter="", is_convert=False, - x_axis=None, + is_xaxis_inverse=False, + is_yaxis_inverse=False, + is_xaxislabel_align=False, + is_yaxislabel_align=False, + is_xaxis_boundarygap=True, + is_yaxis_boundarygap=True, + is_xaxis_show=True, + is_yaxis_show=True, **kwargs): """ - :param type: - 图例类型 - :param xy_font_size: - x 轴和 y 轴字体大小 - :param namegap: - 坐标轴名称与轴线之间的距离 + Chart type + :param x_axis: + xAxis data + :param xaxis_margin: + The margin between the axis label and the xaxis line. + :param xaxis_name_size: + xaxis name font size + :param xaxis_name_gap: + Gap between axis name and xaxis line. :param xaxis_name: - x 轴名称 + Name of xAxis :param xaxis_name_pos: - x 轴名称位置,有 start,middle,end 可选 - :param interval: - 坐标轴刻度标签的显示间隔,在类目轴中有效 - 默认会采用标签不重叠的策略间隔显示标签 - 可以设置成 0 强制显示所有标签 - 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推 + Location of xAxis name.It can be 'start','middle','end' + :param xaxis_rotate: + Rotation degree of xaxis label, which is especially useful when + there is no enough space for category axis. + Rotation degree is from -90 to 90. + :param xaxis_min: + The minimun value of xaxis. + :param xaxis_max: + The maximun value of xaxis. + :param xaxis_type: + Type of xaxis + 'value': + Numerical axis, suitable for continuous data. + 'category': + Category axis, suitable for discrete category data. + Data should only be set via data for this type. + 'log': + Log axis, suitable for log data. + :param xaxis_interval: + The display interval of the axis scale label is valid in the category xaxis. + By default, labels are displayed using labels that do not overlap the labels + Set to 0 to force all labels to be displayed + and label is one by one if setting as 1; If 2,it will be one label separates + from each other, and so on. + :param xaxis_force_interval: + Compulsively set segmentation interval for xaxis. + As splitNumber is a recommendation value, the calculated tick may not be + the same as expected. In this case, interval should be used along with + min and max to compulsively set tickings. But in most cases, we do not + suggest using this, out automatic calculation is enough for most situations. + :param xaxis_pos: + The position of x axis. + options: 'top' or 'bottom' + The first x axis in grid defaults to be on the bottom of the grid, and + the second x axis is on the other side against the first x axis. + :param yaxis_margin: + The margin between the axis label and the yaxis line. + :param yaxis_name_size: + yaxis name font size + :param yaxis_name_gap: + Gap between axis name and yaxis line. :param yaxis_name: - y 轴名称 + Name of yAxis :param yaxis_name_pos: - y 轴名称位置,有 start,middle,end 可选 + Location of yAxis name.It can be 'start','middle','end' + :param yaxis_rotate: + Rotation degree of yaxis label, which is especially useful + when there is no enough space for category axis. + Rotation degree is from -90 to 90. + :param yaxis_min: + The minimun value of yaxis. + :param yaxis_max: + The maximun value of yaxis. + :param yaxis_type: + Type of yaxis + 'value': + Numerical axis, suitable for continuous data. + 'category': + Category axis, suitable for discrete category data. + Data should only be set via data for this type. + 'log': + Log axis, suitable for log data. + :param yaxis_interval: + The display interval of the axis scale label is valid in the category yaxis. + By default, labels are displayed using labels that do not overlap the labels + Set to 0 to force all labels to be displayed + and label is one by one if setting as 1; If 2,it will be one label separates + from each other, and so on. + :param yaxis_force_interval: + Compulsively set segmentation interval for yaxis. + As splitNumber is a recommendation value, the calculated tick may not be + the same as expected. In this case, interval should be used along with + min and max to compulsively set tickings. But in most cases, we do not + suggest using this, out automatic calculation is enough for most situations. + :param yaxis_pos: + the position of y axis. + options: 'left' or 'right' + The first y axis in grid defaults to be the left ('left') of the grid, and + the second y axis is on the other side against the first y axis. + :param yaxis_formatter: + Formatter of axis label, which supports string template and callback function. + example: '{value} kg' :param is_convert: - 是否交换 x 轴与 y 轴 - :param x_axis: - x 轴数据项 + It specifies whether to convert xAxis and yAxis. + :param is_xaxis_inverse: + Whether xaxis is inversed + :param is_yaxis_inverse: + Whether yaxis is inversed + :param is_xaxislabel_align: + whether align xaxis tick with label + :param is_yaxislabel_align: + whether align yaxis tick with label + :param is_xaxis_boundarygap: + The boundary gap on both sides of a coordinate xAxis. + The boundaryGap of category axis can be set to either true or false. + Default value is set to be true, in which case axisTick is served + only as a separation line, and labels and data appear only in + the center part of two axis ticks, which is called band. + :param is_yaxis_boundarygap: + The boundary gap on both sides of a coordinate yAxis. + The boundaryGap of category axis can be set to either true or false. + Default value is set to be true, in which case axisTick is served + only as a separation line, and labels and data appear only in + the center part of two axis ticks, which is called band. + :param is_xaxis_show: + It specifies whether to show xAxis + :param is_yaxis_show: + It specifies whether to show yAxis :param kwargs: :return: """ _xAxis = { "name": xaxis_name, + "show": is_xaxis_show, "nameLocation": xaxis_name_pos, - "nameGap": namegap, - "nameTextStyle": {"fontSize": xy_font_size}, - "axisLabel": {"interval": interval} + "nameGap": xaxis_name_gap, + "nameTextStyle": {"fontSize": xaxis_name_size}, + "axisLabel": { + "interval": xaxis_interval, + "rotate": xaxis_rotate, + "margin": xaxis_margin + }, + "axisTick": { + "alignWithLabel": is_xaxislabel_align + }, + "inverse": is_xaxis_inverse, + "position": xaxis_pos, + "boundaryGap": is_xaxis_boundarygap, + "min": xaxis_min, + "max": xaxis_max } _yAxis = { "name": yaxis_name, + "show": is_yaxis_show, "nameLocation": yaxis_name_pos, - "nameGap": namegap, - "nameTextStyle": {"fontSize": xy_font_size} + "nameGap": yaxis_name_gap, + "nameTextStyle": {"fontSize": yaxis_name_size}, + "axisLabel": { + "formatter": "{value} " + yaxis_formatter, + "rotate": yaxis_rotate, + "interval": yaxis_interval, + "margin": yaxis_margin + }, + "axisTick": { + "alignWithLabel": is_yaxislabel_align + }, + "inverse": is_yaxis_inverse, + "position": yaxis_pos, + "boundaryGap": is_yaxis_boundarygap, + "min": yaxis_min, + "max": yaxis_max } + + if xaxis_type is None: + xaxis_type = "value" if type == "scatter" else "category" + if yaxis_type is None: + yaxis_type = "value" + if is_convert: - _yAxis.update(data=x_axis, type="category") - _xAxis.update(type="value") + xaxis_type, yaxis_type = yaxis_type, xaxis_type + _xAxis.update(type=xaxis_type) + _yAxis.update(data=x_axis, type=yaxis_type) else: - _xAxis.update(data=x_axis, type="category") - _yAxis.update(type="value") - if type == "scatter": - _xAxis.update(data=x_axis, type="value") - _yAxis.update(type="value") - return _xAxis, _yAxis + _xAxis.update(data=x_axis, type=xaxis_type) + _yAxis.update(type=yaxis_type) + # 强制分割数值轴,在多 x、y 轴中可以使用强制分割使标刻线对齐 + if xaxis_force_interval is not None: + _xAxis.update(interval=xaxis_force_interval) + if yaxis_force_interval is not None: + _yAxis.update(interval=yaxis_force_interval) -def _mark(data): + return [_xAxis], [_yAxis] + + +def _mark(data, + mark_point_symbol='pin', + mark_point_symbolsize=50, + mark_point_textcolor='#fff', + mark_line_symbolsize=10, + mark_line_valuedim=None, + _is_markline=False, + **kwargs): """ :param data: - 标记数据项,有最小值,最大值,平均值可选 + mark data, it can be 'min', 'max', 'average' or you cloud define by yourself + you need a dict contains coord and name, + coord: Coordinates of the starting point or ending point, + Notice: For axis with axis.type 'category': + If coord value is number, it represents index of axis.data. + If coord value is string, it represents concrete value in axis.data. + Please notice that in this case xAxis.data must not be written as + [number, number, ...],but can only be written [string, string, ...]. + Otherwise it is not able to be located by markPoint / markLine. + name: Markpoint name + :param mark_point_symbol: + mark symbol, it can be 'circle', 'rect', 'roundRect', 'triangle', + 'diamond', 'pin', 'arrow' + :param mark_point_symbolsize: + markPoint symbol size + :param mark_point_textcolor: + mark point text color + :param mark_line_symbolsize: + markLine symbol size + :param mark_line_valuedim: + Works only when type is assigned. It is used to state the dimension used to + calculate maximum value or minimum value. It may be the direct name of a + dimension, like x, or angle for line charts, or open, or close for candlestick charts. + :param _is_markline: + It specifies whether is markline or not. :return: """ mark = {"data": []} if data: for d in list(data): - if "max" in d: - mark.get("data").append({"type": "max", "name": "最大值"}) - elif "min" in d: - mark.get("data").append({"type": "min", "name": "最小值"}) - elif "average" in d: - mark.get("data").append({"type": "average", "name": "平均值"}) + # user-define markPoint + if isinstance(d, dict): + _coord = d.get('coord', None) + _pname = d.get('name', None) + _marktmp = { + "coord": _coord, + "name": _pname, + "symbol": mark_point_symbol, + "symbolSize": mark_point_symbolsize, + "label": {"normal": { + "textStyle": {"color": mark_point_textcolor}} + }} + mark.get("data").append(_marktmp) + # markPoint&markLine by default + else: + _type, _name = "", "" + if "max" in d: + _type, _name = "max", "Maximum" + elif "min" in d: + _type, _name = "min", "Minimum" + elif "average" in d: + _type, _name = "average", "mean-Value" + + if _is_markline: + _marktmp = { + "type": _type, + "name": _name, + 'valueDim': mark_line_valuedim, + } + if _type: + mark.get("data").append(_marktmp) + mark.update(symbolSize=mark_line_symbolsize) + else: + _marktmp = {"type": _type, "name": _name} + _marktmp.update( + symbol=mark_point_symbol, + symbolSize=mark_point_symbolsize, + label={"normal": { + "textStyle": {"color": mark_point_textcolor}} + }) + if _type: + mark.get("data").append(_marktmp) return mark @@ -274,11 +552,11 @@ def mark_point(mark_point=None, **kwargs): """ :param mark_point: - 标记点,有最小值,最大值,平均值可选 + mark point data, it can be 'min', 'max', 'average' or define by yourself :param kwargs: :return: """ - return _mark(mark_point) + return _mark(mark_point, **kwargs) @collectfuncs @@ -286,92 +564,174 @@ def mark_line(mark_line=None, **kwargs): """ :param mark_line: - 标记线,有最小值,最大值,平均值可选 + mark line data,it can be 'min', 'max', 'average' :param kwargs: :return: """ - - return _mark(mark_line) + return _mark(mark_line, _is_markline=True, **kwargs) @collectfuncs def legend(is_legend_show=True, legend_orient="horizontal", legend_pos="center", + legend_top='top', + legend_selectedmode='multiple', + legend_text_size=12, + legend_text_color='#333', **kwargs): - """ + """ Legend component shows symbol, color and name of different series. + You can click legends to toggle displaying series in the chart. :param is_legend_show: - 是否显示顶端图例 + It specifies whether to show the legend component. :param legend_orient: - 图例列表的布局朝向,有 horizontal,vertical 可选 + The layout orientation of legend.It can be 'horizontal', 'vertical' :param legend_pos: - 图例位置,有 left, center, right 可选 + Distance between legend component and the left side of the container. + legend_pos value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'left', 'center', or 'right'. + :param legend_top: + Distance between legend component and the top side of the container. + legend_top value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'top', 'middle', or 'bottom'. + :param legend_selectedmode: + State table of selected legend. 'single' or 'multiple' + :param legend_text_size: + legend text size + :param legend_text_color: + legend text color :param kwargs: :return: """ _legend = { + "selectedMode": legend_selectedmode, "show": is_legend_show, "left": legend_pos, - "orient": legend_orient + "top": legend_top, + "orient": legend_orient, + "textStyle": { + "fontSize": legend_text_size, + "color": legend_text_color, + } } return _legend @collectfuncs -def visual_map(visual_range=None, +def visual_map(visual_type='color', + visual_range=None, visual_text_color=None, visual_range_text=None, visual_range_color=None, + visual_range_size=None, + visual_orient='vertical', + visual_pos="left", + visual_top="bottom", + visual_split_number=5, + visual_dimension=None, is_calculable=True, + is_piecewise=False, **kwargs): - """ + """ visualMap is a type of component for visual encoding, which + maps the data to visual channels + :param visual_type: + visual map type, 'color' or 'size' + color: + For visual channel color, array is used, like: ['#333', '#78ab23', 'blue'], + which means a color ribbon is formed based on the three color stops, + and dataValues will be mapped to the ribbon. + size: + For visual channel size, array is used, like: [20, 50], + which means a size ribbon is formed based on the two value stops, + and dataValues will be mapped to the ribbon. :param visual_range: - 指定组件的允许的最小值与最大值 + pecify the min and max dataValue for the visualMap component. :param visual_text_color: - 两端文本颜色 + visualMap text color. :param visual_range_text: - 两端文本 + The label text on both ends, such as ['High', 'Low'] + :param visual_range_size: + For visual channel size, array is used, like: [20, 50]. :param visual_range_color: - 过渡的颜色,列表类型 + For visual channel color, array is used, like: ['#333', '#78ab23', 'blue']. + :param visual_orient: + How to layout the visualMap component, 'horizontal' or 'vertical'. + :param visual_pos: + Distance between visualMap component and the left side of the container. + visual_pos value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'left', 'center', or 'right'. + :param visual_top: + Distance between visualMap component and the top side of the container. + visual_top value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'top', 'middle', or 'bottom'. + :param visual_split_number: + Continuous data can be divide into pieces averagely according to splitNumber, + that is, if splitNumber is 5, data will be sliced into 5 pieces. + :param visual_dimension: + Specify which dimension should be used to fetch dataValue from series.data, + and then map them to visual channel. :param is_calculable: - 是否显示拖拽用的手柄(手柄能拖拽调整选中范围) + Whether show handles, which can be dragged to adjust "selected range". + :param is_piecewise: + Used to determine it is a piecewise visualMap component. :param kwargs: :return: """ - # 组件允许的最大值最小值默认为 [0,100] + # default min and max value of visual_range is [0, 100] _min, _max = 0, 100 if visual_range: if len(visual_range) == 2: _min, _max = visual_range - # 两端文本默认值为 ['low','hight'] - _tlow, _thight = "low", "hight" + + # default label text on both ends is ['low', 'high'] + _tlow, _thigh = "low", "high" if visual_range_text: if len(visual_range_text) == 2: - _tlow, _thight = visual_range_text - # 过渡颜色默认为 ['#50a3ba', '#eac763', '#d94e5d'] - inrange = ['#50a3ba', '#eac763', '#d94e5d'] - if visual_range_color: - if len(visual_range_color) >= 2: - inrange = visual_range_color + _tlow, _thigh = visual_range_text + + _inrange_op = {} + if visual_type == 'color': + range_color = ['#50a3ba', '#eac763', '#d94e5d'] + if visual_range_color: + if len(visual_range_color) >= 2: + range_color = visual_range_color + _inrange_op.update(color=range_color) + + if visual_type == 'size': + range_size = [20, 50] + if visual_range_size: + if len(visual_range_size) >= 2: + range_size = visual_range_size + _inrange_op.update(symbolSize=range_size) + + _type = "piecewise" if is_piecewise else "continuous" _visual_map = { - "type": "continuous", + "type": _type, "min": _min, "max": _max, - "text": [_thight, _tlow], + "text": [_thigh, _tlow], "textStyle": {"color": visual_text_color}, - "inRange": {"color": inrange}, + "inRange": _inrange_op, "calculable": is_calculable, - "left": "left", - "top": "bottom" + "splitNumber": visual_split_number, + "dimension": visual_dimension, + "orient": visual_orient, + "left": visual_pos, + "top": visual_top, + "showLabel": True, } return _visual_map def gen_color(): - """ 随机生成颜色,用于词云图 + """ random generation color for << WordCloud >> :return: """ @@ -385,7 +745,8 @@ def symbol(type=None, symbol="", **kwargs): """ :param symbol: - 标记类型 + symbol type, it can be 'rect', 'roundRect', 'triangle', + diamond', 'pin', 'arrow'. :param kwargs: :return: """ @@ -406,11 +767,11 @@ def effect(effect_brushtype="stroke", """ :param effect_brushtype: - 波纹绘制方式,有 stroke/fill 可选 + The brush type for ripples. options: 'stroke' and 'fill'. :param effect_scale: - 动画中波纹的最大缩放比例 + The maximum zooming scale of ripples in animation. :param effect_period: - 动画持续的时间 + The duration of animation. :param kwargs: :return: """ @@ -422,8 +783,394 @@ def effect(effect_brushtype="stroke", return _effect +@collectfuncs +def datazoom(is_datazoom_show=False, + datazoom_type='slider', + datazoom_range=None, + datazoom_orient='horizontal', + datazoom_xaxis_index=None, + datazoom_yaxis_index=None, + **kwargs): + """ + + :param is_datazoom_show: + It specifies whether to use the datazoom component. + :param datazoom_type: + datazoom type, 'slider', 'inside', or 'both' + :param datazoom_range: + The range percentage of the window out of the data extent,in + the range of 0 ~ 100. + :param datazoom_orient: + Specify whether the layout of dataZoom component is horizontal or vertical. + 'horizontal' or 'vertical'.What's more,it indicates whether the horizontal + axis or vertical axis is controlled.by default in catesian coordinate system. + :param datazoom_xaxis_index: + Specify which xAxis is/are controlled by the dataZoom-inside when + catesian coordinate system is used. + :param datazoom_yaxis_index: + Specify which yAxis is/are controlled by the dataZoom-inside when + catesian coordinate system is used. + :param kwargs: + :return: + """ + _min, _max = 50, 100 + if datazoom_range: + if len(datazoom_range) == 2: + _min, _max = datazoom_range + if datazoom_type not in ("slider", "inside", "both"): + datazoom_type = "slider" + _datazoom = [] + _datazoom_config = { + "show": is_datazoom_show, + "type": "slider", + "start": _min, + "end": _max, + "orient": datazoom_orient, + "xAxisIndex": datazoom_xaxis_index, + "yAxisIndex": datazoom_yaxis_index + } + if datazoom_type == "both": + _datazoom.append(_datazoom_config.copy()) + datazoom_type = 'inside' + _datazoom_config['type'] = datazoom_type + _datazoom.append(_datazoom_config) + return _datazoom + + +@collectfuncs +def grid(grid_width=None, + grid_height=None, + grid_top=None, + grid_bottom=None, + grid_left=None, + grid_right=None, + **kwargs): + """ + :param series: + other chart series data + :param grid_width: + Width of grid component. Adaptive by default. + :param grid_height: + Height of grid component. Adaptive by default. + :param grid_top: + Distance between grid component and the top side of the container. + grid_top value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'top', 'middle', or 'bottom'. + If the grid_top value is set to be 'top', 'middle', or 'bottom', + then the component will be aligned automatically based on position. + :param grid_bottom: + Distance between grid component and the bottom side of the container. + grid_bottom value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'. + :param grid_left: + Distance between grid component and the left side of the container. + grid_left value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'; + and it can also be 'left', 'center', or 'right'. + If the grid_left value is set to be 'left', 'center', or 'right', + then the component will be aligned automatically based on position. + :param grid_right: + Distance between grid component and the right side of the container. + grid_right value can be instant pixel value like 20; + it can also be percentage value relative to container width like '20%'. + :return: + """ + _grid = {} + if grid_width is not None: + _grid.update(width=grid_width) + if grid_height is not None: + _grid.update(height=grid_height) + if grid_top is not None: + _grid.update(top=grid_top) + if grid_bottom is not None: + _grid.update(bottom=grid_bottom) + if grid_left is not None: + _grid.update(left=grid_left) + if grid_right is not None: + _grid.update(right=grid_right) + return _grid + + +@collectfuncs +def grid3D(grid3d_width=100, + grid3d_height=100, + grid3d_depth=100, + grid3d_rotate_speed=10, + grid3d_rotate_sensitivity=1, + is_grid3d_rotate=False, + **kwargs): + """ + + :param grid3d_width: + 3D axis width + :param grid3d_height: + 3D axis height + :param grid3d_depth: + 3D axis depth + :param grid3d_rotate_speed: + 3D charts rotate speed + :param is_grid3d_rotate: + whether rotate 3D charts + :param grid3d_rotate_sensitivity: + 3D charts rotete sensitivity, The greater the value, the more sensitive. + :param kwargs: + :return: + """ + _grid3D = { + "boxWidth": grid3d_width, + "boxHeight": grid3d_height, + "boxDepth": grid3d_depth, + "viewControl": { + "autoRotate": is_grid3d_rotate, + "autoRotateSpeed": grid3d_rotate_speed, + "rotateSensitivity": grid3d_rotate_sensitivity + } + } + return _grid3D + + +@collectfuncs +def xaxis3D(xaxis3d_type=None, + xaxis3d_name="", + xaxis3d_name_size=16, + xaxis3d_name_gap=20, + xaxis3d_min=None, + xaxis3d_max=None, + xaxis3d_interval="auto", + xaxis3d_margin=8, + **kwargs): + """ + + :param xaxis3d_type: + Type of 3d xaxis + :param xaxis3d_name: + Name of 3d xaxis + :param xaxis3d_name_size: + 3d xaxis name font size + :param xaxis3d_name_gap: + Gap between axis name and 3d xaxis line. + :param xaxis3d_min: + The minimun value of 3d xaxis. + :param xaxis3d_max: + The maximun value of 3d xaxis. + :param xaxis3d_interval: + The display interval of the axis scale label is valid in the category 3d xaxis. + By default, labels are displayed using labels that do not overlap the labels + Set to 0 to force all labels to be displayed + and label is one by one if setting as 1; If 2,it will be one label separates + from each other, and so on. + :param xaxis3d_margin: + The margin between the axis label and the 3d xaxis line. + :return: + """ + _xaxis3D = { + "name": xaxis3d_name, + "nameGap": xaxis3d_name_gap, + "nameTextStyle": {"fontSize": xaxis3d_name_size}, + "type": xaxis3d_type, + "min": xaxis3d_min, + "max": xaxis3d_max, + "axisLabel": { + "margin": xaxis3d_margin, + "interval": xaxis3d_interval + } + } + return _xaxis3D + + +@collectfuncs +def yaxis3D(yaxis3d_type=None, + yaxis3d_name="", + yaxis3d_name_size=16, + yaxis3d_name_gap=20, + yaxis3d_min=None, + yaxis3d_max=None, + yaxis3d_interval="auto", + yaxis3d_margin=8, + **kwargs): + """ + + :param yaxis3d_type: + Type of 3d yaxis + :param yaxis3d_name: + Name of 3d yaxis + :param yaxis3d_name_size: + 3d yaxis name font size + :param yaxis3d_name_gap: + Gap between axis name and 3d yaxis line. + :param yaxis3d_min: + The minimun value of 3d yaxis. + :param yaxis3d_max: + The maximun value of 3d yaxis. + :param yaxis3d_interval: + The display interval of the axis scale label is valid in the category 3d yaxis. + By default, labels are displayed using labels that do not overlap the labels + Set to 0 to force all labels to be displayed + and label is one by one if setting as 1;If 2, it will be one label separates + from each other, and so on. + :param yaxis3d_margin: + The margin between the axis label and the 3d yaxis line. + :return: + """ + _yaxis3D = { + "name": yaxis3d_name, + "nameGap": yaxis3d_name_gap, + "nameTextStyle": {"fontSize": yaxis3d_name_size}, + "type": yaxis3d_type, + "min": yaxis3d_min, + "max": yaxis3d_max, + "axisLabel": { + "margin": yaxis3d_margin, + "interval": yaxis3d_interval + } + } + return _yaxis3D + + +@collectfuncs +def zaxis3D(zaxis3d_type=None, + zaxis3d_name="", + zaxis3d_name_size=16, + zaxis3d_name_gap=20, + zaxis3d_min=None, + zaxis3d_max=None, + zaxis3d_margin=8, + **kwargs): + """ + + :param zaxis3d_type: + Type of 3d zaxis + :param zaxis3d_name: + Name of 3d zaxis + :param zaxis3d_name_size: + 3d zaxis name font size + :param zaxis3d_name_gap: + Gap between axis name and 3d zaxis line. + :param zaxis3d_min: + The minimun value of 3d zaxis. + :param zaxis3d_max: + The maximun value of 3d zaxis. + :param zaxis3d_margin: + The margin between the axis label and the 3d zaxis line. + :return: + """ + _zaxis3D = { + "name": zaxis3d_name, + "nameGap": zaxis3d_name_gap, + "nameTextStyle": {"fontSize": zaxis3d_name_size}, + "type": zaxis3d_type, + "min": zaxis3d_min, + "max": zaxis3d_max, + "axisLabel": { + "margin": zaxis3d_margin, + } + } + return _zaxis3D + + +@collectfuncs +def tooltip(type=None, + tooltip_tragger="item", + tooltip_tragger_on="mousemove|click", + tooltip_axispointer_type="line", + tooltip_formatter=None, + tooltip_text_color="#fff", + tooltip_font_size=14, + **kwargs): + """ + + :param type: + chart type + :param tooltip_tragger: + Type of triggering. + Options: + 'item': Triggered by data item, which is mainly used for charts that don't have a + category axis like scatter charts or pie charts. + 'axis': Triggered by axes, which is mainly used for charts that have category axes, + like bar charts or line charts. + 'none': Trigger nothing. + :param tooltip_tragger_on: + Conditions to trigger tooltip. Options: + Options: + 'mousemove': Trigger when mouse moves. + 'click': Trigger when mouse clicks. + 'mousemove|click': Trigger when mouse clicks and moves. + 'none': Do not triggered by 'mousemove' and 'click'. + :param tooltip_axispointer_type: + Indicator type. + Options: + 'line': line indicator + 'shadow': shadow crosshair indicator + 'cross': crosshair indicator, which is actually the shortcut of enable two + axisPointers of two orthometric axes. + :param tooltip_formatter: + The template variables are {a}, {b}, {c}, {d} and {e}, + which stands for series name, data name and data value and ect. + When trigger is set to be 'axis', there may be data from multiple series. + In this time, series index can be refered as {a0}, {a1}, or {a2}. + :param tooltip_text_color: + text color. + :param tooltip_font_size: + font size + :return: + """ + if tooltip_formatter is None: + if type == "gauge": + tooltip_formatter = "{a} <br/>{b} : {c}%" + elif type == "geo": + tooltip_formatter = "{b}: {c}" + + _tooltip = { + "trigger": tooltip_tragger, + "triggerOn": tooltip_tragger_on, + "axisPointer": {"type": tooltip_axispointer_type}, + "formatter": tooltip_formatter, + "textStyle": { + "color": tooltip_text_color, + "fontSize": tooltip_font_size + } + } + return _tooltip + + +@collectfuncs +def calendar(calendar_date_range=None, + calendar_cell_size=None, + **kwargs): + """ + + :param calendar_date_range: + Required, range of Calendar coordinates, support multiple formats. + Examples: + # one year + range: 2017 + # one month + range: '2017-02' + # a range + range: ['2017-01-02', '2017-02-23'] + # note: they will be identified as ['2017-01-01', '2017-02-01'] + range: ['2017-01', '2017-02'] + :param calendar_cell_size: + The size of each rect of calendar coordinates, can be set to a single + value or array, the first element is width and the second element + is height.Support setting self-adaptation: "auto" + :param kwargs: + :return: + """ + + if calendar_cell_size is None: + calendar_cell_size = ['auto', 20] + + _calendar = { + "range": calendar_date_range, + "cellSize": calendar_cell_size + } + return _calendar + + def get_all_options(**kwargs): - """ 返回所有配置项 + """ Return all component options of charts :param kwargs: :return: diff --git a/pyecharts/template.py b/pyecharts/template.py new file mode 100644 index 000000000..cdf14af5f --- /dev/null +++ b/pyecharts/template.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from jinja2 import Environment, FileSystemLoader +import pyecharts.constants as constants +from pyecharts.utils import get_resource_dir + + +# Single Singleton Instance for jinja2 +JINJA2_ENV = Environment( + loader=FileSystemLoader(get_resource_dir('templates')), + keep_trailing_newline=True, + trim_blocks=True, + lstrip_blocks=True) + + +def produce_require_configuration(dependencies, jshost): + """ + + :param dependencies: + :param jshost: + :return: + """ + _d = ensure_echarts_is_in_the_front(dependencies) + # if no nick name register, we treat the location as location.js + require_conf_items = [ + "'%s': '%s/%s'" % (key, + jshost, + constants.DEFAULT_JS_LIBRARIES.get(key, key)) + for key in _d] + require_libraries = ["'%s'" % key for key in _d] + return dict( + config_items=require_conf_items, + libraries=require_libraries + ) + + +def produce_html_script_list(dependencies): + """ + + :param dependencies: + :return: + """ + _d = ensure_echarts_is_in_the_front(dependencies) + script_list = [ + '%s' % constants.DEFAULT_JS_LIBRARIES.get(key, key) + for key in _d] + return script_list + + +def ensure_echarts_is_in_the_front(dependencies): + """ + make sure echarts is the item in the list + require(['echarts'....], function(ec) {..}) need it to be first + but dependencies is a set so has no sequence + + :param dependencies: + :return: + """ + if len(dependencies) > 1: + dependencies.remove('echarts') + dependencies = ['echarts'] + list(dependencies) + elif len(dependencies) == 1: + # make a new list + dependencies = list(dependencies) + else: + raise Exception("No js library found. Nothing works!") + return dependencies + + +def online(host=constants.DEFAULT_HOST): + constants.CONFIGURATION['HOST'] = host diff --git a/pyecharts/templates/base.html b/pyecharts/templates/base.html new file mode 100644 index 000000000..f991f549a --- /dev/null +++ b/pyecharts/templates/base.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>{{ page_title }} + + {% for jsfile_name in script_list %} + + {% endfor %} + + + + {% block charts %} + {% include "chart_component.html" %} + {% endblock %} + + diff --git a/pyecharts/templates/chart_component.html b/pyecharts/templates/chart_component.html new file mode 100644 index 000000000..344662d6d --- /dev/null +++ b/pyecharts/templates/chart_component.html @@ -0,0 +1,6 @@ +
+ diff --git a/pyecharts/templates/js b/pyecharts/templates/js new file mode 160000 index 000000000..802e00f68 --- /dev/null +++ b/pyecharts/templates/js @@ -0,0 +1 @@ +Subproject commit 802e00f68e4ed3cc6d11559a7926e8884cb67ff1 diff --git a/pyecharts/templates/local.html b/pyecharts/templates/local.html new file mode 100644 index 000000000..4bda0b8ee --- /dev/null +++ b/pyecharts/templates/local.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block charts %} + {% include "chart_component.html" %} +{% endblock %} diff --git a/pyecharts/templates/multicharts.html b/pyecharts/templates/multicharts.html new file mode 100644 index 000000000..f9ae79700 --- /dev/null +++ b/pyecharts/templates/multicharts.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block charts %} + {{ multi_chart_content }} +{% endblock %} diff --git a/pyecharts/templates/notebook.html b/pyecharts/templates/notebook.html new file mode 100644 index 000000000..37545894c --- /dev/null +++ b/pyecharts/templates/notebook.html @@ -0,0 +1,13 @@ + +{{ dom }} + diff --git a/pyecharts/templates/notebook_chart_component.html b/pyecharts/templates/notebook_chart_component.html new file mode 100644 index 000000000..f0037795c --- /dev/null +++ b/pyecharts/templates/notebook_chart_component.html @@ -0,0 +1,3 @@ +var myChart = ec.init(document.getElementById('{{ chart_id }}')); +var option = {{ my_option }}; +myChart.setOption(option); diff --git a/pyecharts/templates/notebook_dom.html b/pyecharts/templates/notebook_dom.html new file mode 100644 index 000000000..5fab66ada --- /dev/null +++ b/pyecharts/templates/notebook_dom.html @@ -0,0 +1 @@ +
diff --git a/pyecharts/temple.py b/pyecharts/temple.py deleted file mode 100644 index 79e1b7780..000000000 --- a/pyecharts/temple.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -#coding=utf-8 - -_temple = """ - - - - - - ECharts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -""" - -_temple_wd = """ - - - - - - ECharts - - - - - - - - -
-
- - - - -""" - -temple = """ - - - - - - ECharts - - - - - - - -
- - - - -""" \ No newline at end of file diff --git a/pyecharts/utils.py b/pyecharts/utils.py new file mode 100644 index 000000000..3a2bce3b7 --- /dev/null +++ b/pyecharts/utils.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +import re +import os +import sys +import codecs + + +PY2 = sys.version_info[0] == 2 + +JS_PATTERN = re.compile(r'(.*)', + re.IGNORECASE | re.MULTILINE | re.DOTALL) +JS_SRC_PATTERN = re.compile(r'src=\"(.*?)\"') + + +def freeze_js(html_content): + """ + + :param html_content: + :return: + """ + matches = JS_PATTERN.finditer(html_content) + + if not matches: + return html_content + + for match in reversed(tuple(matches)): + # JS file block + src_matches = JS_SRC_PATTERN.findall(match.group(1)) + + js_content = "" + for src in src_matches: + src = src.strip() + src = src.split('/') + file_path = os.path.join( + get_resource_dir('templates'), *src) + + with codecs.open(file_path, "r", "utf-8") as f: + js_content += f.read() + '\n' + # Replace matched string with inline JS + fmt = '' + js_content = fmt.format(js_content) + html_content = (html_content[:match.start()] + js_content + + html_content[match.end():]) + + return html_content + + +def get_resource_dir(folder): + """ + + :param folder: + :return: + """ + current_path = os.path.dirname(__file__) + resource_path = os.path.join(current_path, folder) + return resource_path + + +def write_utf8_html_file(file_name, html_content): + """ + + :param file_name: + :param html_content: + :return: + """ + if PY2: + html = html_content.encode('utf-8') + with open(file_name, "w+") as fout: + fout.write(html) + else: + with open(file_name, "w+", encoding="utf-8") as fout: + fout.write(html_content) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..040ec5f7c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +jinja2>=2.8 +future +pillow +jupyter-pip>=0.3.1 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..2a9acf13d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 diff --git a/setup.py b/setup.py index 0bb40653d..2a7301bd8 100644 --- a/setup.py +++ b/setup.py @@ -1,22 +1,56 @@ +#!/usr/bin/env python +#coding=utf-8 + +import os +from setuptools import setup, find_packages try: - from setuptools import setup -except ImportError: - from distutils.core import setup -import pyecharts.__version__ as about + from jupyterpip import cmdclass +except: + import pip + import importlib + + pip.main(['install', 'jupyter-pip']) + cmdclass = importlib.import_module('jupyterpip').cmdclass + + +__title__ = 'pyecharts' +__description__ = 'Python echarts, make charting easier' +__url__ = 'https://github.com/chenjiandongx/pyecharts' +__author_email__ = 'chenjiandongx@qq.com' +__license__ = 'MIT' + +__requires__ = ['pillow', + 'jinja2', + 'future', + 'jupyter-pip>=0.3.1'] + +__keywords__ = ['Echarts', + 'charts', + 'plotting-tool'] + +__jupyter_echarts__ = 'pyecharts/templates/js/echarts' +# Load the package's _version.py module as a dictionary. +here = os.path.abspath(os.path.dirname(__file__)) +about = {} +with open(os.path.join(here, __title__, '_version.py')) as f: + exec(f.read(), about) setup( - name=about.__title__, - version=about.__version__, - description=about.__description__, - url=about.__url__, - author=about.__author__, - author_email=about.__author_email__, - license=about.__license__, - packages=about.__packages__, - keywords=about.__keywords__, - install_requires=about.__requires__, + name=__title__, + version=about['__version__'], + description=__description__, + url=__url__, + author=about['__author__'], + author_email=__author_email__, + license=__license__, + packages=find_packages(exclude=('test',)), + keywords=__keywords__, + install_requires=__requires__, + zip_safe=False, + include_package_data=True, + cmdclass=cmdclass(__jupyter_echarts__, enable="echarts/main"), classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: Console', @@ -33,4 +67,4 @@ 'Programming Language :: Python :: 3.6', 'Topic :: Software Development :: Libraries' ] -) \ No newline at end of file +) diff --git a/test.sh b/test.sh new file mode 100644 index 000000000..a3a4369ef --- /dev/null +++ b/test.sh @@ -0,0 +1,3 @@ +cd test +nosetests --with-coverage --cover-package pyecharts --cover-package test + diff --git a/test/constants.py b/test/constants.py new file mode 100644 index 000000000..aff9e3f8a --- /dev/null +++ b/test/constants.py @@ -0,0 +1,14 @@ + +RANGE_COLOR = [ + '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', + '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026' +] + +X_TIME = [ + "12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", + "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p" +] +Y_WEEK = [ + "Saturday", "Friday", "Thursday", "Wednesday", + "Tuesday", "Monday", "Sunday" +] \ No newline at end of file diff --git a/test/requirements.txt b/test/requirements.txt new file mode 100644 index 000000000..057953947 --- /dev/null +++ b/test/requirements.txt @@ -0,0 +1,6 @@ +nose +codecov +coverage +pandas +numpy +jupyter diff --git a/test/test.py b/test/test.py deleted file mode 100644 index e5a4b14f5..000000000 --- a/test/test.py +++ /dev/null @@ -1,15 +0,0 @@ - -from .test_bar import test_bar -from .test_effectscatter import test_effectscatter -from .test_funnel import test_funnel -from .test_gauge import test_gague -from .test_geo import test_geo -from .test_graph import test_graph -from .test_line import test_line -from .test_map import test_map -from .test_parallel import test_parallel -from .test_pie import test_pie -from .test_polar import test_polar -from .test_radar import test_radar -from .test_scatter import test_scatter -from .test_wordcloud import test_wordcloud diff --git a/test/test_bar.py b/test/test_bar.py index d996f2020..d4291d951 100644 --- a/test/test_bar.py +++ b/test/test_bar.py @@ -1,16 +1,101 @@ -from pyecharts import Bar, Line +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +import random + +from pyecharts import Bar + def test_bar(): + # bar stack attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] - v3 = [first + second + 35 for first, second in zip(v1, v2)] - - bar = Bar("TITLE", "SUBTITLE") - bar.add("B", attr, v2, isstack=True) - bar.add("A", attr, v1, label_text_size=20, isstack=True) - line = Line() - line.add("C", attr, v3, label_text_size=20) - bar.custom(line.get_series()) - bar.show_config() - bar.render("e:/xx.html") + bar = Bar("柱状图数据堆叠示例") + bar.add("商家A", attr, v1, is_stack=True) + bar.add("商家B", attr, v2, is_stack=True) + html_content = bar._repr_html_() + assert "dataZoom" not in html_content + assert "stack_" in html_content + + # bar markPoint&markLine + bar = Bar("标记线和标记点示例") + bar.add("商家A", attr, v1, mark_point=["average"]) + bar.add("商家B", attr, v2, mark_line=["min", "max"]) + assert '"average"' in bar._repr_html_() + + # bar convert xAxis-yAxis + bar = Bar("x 轴和 y 轴交换") + bar.add("商家A", attr, v1) + bar.add("商家B", attr, v2, is_convert=True) + assert "average" not in bar._repr_html_() + + # bar rotate label + attr = ["{}天".format(i) for i in range(20)] + v1 = [random.randint(1, 20) for _ in range(20)] + bar = Bar("坐标轴标签旋转示例") + bar.add("", attr, v1, xaxis_interval=0, xaxis_rotate=30, + yaxis_rotate=30) + assert "stack_" not in bar._repr_html_() + + # bar waterfall + attr = ["{}月".format(i) for i in range(1, 8)] + v1 = [0, 100, 200, 300, 400, 220, 250] + v2 = [1000, 800, 600, 500, 450, 400, 300] + bar = Bar("瀑布图示例") + bar.add("", attr, v1, label_color=['rgba(0,0,0,0)'], is_stack=True) + bar.add("月份", attr, v2, is_label_show=True, is_stack=True, + label_pos='inside') + bar.render() + + +def test_bar_datazoom_undefined(): + # bar dataZoom undefined-type + attr = ["{}天".format(i) for i in range(30)] + v1 = [random.randint(1, 30) for _ in range(30)] + bar = Bar("Bar - datazoom 默认 示例") + bar.add("", attr, v1, is_label_show=True, is_datazoom_show=True) + html_content = bar._repr_html_() + assert "dataZoom" in html_content + assert ': "slider"' in html_content + assert ': "inside"' not in html_content + + +def test_bar_datazoom_slider(): + # bar dataZoom slider-type + attr = ["{}天".format(i) for i in range(30)] + v1 = [random.randint(1, 30) for _ in range(30)] + bar = Bar("Bar - datazoom 默认 示例") + bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='slider', + datazoom_range=[10, 25]) + html_content = bar._repr_html_() + assert "dataZoom" in html_content + assert ': "slider"' in html_content + assert ': "inside"' not in html_content + + +def test_bar_datazoom_inside(): + # bar dataZoom inside-type + attr = ["{}天".format(i) for i in range(30)] + v1 = [random.randint(1, 30) for _ in range(30)] + bar = Bar("Bar - datazoom - inside 示例") + bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='inside', + datazoom_range=[10, 25]) + html_content = bar._repr_html_() + assert "dataZoom" in html_content + assert ': "inside"' in html_content + assert ': "slider"' not in html_content + + +def test_bar_datazoom_both(): + # bar dataZoom both-type + attr = ["{}天".format(i) for i in range(30)] + v1 = [random.randint(1, 30) for _ in range(30)] + bar = Bar("Bar - datazoom - both 示例") + bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='both', + datazoom_range=[10, 25]) + html_content = bar._repr_html_() + assert "dataZoom" in html_content + assert ': "inside"' in html_content + assert ': "slider"' in html_content diff --git a/test/test_bar3D.py b/test/test_bar3D.py new file mode 100644 index 000000000..a55037374 --- /dev/null +++ b/test/test_bar3D.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Bar3D +from test.constants import RANGE_COLOR, X_TIME, Y_WEEK + + +def test_bar3d(): + # bar3D default + bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) + 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] + ] + + bar3d.add("", X_TIME, Y_WEEK, [[d[1], d[0], d[2]] for d in data], + is_visualmap=True, visual_range=[0, 20], + visual_range_color=RANGE_COLOR, + grid3d_width=200, grid3d_depth=80) + assert "lambert" not in bar3d._repr_html_() + + # bar3D shading lambert + bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) + bar3d.add("", X_TIME, Y_WEEK, [[d[1], d[0], d[2]] for d in data], + is_visualmap=True, visual_range=[0, 20], + visual_range_color=RANGE_COLOR, grid3d_width=200, + grid3d_depth=80, grid3d_shading='lambert') + assert "lambert" in bar3d._repr_html_() + + # bar3D rotate automatically + bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) + bar3d.add("", X_TIME, Y_WEEK, [[d[1], d[0], d[2]] for d in data], + is_visualmap=True, visual_range=[0, 20], + visual_range_color=RANGE_COLOR, grid3d_width=200, + grid3d_depth=80, is_grid3d_rotate=True) + bar3d.render() + + # bar3D rotate automatically speedup + bar3d = Bar3D("3D 柱状图示例", width=1200, height=600) + bar3d.add("", X_TIME, Y_WEEK, [[d[1], d[0], d[2]] for d in data], + is_visualmap=True, visual_range=[0, 20], + visual_range_color=RANGE_COLOR, grid3d_width=200, + grid3d_depth=80, is_grid3d_rotate=True, + grid3d_rotate_speed=180) + bar3d.render() diff --git a/test/test_base.py b/test/test_base.py new file mode 100644 index 000000000..334101507 --- /dev/null +++ b/test/test_base.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +import os +import sys +import json +import codecs + +import pandas as pd +import numpy as np + +from nose.tools import eq_ +from pyecharts import Bar, Map + + +TITLE = "柱状图数据堆叠示例" + + +def create_a_bar(title): + attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] + v1 = [5, 20, 36, 10, 75, 90] + v2 = [10, 25, 8, 60, 20, 80] + bar = Bar(title) + bar.add("商家A", attr, v1, is_stack=True) + bar.add("商家B", attr, v2, is_stack=True) + return bar + + +def test_embed_option(): + bar = create_a_bar(TITLE) + html = bar.render_embed() + json_encoded_title = json.dumps(TITLE) + assert json_encoded_title in html + assert "" not in html + assert "" not in html + + +def test_notebook_render(): + bar = create_a_bar(TITLE) + html = bar._repr_html_() + json_encoded_title = json.dumps(TITLE) + assert json_encoded_title in html + assert "require.config" in html + assert "function(ec)" in html + + +def test_notebook_dom(): + bar = create_a_bar(TITLE) + html = bar._render_notebook_dom_() + assert bar._chart_id in html + assert str(bar._width) in html + assert str(bar._height) in html + assert "" in actual_content + assert TEST_PAGE_TITLE in actual_content + # test the optimization + assert "registerMap('china'," not in actual_content + assert "registerMap('world'," not in actual_content + echarts_position = actual_content.find('exports.echarts') + guangdong_position = actual_content.find(json.dumps('广东')) + assert echarts_position < guangdong_position + + +def test_page_get_js_dependencies(): + page = create_three() + dependencies = page.get_js_dependencies() + eq_(dependencies[0], 'echarts.min') + assert 'guangdong' in dependencies + assert 'echarts-gl.min' in dependencies + eq_(len(dependencies), 3) + + +def test_page_embed(): + page = create_three() + html = page.render_embed() + assert '' not in html + assert json.dumps("柱状图数据堆叠示例") in html + + +def test_page_in_notebook(): + page = create_three() + html = page._repr_html_() + + assert 'echartsgl' in html + assert 'echarts' in html + assert 'guangdong' in html + # find the appearing postion of echarts.min in html + echarts_position = html.find('echarts.min') + # find the appearing postion of guangdong in html + guangdong_position = html.find('guangdong') + assert echarts_position < guangdong_position + + +def test_more(): + page = Page() + + # line + attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + line = Line("折线图示例") + line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], + mark_point=["max", "min"], mark_line=["average"]) + line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], + mark_point=["max", "min"], mark_line=["average"]) + page.add(line) + + # pie + attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] + v1 = [11, 12, 13, 10, 10, 10] + pie = Pie("饼图-圆环图示例", title_pos='center') + pie.add("", attr, v1, radius=[40, 75], label_text_color=None, + is_label_show=True, legend_orient='vertical', legend_pos='left') + page.add(pie) + + # kline + v1 = [[2320.26, 2320.26, 2287.3, 2362.94], + [2300, 2291.3, 2288.26, 2308.38], + [2295.35, 2346.5, 2295.35, 2345.92], + [2347.22, 2358.98, 2337.35, 2363.8], + [2360.75, 2382.48, 2347.89, 2383.76], + [2383.43, 2385.42, 2371.23, 2391.82], + [2377.41, 2419.02, 2369.57, 2421.15], + [2425.92, 2428.15, 2417.58, 2440.38], + [2411, 2433.13, 2403.3, 2437.42], + [2432.68, 2334.48, 2427.7, 2441.73], + [2430.69, 2418.53, 2394.22, 2433.89], + [2416.62, 2432.4, 2414.4, 2443.03], + [2441.91, 2421.56, 2418.43, 2444.8], + [2420.26, 2382.91, 2373.53, 2427.07], + [2383.49, 2397.18, 2370.61, 2397.94], + [2378.82, 2325.95, 2309.17, 2378.82], + [2322.94, 2314.16, 2308.76, 2330.88], + [2320.62, 2325.82, 2315.01, 2338.78], + [2313.74, 2293.34, 2289.89, 2340.71], + [2297.77, 2313.22, 2292.03, 2324.63], + [2322.32, 2365.59, 2308.92, 2366.16], + [2364.54, 2359.51, 2330.86, 2369.65], + [2332.08, 2273.4, 2259.25, 2333.54], + [2274.81, 2326.31, 2270.1, 2328.14], + [2333.61, 2347.18, 2321.6, 2351.44], + [2340.44, 2324.29, 2304.27, 2352.02], + [2326.42, 2318.61, 2314.59, 2333.67], + [2314.68, 2310.59, 2296.58, 2320.96], + [2309.16, 2286.6, 2264.83, 2333.29], + [2282.17, 2263.97, 2253.25, 2286.33], + [2255.77, 2270.28, 2253.31, 2276.22]] + kline = Kline("K 线图示例") + kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], + v1, is_datazoom_show=True) + page.add(kline) + + # radar + schema = [ + ("销售", 6500), ("管理", 16000), ("信息技术", 30000), + ("客服", 38000), ("研发", 52000), ("市场", 25000) + ] + v1 = [[4300, 10000, 28000, 35000, 50000, 19000]] + v2 = [[5000, 14000, 28000, 31000, 42000, 21000]] + radar = Radar("雷达图示例") + radar.config(schema) + radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True) + radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False, + legend_selectedmode='single') + page.add(radar) + + # scatter3d + import random + data = [ + [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] for _ in range(80) + ] + scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) + scatter3D.add("", data, is_visualmap=True, visual_range_color=RANGE_COLOR) + page.add(scatter3D) + + # wordcloud + name = [ + 'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', + 'Charter Communications', 'Chick Fil A', 'Planet Fitness', + 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', + 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', + 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break' + ] + value = [ + 10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, + 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265 + ] + wordcloud = WordCloud(width=1300, height=620) + wordcloud.add("", name, value, word_size_range=[30, 100], rotate_step=66) + page.add(wordcloud) + + # liquid + liquid = Liquid("水球图示例") + liquid.add("Liquid", [0.6]) + page.add(liquid) + page.render() diff --git a/test/test_parallel.py b/test/test_parallel.py index 58482e9c7..2de3b6c90 100644 --- a/test/test_parallel.py +++ b/test/test_parallel.py @@ -1,7 +1,32 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + from pyecharts import Parallel + def test_parallel(): - schema = ["data", "AQI", "PM2.5", "PM10", "CO", "NO2", "SO2", "等级"] + # parallel base + schema = ["data", "AQI", "PM2.5", "PM10", "CO", "NO2"] + data = [ + [1, 91, 45, 125, 0.82, 34], + [2, 65, 27, 78, 0.86, 45, ], + [3, 83, 60, 84, 1.09, 73], + [4, 109, 81, 121, 1.28, 68], + [5, 106, 77, 114, 1.07, 55], + [6, 109, 81, 121, 1.28, 68], + [7, 106, 77, 114, 1.07, 55], + [8, 89, 65, 78, 0.86, 51, 26], + [9, 53, 33, 47, 0.64, 50, 17], + [10, 80, 55, 80, 1.01, 75, 24], + [11, 117, 81, 124, 1.03, 45] + ] + parallel = Parallel("平行坐标系-默认指示器") + parallel.config(schema) + parallel.add("parallel", data, is_random=True) + parallel.render() + + # parallel user define c_schema = [ {"dim": 0, "name": "data"}, {"dim": 1, "name": "AQI"}, @@ -10,7 +35,9 @@ def test_parallel(): {"dim": 4, "name": "CO"}, {"dim": 5, "name": "NO2"}, {"dim": 6, "name": "CO2"}, - {"dim": 7, "name": "等级", "type": "category", "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']}, + {"dim": 7, "name": "等级", + "type": "category", + "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']} ] data = [ [1, 91, 45, 125, 0.82, 34, 23, "良"], @@ -27,11 +54,8 @@ def test_parallel(): [12, 99, 71, 142, 1.1, 62, 42, "良"], [13, 95, 69, 130, 1.28, 74, 50, "良"], [14, 116, 87, 131, 1.47, 84, 40, "轻度污染"] - ] - parallel = Parallel("平行坐标系") - # parallel.config(schema) + parallel = Parallel("平行坐标系-用户自定义指示器") parallel.config(c_schema=c_schema) parallel.add("parallel", data) - parallel.show_config() - parallel.render() \ No newline at end of file + parallel.render() diff --git a/test/test_pie.py b/test/test_pie.py index 840702b11..64f3b65e8 100644 --- a/test/test_pie.py +++ b/test/test_pie.py @@ -1,12 +1,84 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + from pyecharts import Pie + def test_pie(): + # pie default attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [11, 12, 13, 10, 10, 10] + pie = Pie("饼图示例") + pie.add("", attr, v1, is_label_show=True) + pie.render() + + # pie legend_orient 'vertical'&legend_pos 'left' + v1 = [11, 12, 13, 10, 10, 10] + pie = Pie("饼图-圆环图示例", title_pos='center') + pie.add("", attr, v1, radius=[40, 75], label_text_color=None, + is_label_show=True, legend_orient='vertical', legend_pos='left') + pie.render() + + # pie rose type + v1 = [11, 12, 13, 10, 10, 10] v2 = [19, 21, 32, 20, 20, 33] + pie = Pie("饼图-玫瑰图示例", title_pos='center', width=900) + pie.add("商品A", attr, v1, center=[25, 50], is_random=True, + radius=[30, 75], rosetype='radius') + pie.add("商品B", attr, v2, center=[75, 50], is_random=True, + radius=[30, 75], rosetype='area', + is_legend_show=False, is_label_show=True) + pie.render() + + # pie radius + pie = Pie("饼图示例", title_pos='center', width=1000, height=600) + pie.add("", ['A', 'B', 'C', 'D', 'E', 'F'], [335, 321, 234, 135, 251, 148], + radius=[40, 55], is_label_show=True) + pie.add("", ['H', 'I', 'J'], [335, 679, 204], radius=[0, 30], + legend_orient='vertical', legend_pos='left') + pie.render() + + +def test_pie_multiple(): + import random + attr = ['A', 'B', 'C', 'D', 'E', 'F'] + pie = Pie("饼图示例", width=1000, height=600) + pie.add("", attr, [random.randint(0, 100) for _ in range(6)], + radius=[50, 55], center=[25, 50], is_random=True) + pie.add("", attr, [random.randint(20, 100) for _ in range(6)], + radius=[0, 45], center=[25, 50], rosetype='area') + pie.add("", attr, [random.randint(0, 100) for _ in range(6)], + radius=[50, 55], center=[65, 50], is_random=True) + pie.add("", attr, [random.randint(20, 100) for _ in range(6)], + radius=[0, 45], center=[65, 50], rosetype='radius') + pie.render() - pie = Pie() - # pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype=True, is_label_show=True) - pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype=True, is_legend_show=False) - pie.show_config() - pie.render() \ No newline at end of file + # Pie multiple + pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center') + pie_style = { + "label_pos": "center", + "is_label_show": True, + "label_text_color": None + } + pie.add("", ["剧情", ""], [25, 75], center=[10, 30], + radius=[18, 24], **pie_style) + pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], + radius=[18, 24], **pie_style) + pie.add("", ["爱情", ""], [14, 86], center=[50, 30], + radius=[18, 24], **pie_style) + pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], + radius=[18, 24], **pie_style) + pie.add("", ["冒险", ""], [27, 73], center=[90, 30], + radius=[18, 24], **pie_style) + pie.add("", ["动作", ""], [15, 85], center=[10, 70], + radius=[18, 24], **pie_style) + pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], + radius=[18, 24], **pie_style) + pie.add("", ["科幻", ""], [26, 74], center=[50, 70], + radius=[18, 24], **pie_style) + pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], + radius=[18, 24], **pie_style) + pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], + radius=[18, 24], legend_top="center", **pie_style) + pie.render() diff --git a/test/test_polar.py b/test/test_polar.py index 842828b84..c194f1d8e 100644 --- a/test/test_polar.py +++ b/test/test_polar.py @@ -1,6 +1,59 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + from pyecharts import Polar + def test_polar(): + # polar type 'scatter' + import random + data = [(i, random.randint(1, 100)) for i in range(101)] + polar = Polar("极坐标系-散点图示例") + polar.add("", data, boundary_gap=False, type='scatter', + is_splitline_show=False, is_axisline_show=True) + assert '"type": "scatter"' in polar._repr_html_() + + # polar type 'scatter' + data_1 = [(10, random.randint(1, 100)) for i in range(300)] + data_2 = [(11, random.randint(1, 100)) for i in range(300)] + polar = Polar("极坐标系-散点图示例", width=1200, height=600) + polar.add("", data_1, type='scatter') + polar.add("", data_2, type='scatter') + polar.render() + + # polar type 'effectScatter' + data = [(i, random.randint(1, 100)) for i in range(10)] + polar = Polar("极坐标系-动态散点图示例", width=1200, height=600) + polar.add("", data, type='effectScatter', effect_scale=10, + effect_period=5) + assert '"type": "effectScatter"' in polar._repr_html_() + + # polar type 'barRadius' + radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) + polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, + type='barRadius', is_stack=True) + polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, + type='barRadius', is_stack=True) + polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, + type='barRadius', is_stack=True) + polar.render() + + # polar type 'barAngle' + radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600) + polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, + type='barAngle', is_stack=True) + polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, + type='barAngle', is_stack=True) + polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, + type='barAngle', is_stack=True) + polar.render() + + +def test_polar_draw(): + # draw love import math data = [] for i in range(101): @@ -8,7 +61,41 @@ def test_polar(): r = 5 * (1 + math.sin(theta / 180 * math.pi)) data.append([r, theta]) hour = [i for i in range(1, 25)] - polar = Polar(width=1200, height=600) - polar.add("For my honey", data, angle_data=hour, boundary_gap=False) - polar.show_config() + polar = Polar("极坐标系示例", width=1200, height=600) + polar.add("Love", data, angle_data=hour, boundary_gap=False, start_angle=0) + polar.render() + + # draw flower + data = [] + for i in range(361): + t = i / 180 * math.pi + r = math.sin(2 * t) * math.cos(2 * t) + data.append([r, i]) + polar = Polar("极坐标系示例", width=1200, height=600) + polar.add("Flower", data, start_angle=0, symbol=None, axis_range=[0, None]) + polar.render() + + # draw color flower + data = [] + for i in range(361): + t = i / 180 * math.pi + r = math.sin(2 * t) * math.cos(2 * t) + data.append([r, i]) + polar = Polar("极坐标系示例", width=1200, height=600) + polar.add("Color-Flower", data, start_angle=0, symbol=None, + axis_range=[0, None], area_color="#f71f24", area_opacity=0.6) + polar.render() + + # draw snail + data = [] + for i in range(5): + for j in range(101): + theta = j / 100 * 360 + alpha = i * 360 + theta + r = math.pow(math.e, 0.003 * alpha) + data.append([r, theta]) + polar = Polar("极坐标系示例") + polar.add("", data, symbol_size=0, symbol='circle', start_angle=-25, + is_radiusaxis_show=False, area_color="#f3c5b3", + area_opacity=0.5, is_angleaxis_show=False) polar.render() diff --git a/test/test_radar.py b/test/test_radar.py index 24abb98ed..08ca2df1c 100644 --- a/test/test_radar.py +++ b/test/test_radar.py @@ -1,24 +1,26 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + from pyecharts import Radar -def test_radar(): + +def test_radar_default_schema(): schema = [ - ("销售", 6500), - ("管理", 16000), - ("信息技术", 30000), - ("客服", 38000), - ("研发", 52000), - ("市场", 25000) + ("销售", 6500), ("管理", 16000), ("信息技术", 30000), + ("客服", 38000), ("研发", 52000), ("市场", 25000) ] v1 = [[4300, 10000, 28000, 35000, 50000, 19000]] v2 = [[5000, 14000, 28000, 31000, 42000, 21000]] - - radar = Radar() - radar.config(schema, split_area_show=True) - radar.add("预算分配", v1, label_color=["#000"]) - radar.add("实际开销", v2, label_color=["#4e79a7"]) - radar.show_config() + radar = Radar("雷达图示例") + radar.config(schema) + radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True) + radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False, + legend_selectedmode='single') radar.render() + +def test_radar_user_define_schema(): value_bj = [ [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2], @@ -85,11 +87,30 @@ def test_radar(): [174, 131, 174, 1.55, 108, 50, 30], [187, 143, 201, 1.39, 89, 53, 31] ] - schema = [("AQI", 300), ("PM2.5", 250), ("PM10", 300), ("CO", 5), ("NO2", 200), ("SO2", 100)] + c_schema = [ + {"name": "AQI", "max": 300, "min": 5}, + {"name": "PM2.5", "max": 250, "min": 20}, + {"name": "PM10", "max": 300, "min": 5}, + {"name": "CO", "max": 5}, + {"name": "NO2", "max": 200}, + {"name": "SO2", "max": 100} + ] + + # legend selected mode 'single' + radar = Radar("雷达图示例") + radar.config(c_schema=c_schema, shape='circle') + radar.add("北京", value_bj, item_color="#f9713c", symbol=None) + radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None, + legend_selectedmode='single') + html_content = radar._repr_html_() + assert 'single' in html_content + assert 'multiple' not in html_content - radar2 = Radar() - radar2.config(schema) - radar2.add("北京", value_bj, item_color="#f9713c", symbol=None) - radar2.add("上海", value_sh, item_color="#b3e4a1", symbol=None) - radar2.show_config() - radar2.render() \ No newline at end of file + # legend selected mode 'single' + radar = Radar("雷达图示例") + radar.config(c_schema=c_schema, shape='circle') + radar.add("北京", value_bj, item_color="#f9713c", symbol=None) + radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None) + html_content = radar._repr_html_() + assert 'multiple' in html_content + assert 'single' not in html_content diff --git a/test/test_sankey.py b/test/test_sankey.py new file mode 100644 index 000000000..fda4b7e4f --- /dev/null +++ b/test/test_sankey.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals +import sys +import os + +from pyecharts import Sankey + +PY2 = sys.version_info[0] == 2 + + +def test_sankey(): + # sankey default + nodes = [ + {'name': 'category1'}, {'name': 'category2'}, {'name': 'category3'}, + {'name': 'category4'}, {'name': 'category5'}, {'name': 'category6'}, + ] + + links = [ + {'source': 'category1', 'target': 'category2', 'value': 10}, + {'source': 'category2', 'target': 'category3', 'value': 15}, + {'source': 'category3', 'target': 'category4', 'value': 20}, + {'source': 'category5', 'target': 'category6', 'value': 25} + ] + sankey = Sankey("桑基图示例", width=1200, height=600) + sankey.add("sankey", nodes, links, line_opacity=0.2, + line_curve=0.5, line_color='source', is_label_show=True, + label_pos='right') + sankey.render() + + # sankey official data + import json + if PY2: + import codecs + with codecs.open(os.path.join("..", "json", "energy.json"), "rb") as f: + j = json.load(f) + else: + with open(os.path.join("..", "json", "energy.json"), "r", encoding="utf-8") as f: + j = json.load(f) + sankey = Sankey("桑基图示例", width=1200, height=600) + sankey.add("sankey", nodes=j['nodes'], links=j['links'], line_opacity=0.2, + line_curve=0.5, line_color='source', + is_label_show=True, label_pos='right') + sankey.render() diff --git a/test/test_scatter.py b/test/test_scatter.py index 1c2ab1ece..146a8338a 100644 --- a/test/test_scatter.py +++ b/test/test_scatter.py @@ -1,13 +1,101 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + from pyecharts import Scatter -def test_scatter(): + +def test_scatter_xaxis_type(): + # xAxis type 'value' + v1 = [10, 20, 30, 40, 50, 60] + v2 = [10, 20, 30, 40, 50, 60] + scatter = Scatter("散点图示例") + scatter.add("A", v1, v2) + scatter.add("B", v1[::-1], v2) + html_content = scatter._repr_html_() + assert '"type": "value"' in html_content + assert '"type": "category"' not in html_content + + # xAxis type 'category' + scatter = Scatter("散点图示例") + scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2) + scatter.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], + xaxis_type="category") + assert '"type": "category"' in scatter._repr_html_() + + +def test_scatter_visualmap(): + # visual type 'color' v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] + scatter = Scatter("散点图示例") + scatter.add("A", v1, v2) + scatter.add("B", v1[::-1], v2, is_visualmap=True) + scatter.render() + + # visual type 'size' + scatter = Scatter("散点图示例") + # scatter.add("A", v1, v2) + scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', + visual_range_size=[20, 80]) + scatter.render() + + +def test_scatter_draw_picture(): + # draw pyecharts + scatter = Scatter("散点图示例") + v1, v2 = scatter.draw("../images/pyecharts-0.png") + scatter.add("pyecharts", v1, v2, is_random=True) + scatter.render() + + # draw love + scatter = Scatter("散点图示例", width=800, height=480) + v1, v2 = scatter.draw("../images/love.png") + scatter.add("Love", v1, v2) + scatter.render() + + # draw a hot red bra + scatter = Scatter("散点图示例", width=1000, height=480) + v1, v2 = scatter.draw("../images/cup.png") + scatter.add("Cup", v1, v2) + scatter.render() + + # draw a sexy black bra + scatter = Scatter("散点图示例", width=1000, height=480) + v1, v2 = scatter.draw("../images/cup.png") + scatter.add("Cup", v1, v2, label_color=["#000"]) + scatter.render() + + +def test_scatter_multi_dimension(): + data = [ + [28604, 77, 17096869], + [31163, 77.4, 27662440], + [1516, 68, 1154605773], + [13670, 74.7, 10582082], + [28599, 75, 4986705], + [29476, 77.1, 56943299], + [31476, 75.4, 78958237], + [28666, 78.1, 254830], + [1777, 57.7, 870601776], + [29550, 79.1, 122249285], + [2076, 67.9, 20194354], + [12087, 72, 42972254], + [24021, 75.4, 3397534], + [43296, 76.8, 4240375], + [10088, 70.8, 38195258], + [19349, 69.6, 147568552], + [10670, 67.3, 53994605], + [26424, 75.7, 57110117], + [37062, 75.4, 252847810] + ] - scatter = Scatter() - # v1, v2 = scatter.draw(r"e:\python\pyecharts\_images\boy.png") - scatter.add("boy", v1, v2) - # scatter.add("a", v1, v2) - # scatter.add("b", v1[::-1], v2) - scatter.show_config() - scatter.render() \ No newline at end of file + x_lst = [v[0] for v in data] + y_lst = [v[1] for v in data] + extra_data = [v[2] for v in data] + sc = Scatter() + sc.add("scatter", x_lst, y_lst, extra_data=extra_data, is_visualmap=True, + visual_dimension=2, visual_orient='horizontal', + visual_type='size', visual_range=[254830, 1154605773], + visual_text_color='#000') + sc.render() diff --git a/test/test_scatter3D.py b/test/test_scatter3D.py new file mode 100644 index 000000000..bd4302dc6 --- /dev/null +++ b/test/test_scatter3D.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import Scatter3D +from test.constants import RANGE_COLOR + + +def test_scatter3d(): + import random + data = [ + [random.randint(0, 100), + random.randint(0, 100), + random.randint(0, 100)] for _ in range(80) + ] + scatter3d = Scatter3D("3D 散点图示例", width=1200, height=600) + scatter3d.add("", data, is_visualmap=True, + visual_range_color=RANGE_COLOR) + scatter3d.render() diff --git a/test/test_template.py b/test/test_template.py new file mode 100644 index 000000000..380d20c02 --- /dev/null +++ b/test/test_template.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from nose.tools import eq_, raises +from pyecharts.template import ensure_echarts_is_in_the_front + + +def test_echarts_postion_in_dependency_list(): + test_sequence = set(['guangdong', 'shanghai', 'echarts']) + result = ensure_echarts_is_in_the_front(test_sequence) + eq_(result[0], 'echarts') + + +def test_echarts_postion_with_one_element_set(): + test_sequence = set(['echarts']) + result = ensure_echarts_is_in_the_front(test_sequence) + eq_(result[0], 'echarts') + + +@raises(Exception) +def test_echarts_postion_with_nothing(): + test_sequence = set() + ensure_echarts_is_in_the_front(test_sequence) diff --git a/test/test_themeriver.py b/test/test_themeriver.py new file mode 100644 index 000000000..aeb95957b --- /dev/null +++ b/test/test_themeriver.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from pyecharts import ThemeRiver + + +def test_themeriver(): + data = [ + ['2015/11/08', 10, 'DQ'], ['2015/11/09', 15, 'DQ'], ['2015/11/10', 35, 'DQ'], + ['2015/11/14', 7, 'DQ'], ['2015/11/15', 2, 'DQ'], ['2015/11/16', 17, 'DQ'], + ['2015/11/17', 33, 'DQ'], ['2015/11/18', 40, 'DQ'], ['2015/11/19', 32, 'DQ'], + ['2015/11/20', 26, 'DQ'], ['2015/11/21', 35, 'DQ'], ['2015/11/22', 40, 'DQ'], + ['2015/11/23', 32, 'DQ'], ['2015/11/24', 26, 'DQ'], ['2015/11/25', 22, 'DQ'], + ['2015/11/08', 35, 'TY'], ['2015/11/09', 36, 'TY'], ['2015/11/10', 37, 'TY'], + ['2015/11/11', 22, 'TY'], ['2015/11/12', 24, 'TY'], ['2015/11/13', 26, 'TY'], + ['2015/11/14', 34, 'TY'], ['2015/11/15', 21, 'TY'], ['2015/11/16', 18, 'TY'], + ['2015/11/17', 45, 'TY'], ['2015/11/18', 32, 'TY'], ['2015/11/19', 35, 'TY'], + ['2015/11/20', 30, 'TY'], ['2015/11/21', 28, 'TY'], ['2015/11/22', 27, 'TY'], + ['2015/11/23', 26, 'TY'], ['2015/11/24', 15, 'TY'], ['2015/11/25', 30, 'TY'], + ['2015/11/26', 35, 'TY'], ['2015/11/27', 42, 'TY'], ['2015/11/28', 42, 'TY'], + ['2015/11/08', 21, 'SS'], ['2015/11/09', 25, 'SS'], ['2015/11/10', 27, 'SS'], + ['2015/11/11', 23, 'SS'], ['2015/11/12', 24, 'SS'], ['2015/11/13', 21, 'SS'], + ['2015/11/14', 35, 'SS'], ['2015/11/15', 39, 'SS'], ['2015/11/16', 40, 'SS'], + ['2015/11/17', 36, 'SS'], ['2015/11/18', 33, 'SS'], ['2015/11/19', 43, 'SS'], + ['2015/11/20', 40, 'SS'], ['2015/11/21', 34, 'SS'], ['2015/11/22', 28, 'SS'], + ['2015/11/14', 7, 'QG'], ['2015/11/15', 2, 'QG'], ['2015/11/16', 17, 'QG'], + ['2015/11/17', 33, 'QG'], ['2015/11/18', 40, 'QG'], ['2015/11/19', 32, 'QG'], + ['2015/11/20', 26, 'QG'], ['2015/11/21', 35, 'QG'], ['2015/11/22', 40, 'QG'], + ['2015/11/23', 32, 'QG'], ['2015/11/24', 26, 'QG'], ['2015/11/25', 22, 'QG'], + ['2015/11/26', 16, 'QG'], ['2015/11/27', 22, 'QG'], ['2015/11/28', 10, 'QG'], + ['2015/11/08', 10, 'SY'], ['2015/11/09', 15, 'SY'], ['2015/11/10', 35, 'SY'], + ['2015/11/11', 38, 'SY'], ['2015/11/12', 22, 'SY'], ['2015/11/13', 16, 'SY'], + ['2015/11/14', 7, 'SY'], ['2015/11/15', 2, 'SY'], ['2015/11/16', 17, 'SY'], + ['2015/11/17', 33, 'SY'], ['2015/11/18', 40, 'SY'], ['2015/11/19', 32, 'SY'], + ['2015/11/20', 26, 'SY'], ['2015/11/21', 35, 'SY'], ['2015/11/22', 4, 'SY'], + ['2015/11/23', 32, 'SY'], ['2015/11/24', 26, 'SY'], ['2015/11/25', 22, 'SY'], + ['2015/11/26', 16, 'SY'], ['2015/11/27', 22, 'SY'], ['2015/11/28', 10, 'SY'], + ['2015/11/08', 10, 'DD'], ['2015/11/09', 15, 'DD'], ['2015/11/10', 35, 'DD'], + ['2015/11/11', 38, 'DD'], ['2015/11/12', 22, 'DD'], ['2015/11/13', 16, 'DD'], + ['2015/11/14', 7, 'DD'], ['2015/11/15', 2, 'DD'], ['2015/11/16', 17, 'DD'], + ['2015/11/17', 33, 'DD'], ['2015/11/18', 4, 'DD'], ['2015/11/19', 32, 'DD'], + ['2015/11/20', 26, 'DD'], ['2015/11/21', 35, 'DD'], ['2015/11/22', 40, 'DD'], + ['2015/11/23', 32, 'DD'], ['2015/11/24', 26, 'DD'], ['2015/11/25', 22, 'DD'] + ] + tr = ThemeRiver("主题河流图示例图") + tr.add(['DQ', 'TY', 'SS', 'QG', 'SY', 'DD'], data, is_label_show=True) + tr.render() diff --git a/test/test_timeline.py b/test/test_timeline.py new file mode 100644 index 000000000..107829302 --- /dev/null +++ b/test/test_timeline.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +from random import randint + +from pyecharts import Bar, Pie, Line, Overlap +from pyecharts.custom.timeline import Timeline + + +def test_timeline_bar(): + attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] + bar_1 = Bar("2012 年销量", "数据纯属虚构") + bar_1.add("春季", attr, [randint(10, 100) for _ in range(6)]) + bar_1.add("夏季", attr, [randint(10, 100) for _ in range(6)]) + bar_1.add("秋季", attr, [randint(10, 100) for _ in range(6)]) + bar_1.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + + bar_2 = Bar("2013 年销量", "数据纯属虚构") + bar_2.add("春季", attr, [randint(10, 100) for _ in range(6)]) + bar_2.add("夏季", attr, [randint(10, 100) for _ in range(6)]) + bar_2.add("秋季", attr, [randint(10, 100) for _ in range(6)]) + bar_2.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + + bar_3 = Bar("2014 年销量", "数据纯属虚构") + bar_3.add("春季", attr, [randint(10, 100) for _ in range(6)]) + bar_3.add("夏季", attr, [randint(10, 100) for _ in range(6)]) + bar_3.add("秋季", attr, [randint(10, 100) for _ in range(6)]) + bar_3.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + + bar_4 = Bar("2015 年销量", "数据纯属虚构") + bar_4.add("春季", attr, [randint(10, 100) for _ in range(6)]) + bar_4.add("夏季", attr, [randint(10, 100) for _ in range(6)]) + bar_4.add("秋季", attr, [randint(10, 100) for _ in range(6)]) + bar_4.add("冬季", attr, [randint(10, 100) for _ in range(6)]) + + bar_5 = Bar("2016 年销量", "数据纯属虚构") + bar_5.add("春季", attr, [randint(10, 100) for _ in range(6)]) + bar_5.add("夏季", attr, [randint(10, 100) for _ in range(6)]) + bar_5.add("秋季", attr, [randint(10, 100) for _ in range(6)]) + bar_5.add("冬季", attr, [randint(10, 100) for _ in range(6)], + is_legend_show=True) + + timeline = Timeline(is_auto_play=True, timeline_bottom=0) + timeline.add(bar_1, '2012 年') + timeline.add(bar_2, '2013 年') + timeline.add(bar_3, '2014 年') + timeline.add(bar_4, '2015 年') + timeline.add(bar_5, '2016 年') + timeline.render() + + +def test_timeline_pie(): + attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] + style = { + "is_label_show": True, + "radius": [30, 55], + "rosetype": 'radius' + } + pie_1 = Pie("2012 年销量比例", "数据纯属虚构") + pie_1.add("秋季", attr, [randint(10, 100) for _ in range(6)], **style) + + pie_2 = Pie("2013 年销量比例", "数据纯属虚构") + pie_2.add("秋季", attr, [randint(10, 100) for _ in range(6)], **style) + + pie_3 = Pie("2014 年销量比例", "数据纯属虚构") + pie_3.add("秋季", attr, [randint(10, 100) for _ in range(6)], **style) + + pie_4 = Pie("2015 年销量比例", "数据纯属虚构") + pie_4.add("秋季", attr, [randint(10, 100) for _ in range(6)], **style) + + pie_5 = Pie("2016 年销量比例", "数据纯属虚构") + pie_5.add("秋季", attr, [randint(10, 100) for _ in range(6)], **style) + + timeline = Timeline(is_auto_play=True, timeline_bottom=0) + timeline.add(pie_1, '2012 年') + timeline.add(pie_2, '2013 年') + timeline.add(pie_3, '2014 年') + timeline.add(pie_4, '2015 年') + timeline.add(pie_5, '2016 年') + timeline.render() + + +def test_timeline_bar_line(): + attr = ["{}月".format(i) for i in range(1, 7)] + bar = Bar("1 月份数据", "数据纯属虚构") + bar.add("bar", attr, [randint(10, 50) for _ in range(6)]) + line = Line() + line.add("line", attr, [randint(50, 80) for _ in range(6)]) + overlap_0 = Overlap() + overlap_0.add(bar) + overlap_0.add(line) + + bar_1 = Bar("2 月份数据", "数据纯属虚构") + bar_1.add("bar", attr, [randint(10, 50) for _ in range(6)]) + line_1 = Line() + line_1.add("line", attr, [randint(50, 80) for _ in range(6)]) + overlap_1 = Overlap() + overlap_1.add(bar_1) + overlap_1.add(line_1) + + bar_2 = Bar("3 月份数据", "数据纯属虚构") + bar_2.add("bar", attr, [randint(10, 50) for _ in range(6)]) + line_2 = Line() + line_2.add("line", attr, [randint(50, 80) for _ in range(6)]) + overlap_2 = Overlap() + overlap_2.add(bar_2) + overlap_2.add(line_2) + + bar_3 = Bar("4 月份数据", "数据纯属虚构") + bar_3.add("bar", attr, [randint(10, 50) for _ in range(6)]) + line_3 = Line() + line_3.add("line", attr, [randint(50, 80) for _ in range(6)]) + overlap_3 = Overlap() + overlap_3.add(bar_3) + overlap_3.add(line_3) + + bar_4 = Bar("5 月份数据", "数据纯属虚构") + bar_4.add("bar", attr, [randint(10, 50) for _ in range(6)]) + line_4 = Line() + line_4.add("line", attr, [randint(50, 80) for _ in range(6)]) + overlap_4 = Overlap() + overlap_4.add(bar_4) + overlap_4.add(line_4) + + timeline = Timeline(timeline_bottom=0) + timeline.add(overlap_0.chart, '1 月') + timeline.add(overlap_1.chart, '2 月') + timeline.add(overlap_2.chart, '3 月') + timeline.add(overlap_3.chart, '4 月') + timeline.add(overlap_4.chart, '5 月') + timeline.render() diff --git a/test/test_treemap.py b/test/test_treemap.py new file mode 100644 index 000000000..fbab0761b --- /dev/null +++ b/test/test_treemap.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals + +import sys + +from pyecharts import TreeMap + +PY2 = sys.version_info[0] == 2 + + +def test_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", + }] + }]} + ] + + # 默认示例 + treemap = TreeMap("树图示例", width=1200, height=600) + treemap.add("演示数据", data, is_label_show=True, label_pos='inside') + treemap.render() + + # 下钻示例 + treemap = TreeMap("树图示例", width=1200, height=600) + treemap.add("演示数据", data, is_label_show=True, label_pos='inside', + treemap_left_depth=1) + treemap.render() + + +def test_treemap_big_data(): + treemap = TreeMap("树图示例", width=1200, height=600) + import os + import json + if PY2: + import codecs + with codecs.open(os.path.join("..", "json", "treemap.json"), "rb") as f: + data = json.load(f) + else: + with open(os.path.join("..", "json", "treemap.json"), "r", encoding="utf-8") as f: + data = json.load(f) + treemap.add("演示数据", data, is_label_show=True, label_pos='inside') + treemap.render() diff --git a/test/test_utils.py b/test/test_utils.py new file mode 100644 index 000000000..025c311bf --- /dev/null +++ b/test/test_utils.py @@ -0,0 +1,42 @@ +# coding=utf-8 +from __future__ import unicode_literals + +import os +import codecs + + +from nose.tools import eq_ +from pyecharts.utils import ( + freeze_js, + write_utf8_html_file, + get_resource_dir +) + + +def test_get_resource_dir(): + path = get_resource_dir('templates') + expected = os.path.join(os.getcwd(), '..', 'pyecharts', 'templates') + eq_(path, os.path.abspath(expected)) + + +def test_freeze_js(): + html_content = """ + + + + + + """ + + html_content = freeze_js(html_content) + assert 'exports.echarts' in html_content + assert 'echarts-wordcloud' in html_content + + +def test_write_utf8_html_file(): + content = "柱状图数据堆叠示例" + file_name = 'test.html' + write_utf8_html_file(file_name, content) + with codecs.open(file_name, 'r', 'utf-8') as f: + actual_content = f.read() + eq_(content, actual_content) diff --git a/test/test_wordcloud.py b/test/test_wordcloud.py index 41896fa60..895f5ee32 100644 --- a/test/test_wordcloud.py +++ b/test/test_wordcloud.py @@ -1,14 +1,27 @@ +#!/usr/bin/env python +# coding=utf-8 + from pyecharts import WordCloud + def test_wordcloud(): - name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', - 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', - 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', - 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break'] - value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, - 550, 462, 366, 360, 282, 273, 265] + name = [ + 'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', + 'Charter Communications', 'Chick Fil A', 'Planet Fitness', + 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', + 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', + 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break' + ] + value = [ + 10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, + 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265 + ] + # wordCloud default + wordcloud = WordCloud(width=1300, height=620) + wordcloud.add("", name, value, word_size_range=[30, 100], rotate_step=66) + assert "diamond" not in wordcloud._repr_html_() + # wordCloud shape diamond wordcloud = WordCloud(width=1300, height=620) - wordcloud.add("", name, value, word_size_range=[20, 100]) - wordcloud.show_config() - wordcloud.render() + wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond') + assert "diamond" in wordcloud._repr_html_()