我使用的Pyecharts 版本:v 0.5.11
官方文档: https://05x-docs.pyecharts.org/#/
自从 v0.3.2 开始, pyecharts 将不再自带地图 js 文件。如需要用到地图图表,需自行安装对应的地图文件包。
在本地的位置:
例如我的在:C:\Users\admin\Anaconda3\Lib\site-packages\echarts_china_cities_pypkg
数据格式如下:
据我的研究,Geo
依赖的是 1. pyecharts 自带的datasets(city_coordinates.json);Map
依赖的是 2. 额外安装的地图文件包。(如果不对请指正,感谢~)
from pyecharts import Geo
districts=['白云区', '从化区', '番禺1111区', ]
value = [1, 2, 3,]
geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000)
geo.add("",
districts, value, maptype='广州',
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
)
geo.render()
geo
Geo
中有add_coordinate()
方法,例如:from pyecharts import Geo
districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区']
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000)
geo.add_coordinate('南沙区', 113.525165,22.801624)
geo.add_coordinate('白云区', 113.273238,23.3)
geo.add("",
districts, value, maptype='广州',
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
label_formatter='{b}'
)
geo
注意点:
geo.add_coordinate
添加的地点在源文件中已经存在,则自定义添加的会覆盖源文件中的;v0.5.11
版本中,我估计是不完整或者旧版本的广州地图,没有“白云区”、“南沙区”,增城还是“增城市”而不是“增城区”,所以要手动修改。(Map
中也有类似现象)Map
中也有类似现象)geo =Geo("广州市地图")
geo.add_coordinate('白云区', 113.273238,23.3)
geo.add_coordinate('越秀区', 113.266835,23.128537)
geo.add_coordinate('海珠区', 113.361575,23.08)
geo.add_coordinate('天河区', 113.361575,23.20)
geo.add_coordinate('番禺区', 113.384152,22.937556)
geo.add_coordinate('黄埔区', 113.550541,23.24)
geo.add_coordinate('南沙区', 113.525165,22.801624)
geo.add_coordinate('花都区', 113.220463,23.403744)
geo.add_coordinate('从化区', 113.586679,23.548748)
geo.add_coordinate('增城区', 113.810627,23.261465)
geo.add_coordinate('荔湾区', 113.23,23.05)
geo.add('', districts, value, maptype='广州')
from pyecharts import Map
districts=['白云区', '从化区', '番禺11111区']
value = [ 1, 2, 3,]
map = Map("Map地图示例", "", title_pos='center', width=1000, height=1000)
map.add("",
districts, value, maptype='广州',
is_visualmap=True,
visual_range=[min(value), max(value)],
is_label_show=True ,
label_formatter='{b}'+'{c}',
)
map.render()
map
注意点:
map.render()
出来的html文件
里显示的却是调整过后的,如下:
(来自 https://github.com/pyecharts/pyecharts/issues/164 )
对于1:我尝试之后发现好像还是可以缩放欸。?
对于2. Map不能自定义经纬度,没办法,那就只能去源文件里手动修改啦
(https://github.com/pyecharts/pyecharts/issues/817 中有相关的讨论)
答案是可以的,利用回调函数设置.add()
中的label_formatter
属性即可。
回调函数:我自己的理解是,echarts 本身是 javascript,pyecharts 中的回调函数就是将 python 方法翻译为 javascript 方法的函数(如果不对,还请大神指正~)
先看Map
中的情况:
运行如下代码,默认显示只显示类目值:
from pyecharts import Map
districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区']
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
map = Map("Map地图示例", "",title_pos='center', width=1000, height=1000)
map.add("",
districts, value,maptype='广州',
is_visualmap=True,
visual_range=[min(value), max(value)],
is_label_show=True ,
)
map.render()
map
输出结果部分截图如下:
添加参数label_formatter
可以进行设置(中间还可以用“+”连接):
(来自于文档 基本使用->图标配置->通用配置项->label
https://05x-docs.pyecharts.org/#/zh-cn/charts_configure?id=label)
例如label_formatter='{b}'+'{c}'
,则类目值和数值可以一起显示了:
from pyecharts import Map
districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区']
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
map = Map("Map地图示例", "",title_pos='center', width=1000, height=1000)
map.add("",
districts, value,maptype='广州',
is_visualmap=True,
visual_range=[min(value), max(value)],
is_label_show=True ,
label_formatter='{b}'+'{c}',
)
map.render()
map
再来看Geo
中的情况。和Map
有所不同,默认的显示的是纬度值:
from pyecharts import Geo
districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区']
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000)
geo.add_coordinate('南沙区',113.525165,22.801624)
geo.add_coordinate('白云区', 113.273238,23.3)
geo.add("",
districts, value,maptype='广州',
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
#label_formatter='{b}'+'{c}'
)
geo.render()
geo
设置 label_formatter='{b}'+'{c}'
之后会把类目值+经度+纬度+数值一起显示出来:
这时候就要用到回调函数了。操作如下:
先定义一个geo_formatter
函数:
def geo_formatter(params):
return params.name + ' : ' + params.value[2]
然后再设置label_formatter=geo_formatter
即可:
from pyecharts import Geo
def geo_formatter(params):
return params.name + ' : '+ params.value[2]
districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区']
value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]
geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000)
geo.add_coordinate('南沙区',113.525165,22.801624)
geo.add_coordinate('白云区', 113.273238,23.3)
geo.add("",
districts, value,maptype='广州',
is_visualmap=True,
is_label_show=True ,
visual_range=[min(value), max(value)],
#label_formatter='{b}'+'{c}'
label_formatter=geo_formatter, # 重点在这里,将函数直接传递为参数。
)
geo.render()
geo
输出结果如下:
⭐上述 format 的设置方式同样适用于:xaxis_formatter
(x 轴标签格式器),yaxis_formatter
(y 轴标签格式器),label_formatter
(文本标签格式器) ,tooltip_formatter
(提示框标签格式器)
回调函数只能显示value值,name值等,那能不能显示针对每个城市的自定义的数值呢?(https://github.com/pyecharts/pyecharts/issues/1039)
(更新中…)