美文网首页python学习笔记工具
【python实战】 pyecharts绘制地图

【python实战】 pyecharts绘制地图

作者: Hobbit的理查德 | 来源:发表于2020-05-07 22:40 被阅读0次

    最近研究python作图,看了一些作图的第三方库,发现作不同的图用不同的第三方库的效果不同,例如,如果要作出如下带中国地图+条形图的样式,pyecharts这个库还是很不错的。虽然有个硬伤,就是渲染成图片,花费的时间较长,一张图渲染花费了大概20多s。

    图片效果如下:

    grid_chart.png

    代码如下:

    #绘制地图用pyecharts
    from pyecharts.charts import Bar
    from pyecharts.render import make_snapshot
    # 使用 snapshot-selenium 渲染图片,图片渲染慢,一张图要20多秒
    # 要装chromedrive
    from snapshot_selenium import snapshot
    import numpy as np 
    from pyecharts.charts import Map,Bar,Grid
    from pyecharts import options as opts
    
    # 地图
    # 模拟数据
    data={
            "data": [
                {"name": "台湾", "value": 183},
                {"name": "香港", "value": 54},
                {"name": "江苏", "value": 34},
                {"name": "上海", "value": 22},
                {"name": "山东", "value": 45},
                {"name": "辽宁", "value": 12},
                {"name": "广东", "value": 56},
                {"name": "四川", "value": 87},
                {"name": "河南", "value": 98},
                {"name": "黑龙江", "value":23},
                {"name": "湖北", "value":2},
                {"name": "广西", "value":3}
            ],
        }
    
    areas=[d["name"] for d in data['data']]
    values=[d["value"] for d in data['data']]
    
    #排序,用于条形图
    data_sort=[list(z) for z in zip(areas, values)]
    data_sort.sort(key=lambda x:(x[1]),reverse=True)
    areas=[x[0] for x in data_sort]
    values=[x[1] for x in data_sort]
    
    # 地图
    map_chart=Map()
    map_chart.add(series_name='',
        data_pair=[list(z) for z in zip(areas, values)],
        maptype='china',
        is_map_symbol_show=False)
    map_chart.set_series_opts(label_opts=opts.LabelOpts(is_show=True,font_size=9)) # {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
    map_chart.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,
        min_=min(values),
        max_=max(values),
        # type_='color',
        pos_right='100',
        pos_top='center',
        range_text=['样本数量',''],
        # range_color=["lightskyblue", "yellow", "orangered"],
        textstyle_opts=opts.TextStyleOpts(font_size=10)))
    
    # 条形图
    bar=Bar()
    bar.add_xaxis(xaxis_data=areas)
    bar.add_yaxis(series_name="",
        yaxis_data=values,
        yaxis_index=1,
        label_opts=opts.LabelOpts(is_show=True,position='right',formatter='{b}:{c}',font_size=9))
    bar.reversal_axis()
    bar.set_global_opts(
                xaxis_opts=opts.AxisOpts(is_show=False,axislabel_opts=opts.LabelOpts(is_show=False)),#不显示x轴及标签
                yaxis_opts=opts.AxisOpts(is_show=True,is_inverse=True,axislabel_opts=opts.LabelOpts(is_show=False),#不显示y轴标签
                    axistick_opts=opts.AxisTickOpts(is_show=False), #不显示y轴tick
                    axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='rgba(0,0,0,0.5)'))), #y轴线设置
                visualmap_opts=opts.VisualMapOpts(is_calculable=True,dimension=0,#设置dimension,条形图每个itme和visualmap对应
        min_=min(values),
        max_=max(values),
        # type_='color',
        pos_right='100',
        pos_top='center',
        range_text=['样本数量',''],
        # range_color=["lightskyblue", "yellow", "orangered"],
        textstyle_opts=opts.TextStyleOpts(font_size=10)))
    
    # 地图+条形图的组合图
    grid_chart=Grid()
    grid_chart.add(bar, grid_opts=opts.GridOpts( pos_left="10", pos_right="80%", pos_top="70%", pos_bottom="5",is_contain_label=False))
    grid_chart.add(map_chart,grid_opts=opts.GridOpts())
    
    # 在工作目录下生成html
    grid_chart.render()
    # 渲染成图片
    make_snapshot(snapshot, grid_chart.render(), "grid_chart.png") 
    

    以上用的是pyecharts的v1版本,相关文档见pyecharts,里面关于配置项和相关函数介绍的还是很详细的,前期是看网上的样例写的,后期要修改细节啥的,就是看着相关文档进行修改。

    如果不是大批量的要求速度快的生成图片,这个库生成的图片以及在设置上的灵活性还是很不错的。

    相关文章

      网友评论

        本文标题:【python实战】 pyecharts绘制地图

        本文链接:https://www.haomeiwen.com/subject/lwltnhtx.html