新版pyecharts------3D地图结合热力图的一次探索

  • 闲话
    今天学习了pyecharts库,此库非常丰富多彩。但是新版对老版不再兼容,网上很多教程都是老版。大家多看看官方文档,里面还有很多实例供大家学习
    pyecharts官方文档
    pyecharts版本说明
  • 看了很多炫酷的例子,就想做一个与众不同的图出来,看着文档没有3D地图的热力图,于是想将其结合。
  • 才疏学浅,只做了个半吊子。

先看结果

3d地图加热力图
或者加上标签。
3d地图热力图

  • 其实是没有实现的,本应该是交互式的可视化界面,但是鼠标选中出现的信息被覆盖在了地图颜色里。导致其只能当静态图看看了。
  • 普通热力图没问题,普通三维地图也没问题,但组合在一起就有点bug。这个理论上不难做到,就相当于把三维地图每个地区板块根据值改变下颜色。网上一些真3D热力图是真炫酷。
  • 看到一篇博客说实现了3d地图热力图,但他是用的Echarts和javascript,相当于原版。python里的pyecharts是移植过来的。
  • 查了下官方文档,或许目前真不支持。
    pyecharts文档

那么我的这个半吊子怎么做的呢?接下来慢慢展开。

  • 先上代码吧
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode
from pyecharts.datasets import register_url
from pyecharts.charts import HeatMap

hubei_sum_patients = [["武汉市",50007],["孝感市",3518],["襄阳市",1175],["宜昌市",931],["仙桃市",575],
["黄冈市",2907],["荆州市",1580],["鄂州市",1394],["随州市",1307],["黄石市",1015],["荆门市",928],
["咸宁市",836],["十堰市",672],["天门市",496],["恩施土家族苗族自治州",252],["潜江市",198],["神农架林区",11]]


c = (
    Map3D()
    #
    .add_schema(
        maptype="湖北",
        itemstyle_opts=opts.ItemStyleOpts(
            #color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            #border_color="rgb(62,215,213)",
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=False,              #不显示地域名字
            #formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
        ),
        emphasis_label_opts=opts.LabelOpts(
            is_show=True,               #鼠标选中显示名字
            #color="#fff",
            font_size=10,
            #background_color="rgba(0,23,11,0)",
        ),
        light_opts=opts.Map3DLightOpts(
            #main_color="#fff",
            main_intensity=1.2,
            main_shadow_quality="high",
            is_main_shadow=False,
            main_beta=10,
            ambient_intensity=0.3,
        ),
    )
    #
    #Map(init_opts=opts.InitOpts(width="1400px", height="800px"))
    .add(
        series_name="湖北各地确诊总人数",
        maptype="湖北",
        data_pair=hubei_sum_patients,
        #name_map=NAME_MAP_DATA,
        is_map_symbol_show=False,
    )
    #.set_series_opts(label_opts=opts.LabelOpts(is_show=False))#不显示地域名
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="湖北各地确诊总人数",
            subtitle="截至2020/04/01",
            #subtitle_link=WIKI_LINK,
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{b}<br/>{c}  人"
        ),
        visualmap_opts=opts.VisualMapOpts(
            min_=10,
            max_=10000,
            range_text=["High", "Low"],
            is_calculable=True,
            range_color=["lightskyblue", "yellow", "orangered"],
        ),
    )

    .render("湖北确诊人数分布.html")
)
  • 思路有两个,1、热力图里加3d地图,2、3d地图里加热力图。我选择的后者,前者还没尝试。
  • 在三维地图的基础上通过add添加data_pair,将数据传入,再通过配置visualmap_opts,一般二维地图就能够显示了,但三维地图只显示底板。只有视觉映射标签没有数据。
    三维地图底板

普通热力图代码

from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode
from pyecharts.datasets import register_url
from pyecharts.charts import HeatMap

hubei_sum_patients = [["武汉市",50007],["孝感市",3518],["襄阳市",1175],["宜昌市",931],["仙桃市",575],
["黄冈市",2907],["荆州市",1580],["鄂州市",1394],["随州市",1307],["黄石市",1015],["荆门市",928],
["咸宁市",836],["十堰市",672],["天门市",496],["恩施土家族苗族自治州",252],["潜江市",198],["神农架林区",11]]


c = (

    #
    Map(init_opts=opts.InitOpts(width="1400px", height="800px"))
    .add(
        series_name="湖北各地确诊总人数",
        maptype="湖北",
        data_pair=hubei_sum_patients,
        #name_map=NAME_MAP_DATA,
        is_map_symbol_show=False,
    )
    #.set_series_opts(label_opts=opts.LabelOpts(is_show=False))#不显示地域名
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="湖北各地确诊总人数",
            subtitle="截至2020/04/01",
            #subtitle_link=WIKI_LINK,
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{b}<br/>{c}  人"
        ),
        visualmap_opts=opts.VisualMapOpts(
            min_=10,
            max_=10000,
            range_text=["High", "Low"],
            is_calculable=True,
            range_color=["lightskyblue", "yellow", "orangered"],
        ),
    )

    .render("湖北人口分布.html")
)

在这里插入图片描述
这个是一个很基本的可视化,可以交互。

小结

  • 对更底层的东西不熟就只能模仿无法创新。
    过程中是有很多报错的,总结起来就是没看文档瞎用类,然后就没定义了,或者不报错但也没渲染。找不到多少资料提前帮你摸出一条路,这个时候就要自己看文档了。其实我大部分结合实例,看懂文档真不是一下子的事情,什么全局配置、系列配置、接口和各种参数取值,太多了。

  • 用add_schema()生成3D湖北地图,add()里还要再添加个maptype = ‘湖北’ ,就有如上效果。

  • 额,好吧,后来还是弄懂了。

  • 如何看懂pyecharts文档

求教

发这篇博客一是交流经验二是虚心求教,希望有相关经验的同学不吝赐教,以上有哪些误人子弟的地方千万要指正。

预告

后面我还会用pyecharts的页面组件、时间轴、词云做一些好玩的东西,希望有同学能看到。

原创文章 7 获赞 7 访问量 922

猜你喜欢

转载自blog.csdn.net/weixin_43159092/article/details/105261714