当前pyecharts
版本为1.9.0
概述
datasets
包位于pyecharts
包顶级目录中,用于存放pyecharts
的内置数据集,并将数据集映射到固定的三个“全局”变量中。包结构如下:
├─datasets # 数据集包
│ │ city_coordinates.json # 省市县坐标集
│ │ countries_regions_db.json # 国家地区缩写
│ │ map_filename.json # 资源文件名称、路径映射表
│ │ __init__.py # 定义字典模糊查找类,管理附加组件
city_coordinates.json
datasets
包中的city_coordinates.json
文件存放着国内城市地理坐标数据,数据格式为{城市名称: [经度, 纬度}
,例如:
{
"阿城": [
126.58,
45.32
],
"阿克苏": [
80.19,
41.09
],
"阿勒泰": [
88.12,
47.5
],
"阿图什": [
76.08,
39.42
]
}
countries_regions_db.json
datasets
包中的countries_regions_db.json
文件存放着全球国家、地区的缩写信息,数据格式为{名称:缩写}
,例如:
{
"蒲隆地": "BI",
"圣卢西亚": "LC",
"巴巴多斯": "BB",
"安道尔": "AD",
}
map_filename.json
datasets
包中的map_filename.json
文件存放着pyecharts
资源文件名称与路径的映射关系,数据格式为{名称:[路径,扩展名]}
,例如:
{
"bulma": ["bulma.min", "css"],
"jquery": ["jquery.min", "js"],
"jquery-ui": ["jquery-ui.min", "js"],
"resize-sensor": ["ResizeSensor", "js"],
"echarts": ["echarts.min", "js"],
"echarts-gl": ["echarts-gl.min", "js"],
"echarts-liquidfill": ["echarts-liquidfill.min", "js"],
"echarts-wordcloud": ["echarts-wordcloud.min", "js"],
"bmap": ["bmap.min", "js"],
"chalk": ["themes/chalk", "js"],
"essos": ["themes/essos", "js"],
"halloween": ["themes/halloween", "js"],
"infographic": ["themes/infographic", "js"],
"macarons": ["themes/macarons", "js"],
"purple-passion": ["themes/purple-passion", "js"],
"roma": ["themes/roma", "js"],
"romantic": ["themes/romantic", "js"],
"shine": ["themes/shine", "js"],
"vintage": ["themes/vintage", "js"],
"walden": ["themes/walden", "js"],
"westeros": ["themes/westeros", "js"],
"wonderland": ["themes/wonderland", "js"],
"china": ["maps/china", "js"]
}
__init__.py
datasets
包中的__init__.py
文件结构如下,主要包含1个类,3个变量和3个函数。
FuzzyDict(dict)
类提供基础的数据结构支持,实现了字典键的模糊查找。疑似为pywinauto
库fuzzydict
模块中的FuzzyDict
类FILENAMES
变量为map_filename.json
反序列化后的结果,数据结构采用FuzzyDict
,便于模糊查找。COORDINATES
变量为city_coordinates.json
反序列化后的结果,数据结构采用FuzzyDict
,便于模糊查找。EXTRA
变量用于存储附加资源文件名与路径的映射关系。register_url(asset_url: str)
函数用于构造附加资源文件名与路径的映射关系,更新EXTRA
变量。register_files(asset_files: dict)
函数用于更新资源文件与路径的映射关系,更新FILENAMES
变量。register_coords(coords: dict)
函数用于更新地理坐标信息,更新COORDINATES
变量。
__init__.py
源码
__HERE = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(__HERE, "map_filename.json"), "r", encoding="utf8") as f:
FILENAMES: FuzzyDict = FuzzyDict()
for k, v in json.load(f).items():
FILENAMES[k] = v
with open(os.path.join(__HERE, "city_coordinates.json"), "r", encoding="utf8") as f:
COORDINATES: FuzzyDict = FuzzyDict()
for k, v in json.load(f).items():
COORDINATES[k] = v
EXTRA = {}
def register_url(asset_url: str):
if asset_url:
registry = asset_url + "/registry.json"
try:
contents = urllib.request.urlopen(registry).read()
contents = json.loads(contents)
except Exception as e:
raise e
files = {}
pinyin_names = set()
for name, pinyin in contents["PINYIN_MAP"].items():
file_name = contents["FILE_MAP"][pinyin]
files[name] = [file_name, "js"]
pinyin_names.add(pinyin)
for key, file_name in contents["FILE_MAP"].items():
if key not in pinyin_names:
# English names
files[key] = [file_name, "js"]
js_folder_name = contents["JS_FOLDER"]
if js_folder_name == "/":
js_file_prefix = f"{asset_url}/"
else:
js_file_prefix = f"{asset_url}/{js_folder_name}/"
EXTRA[js_file_prefix] = files
def register_files(asset_files: dict):
if asset_files:
FILENAMES.update(asset_files)
def register_coords(coords: dict):
if coords:
COORDINATES.update(coords)
案例:FuzzyDict(dict)
类应用
注意,FuzzyDict(dict)
类构造函数还有一个默认参数cutoff = 0.6
,当模糊匹配评分都低于0.6时会抛出异常!
from pyecharts.datasets import FuzzyDict,FILENAMES,EXTRA,COORDINATES
a={"hello" : "World", "Hiya" : 2, "Here you are" : 3}
fd = FuzzyDict()
fd.update(a)
# 模糊查找键
print(fd['Here you'])
print(FILENAMES['哈尔'])
print(COORDINATES['哈尔'])
输出为:
3
['maps/hei1_long2_jiang1_ha1_er3_bin1', 'js']
[126.63, 45.75]