新版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的页面组件、时间轴、词云做一些好玩的东西,希望有同学能看到。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在vue-baidu-map中使用3D地图,您可以按照以下步骤进行操作: 1. 首先,安装vue-bmap-gl插件。您可以使用以下命令进行安装: ``` npm install vue-bmap-gl --save ``` 2. 然后,在您的Vue项目中引入vue-bmap-gl。您可以在您的代码中添加以下代码: ``` import VueBMap from 'vue-bmap-gl'; import 'vue-bmap-gl/dist/style.css'; Vue.use(VueBMap); ``` 3. 接下来,您需要初始化BMapGL地图的API加载器并配置密钥。您可以在您的代码中添加以下代码: ``` VueBMap.initBMapApiLoader({ ak: '您的百度密钥', v: '1.0' }); ``` 请注意,您需要将`您的百度密钥`替换为您在百度地图API网页上注册并获取到的密钥。 4. 现在,您可以在Vue组件中使用3D地图了。在您的模板中,您可以添加一个具有适当ID和样式的容器元素,例如: ``` <template> <div> <div id="mapContainer" style="width: 100%; height: 400px;"></div> </div> </template> ``` 5. 最后,在您的Vue组件的mounted方法中,您可以初始化3D地图。您可以在您的代码中添加以下代码: ``` mounted() { this.map = new BMapGL.Map("mapContainer"); var point = new BMapGL.Point(114.42586, 23.129122); // 设置中心点经纬度 this.map.centerAndZoom(point, 10); this.map.setTilt(60); // 设置倾斜角 this.map.enableScrollWheelZoom(); } ``` 这将创建一个3D地图并设置一些基本的地图属性。 请确保您已经正确引入了所需的插件,并且已经替换了正确的百度密钥。通过按照上述步骤操作,您就可以在vue-baidu-map中使用3D地图了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值