pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值

说明
笔者使用的pyecharts版本是1.7.1,如果使用0.x版本不知道是否可行,因为两个版本代码差异较大。
问题描述:
在pyecharts基于Bmap百度地图绘制可视化地图数据时,根据地名和数据值,例如(北京,200),(天津,45)。在该位置显示散点,在散点上方显示该数据值。显示时发现,显示的数值不是给定的数据值,而是纬度值。如图:
pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值_第1张图片
可以看到上图,每个散点上对应的有值,但是这些值不是我给定的数据值,发现是这个点的纬度坐标。
问题解决:
通过查看官方文档发现,在LabelOpts标签配置项里有一个formatter参数,该参数支持字符串模板和回调函数两种形式,其中字符串模板显示有四个选项:{a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)。如下图:
pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值_第2张图片
发现可以使用formatter=‘{c}’显示数值,将其写入LabelOpts里,.add()代码如下:

.add(   
        type_="effectScatter",
        series_name="",         
        data_pair=data,
        symbol_size=10,
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(
            position="top",
            is_show=True,   #is_show是否显示标签,点上面的内容
            formatter='{c}',
            ), 
        itemstyle_opts=opts.ItemStyleOpts(),
        is_selected=True,  #选中图例
    )

运行尝试一下,如图:
pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值_第3张图片
发现每个散点上方显示的的一个数组[经度值,纬度值,数据值],但是我只想要显示数据值。
笔者查了很多帖子最后又查了官方文档,发现可以使用回调函数解决。
代码如下:
首先要导入一个包:

from pyecharts.commons.utils import JsCode

然后为formatter参数写回调函数,.add()代码如下:

.add(   
        type_="effectScatter",
        series_name="",         
        data_pair=data,        
        symbol_size=10,
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(
            position="top",
            is_show=True,   #is_show是否显示标签,点上面的内容
            formatter=JsCode(                  #formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数    
                    """function(params) {
                    if ('value' in params.data) {
                        return params.data.value[2];
                    }
                }"""
                ),#显示数据,可以去掉经纬度只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
            ), 
        itemstyle_opts=opts.ItemStyleOpts(),
        is_selected=True,  #选中图例
    )

通过params.data.value[i]可以显示数组对应的值,例如params.data.value[0]显示经度值;params.data.value[1]显示纬度值;params.data.value[2]显示数据值。params.data.name可以显示数据名。
运行看一下,如图:
pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值_第4张图片
可以看到,显示的正是数据值。
当然,在选中标签里也可以使用formatter回调函数,例如,当鼠标移动到西安对应的散点时,会显示一个框,里面有地名和数据值,如图:
pyecharts基于Bmap绘制可视化地图数据时,如何在标签显示时去除经纬度,只显示数值_第5张图片
实现代码如下,.set_global_opts():

.set_global_opts(
        title_opts=opts.TitleOpts(
            title="分布图",
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),       #文字样式配置
        ),
        tooltip_opts=opts.TooltipOpts(        #标签配置,选中某一个点显示的框
            trigger="item",                 #触发类型,item主要用于散点图
            formatter=JsCode(             #显示提示框formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
                    """function(params) {
                    if ('value' in params.data) {
                        return params.data.name + ':' + params.data.value[2];
                    }
                }"""
                ),#显示数据,可以去掉经纬度,只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
        ),  

最后看一下我的数据:

data = [
    ["海门", 29],
    ["鄂尔多斯", 112],
    ["招远", 70],
    ["舟山", 29],
    ["齐齐哈尔", 35],
    ["盐城", 70],
    ["赤峰", 100],
    ["青岛", 80],
    ["金昌", 119],
    ["泉州", 45],
    ["日照", 18],
    ["石家庄", 65],
    ["南京", 93],
    ["拉萨", 200],
    ["南昌", 30],
    ["西安", 54],
    ["乌鲁木齐", 40],
    ["呼和浩特", 11],
    ["重庆", 35],
    ["成都", 49],
    ["长沙", 50],
    ["昆明", 10],
    ["三亚", 5],
]

你可能感兴趣的:(pyecharts,python学习,可视化,python,数据可视化,js)