您的位置:首页 > 房产 > 家装 > 沈阳市疫情防控最新通告_重庆营销型网站制作_软文发布门户网站_google ads 推广

沈阳市疫情防控最新通告_重庆营销型网站制作_软文发布门户网站_google ads 推广

2025/4/23 7:17:56 来源:https://blog.csdn.net/weixin_39293132/article/details/146879438  浏览:    关键词:沈阳市疫情防控最新通告_重庆营销型网站制作_软文发布门户网站_google ads 推广
沈阳市疫情防控最新通告_重庆营销型网站制作_软文发布门户网站_google ads 推广

地图(八)利用python绘制散点地图

散点地图(Scatter Map)简介

1

散点地图可以在地图上呈现数据点,根据散点的性质对当前区域进行可视化分析。

快速绘制

  1. 基于pyecharts的散点地图(Scatter Map)

    参考:通过Pyecharts实现【微博签到中国】可视化作品

    from pyecharts.charts import *
    from pyecharts import options as opts
    import pandas as pdgeo = Geo(init_opts=opts.InitOpts(theme='dark', bg_color='#000000', width='1000px', height='800px'))# 导入数据
    df = pd.read_csv('https://raw.githubusercontent.com/HsuHeinrich/data-collection/master/graph/weibo.csv')# 将数据分为强中弱三类
    weak, strong, normal = [], [], []
    for idx, row in df.iterrows():if row.num < 10:weak.append((idx, row.num))geo.add_coordinate(idx, row.lon, row.lat)elif 10 <= row.num < 30:normal.append((idx, row.num))geo.add_coordinate(idx, row.lon, row.lat)elif row.num >= 30:strong.append((idx, row.num))geo.add_coordinate(idx, row.lon, row.lat)# 设置地图
    geo.add_schema(maptype="china", is_roam=False, zoom=1.2,itemstyle_opts=opts.ItemStyleOpts(color="#000000", border_color="#1E90FF"),emphasis_label_opts=opts.LabelOpts(is_show=False),emphasis_itemstyle_opts=opts.ItemStyleOpts(color="#323c48"))# 添加数据
    geo.add("弱",weak,type_='scatter',
    #         is_selected=True,symbol_size=1,is_large=True,itemstyle_opts=opts.ItemStyleOpts(color="#1E90FF"))geo.add("中",normal,type_='scatter',
    #         is_selected=True,symbol_size=1,is_large=True,itemstyle_opts=opts.ItemStyleOpts(color="#00FFFF"))geo.add("强",strong,type_='scatter',
    #         is_selected=True,symbol_size=1,is_large=True,itemstyle_opts=opts.ItemStyleOpts(color="#E1FFFF"))# 关闭标签
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 标题
    geo.set_global_opts(title_opts=opts.TitleOpts(title="微博签到点亮中国", pos_top='top', pos_left='center'),tooltip_opts=opts.TooltipOpts(is_show=False),legend_opts=opts.LegendOpts(is_show=True, pos_left='left', orient='vertical'))# 添加依赖,scatterGL需要使用
    geo.js_dependencies.add("echarts-gl")# 更改图表类型
    geo.options['series'][0]['type'] = 'scatterGL'
    geo.options['series'][1]['type'] = 'scatterGL'
    geo.options['series'][2]['type'] = 'scatterGL'geo.render_notebook()
    

    image-20240130180233285

  2. 基于pyecharts的涟漪散点地图(Effect Scatter Map)

    import pandas as pd
    import matplotlib.pyplot as plt
    import cartopy.crs as ccrs
    import cartopy.feature as cfeature
    import pandas as pd
    import numpy as np# 导入数据
    data = pd.read_csv('https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/TweetSurfData.csv', sep=";")# 绘制气泡地图# 初始布局
    fig = plt.figure(figsize=(15,10))# 背景地图
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
    ax.set_extent([-180, 180, -65, 80], crs=ccrs.PlateCarree())
    ax.add_feature(cfeature.LAND, facecolor='grey', alpha=0.3)
    ax.add_feature(cfeature.OCEAN, facecolor='#A6CAE0')
    ax.add_feature(cfeature.COASTLINE, linewidth=0.1, edgecolor="white")# 根据大陆为每个点准备一种颜色
    data['labels_enc'] = pd.factorize(data['homecontinent'])[0]# 每个位置添加一个点
    scatter = ax.scatter(data['homelon'], data['homelat'], s=data['n']/6,alpha=0.4, c=data['labels_enc'], cmap="Set1",transform=ccrs.PlateCarree()) # 著作信息
    plt.text( -175, -62,'Where people talk about #Surf\n\nData collected on twitter by @R_Graph_Gallery during 300 days\nPlot realized with Python and the Basemap library', ha='left', va='bottom', size=9, color='#555555' )plt.show()
    

2

  1. 基于plotly的数据栅格化的散点地图(Rasterization Scatter Map)

    import pandas as pd
    import datashader as ds
    from colorcet import fire
    import datashader.transfer_functions as tf
    import plotly.express as px# 导入数据
    df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/uber-rides-data1.csv')
    dff = df.query('Lat < 40.82').query('Lat > 40.70').query('Lon > -74.02').query('Lon < -73.91')cvs = ds.Canvas(plot_width=1000, plot_height=1000)
    agg = cvs.points(dff, x='Lon', y='Lat')# 获取纬度和经度的坐标
    coords_lat, coords_lon = agg.coords['Lat'].values, agg.coords['Lon'].values
    # 图像的角点,需要传递给mapbox
    coordinates = [[coords_lon[0], coords_lat[0]],[coords_lon[-1], coords_lat[0]],[coords_lon[-1], coords_lat[-1]],[coords_lon[0], coords_lat[-1]]]# 将agg图形进行着色,颜色映射采用fire配色方案,然后生成图片格式
    img = tf.shade(agg, cmap=fire)[::-1].to_pil()# 绘制基于MapBox的散点图
    fig = px.scatter_mapbox(dff[:1], lat='Lat', lon='Lon', zoom=12)# 将 datashader 图像添加为 mapbox 图层图像
    fig.update_layout(mapbox_style="carto-darkmatter",mapbox_layers = [{"sourcetype": "image","source": img,"coordinates": coordinates}]
    )
    fig.show()
    

    3

总结

以上利用pyecharts绘制了散点地图和具有涟漪效应的散点地图,利用plotly绘制了具有数据栅格化的散点地图。

共勉~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com