疫情分布地图实现 — — pyecharts初探
准备工作
- 数据:此处通过爬虫爬取腾讯新闻的疫情数据
- 安装pyecharts库 打开cmd命令行窗口,通过 pip install pyecharts 来安装pyecharts包
#数据准备
此处以腾讯新闻的数据为例 通过抓包分析得到数据url = “https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5”
#导入requests包
import requests
import re
#导入pyecharts.charts模块的Map模块
from pyecharts.charts import Map
#数据爬取地址
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
#进行数据爬取
resp = requests.get(url)
#通过replace把数据中的\去掉
resp_new = resp.text.replace("\\","")
#通过正则表达式匹配出我们需要的内容
country_name = re.compile('"name":"(.*?)"',re.S).findall(resp_new)
country_confirm = re.compile('"nowConfirm":(.*?)\,').findall(resp_new)
#整合数据在一起
data = [[country_name[i],country_confirm[i]] for i in range(len(country_name)]
#创建地图
map = Map().add(series_name="国内疫情分布",
data_pair=data, #导入数据
maptype="china",#选择地图地区
is_map_symbol_show=False #是否显示各地区标记点
)
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))#是否在地图上显示地区名称
map.set_global_opts(title_opts=opts.TitleOpts(title="国内疫情分布"),
visualmap_opts= visualmap_opts=opts.VisualMapOpts(
# 是否显示视觉映射配置
is_show = True,
# 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!)
type_ = "color",
# 指定 visualMapPiecewise 组件的最小值。
min_ = 0,
# 指定 visualMapPiecewise 组件的最大值。
max_ = 100,
# 两端的文本,如['High', 'Low'],(自定义) range_text: Union[list, tuple] = None,
range_text = ['高', '低'],
# visualMap 组件过渡颜色 (可以自定义)(颜色从淡到深) range_color: Union[Sequence[str]] = None,
range_color = ['#CCEBFF','#eced86','#d0021b'],
# visualMap 组件过渡 symbol 大小.range_size: Union[Sequence[int]] = None,
range_size = None,
# visualMap 图元以及其附属物(如文字标签)的透明度。range_opacity: Optional[Numeric] = None,
range_opacity = None,
# 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
orient = 'vertical',
# visualMap 组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left = '10',
# visualMap 组件离容器右侧的距离(同上)。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_right = None,
# visualMap 组件离容器上侧的距离(同上)。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top = None,
# visualMap 组件离容器下侧的距离(同上)。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
pos_bottom = None,
# 对于连续型数据,自动平均切分成几段。默认为5段。连续数据的范围需要 max 和 min 来指定
split_number = 5,
# 指定取哪个系列的数据,默认取所有系列。series_index: Union[Numeric, Sequence, None] = None,
series_index = None,
# 组件映射维度Optional[Numeric]
dimension = None,
# 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
is_calculable = True,
# 是否为分段型
is_piecewise = False,
# 是否反转 visualMap 组件(默认False)
is_inverse = False,
# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
# pieces: [
# {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。
# {"min": 900, "max": 1500},
# {"min": 310, "max": 1000},
# {"min": 200, "max": 300},
# {"min": 10, "max": 200, "label": '10 到 200(自定义label)'},
# {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况
# {"max": 5} // 不指定 min,表示 min 为无限大(-Infinity)。
# ]
pieces = None,
# 定义 在选中范围外 的视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围)
# 可选的视觉元素有:
# symbol: 图元的图形类别。
# symbolSize: 图元的大小。
# color: 图元的颜色。
# colorAlpha: 图元的颜色的透明度。
# opacity: 图元以及其附属物(如文字标签)的透明度。
# colorLightness: 颜色的明暗度,参见 HSL。
# colorSaturation: 颜色的饱和度,参见 HSL。
# colorHue: 颜色的色调,参见 HSL。
out_of_range = None,
# 图形的宽度,即长条的宽度。
item_width = 0,
# 图形的高度,即长条的高度。
item_height = 0,
# visualMap 组件的背景色。
background_color = '#CCCC33',
# visualMap 组件的边框颜色。
border_color = '#EE1111',
# visualMap 边框线宽,单位px。
border_width = 2,
# 文字样式配置项,参考 `series_options.TextStyleOpts`
textstyle_opts = None,
)
)
map.render("中国疫情分布.html")