python学习笔记工具

【python实战】 pyecharts绘制地图

2020-05-07  本文已影响0人  Hobbit的理查德

最近研究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,里面关于配置项和相关函数介绍的还是很详细的,前期是看网上的样例写的,后期要修改细节啥的,就是看着相关文档进行修改。

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

上一篇下一篇

猜你喜欢

热点阅读