admin管理员组文章数量:1033480
地图(八)利用python绘制散点地图
地图(八)利用python绘制散点地图
散点地图(Scatter Map)简介
散点地图可以在地图上呈现数据点,根据散点的性质对当前区域进行可视化分析。
快速绘制
1. 基于pyecharts的散点地图(Scatter Map)
代码语言:javascript代码运行次数:0运行复制参考:通过Pyecharts实现【微博签到中国】可视化作品[1]
from pyecharts.charts import *
from pyecharts import options as opts
import pandas as pd
geo = Geo(init_opts=opts.InitOpts(theme='dark', bg_color='#000000', width='1000px', height='800px'))
# 导入数据
df = pd.read_csv('.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)
elif10 <= 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)
代码语言:javascript代码运行次数:0运行复制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('.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()
3. 基于plotly的数据栅格化的散点地图(Rasterization Scatter Map)
代码语言:javascript代码运行次数:0运行复制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('.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()
总结
以上利用pyecharts绘制了散点地图和具有涟漪效应的散点地图,利用plotly绘制了具有数据栅格化的散点地图。
共勉~
参考资料
[1]
通过Pyecharts实现【微博签到中国】可视化作品:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent 删除geo地图可视化数据python地图(八)利用python绘制散点地图
地图(八)利用python绘制散点地图
散点地图(Scatter Map)简介
散点地图可以在地图上呈现数据点,根据散点的性质对当前区域进行可视化分析。
快速绘制
1. 基于pyecharts的散点地图(Scatter Map)
代码语言:javascript代码运行次数:0运行复制参考:通过Pyecharts实现【微博签到中国】可视化作品[1]
from pyecharts.charts import *
from pyecharts import options as opts
import pandas as pd
geo = Geo(init_opts=opts.InitOpts(theme='dark', bg_color='#000000', width='1000px', height='800px'))
# 导入数据
df = pd.read_csv('.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)
elif10 <= 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)
代码语言:javascript代码运行次数:0运行复制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('.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()
3. 基于plotly的数据栅格化的散点地图(Rasterization Scatter Map)
代码语言:javascript代码运行次数:0运行复制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('.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()
总结
以上利用pyecharts绘制了散点地图和具有涟漪效应的散点地图,利用plotly绘制了具有数据栅格化的散点地图。
共勉~
参考资料
[1]
通过Pyecharts实现【微博签到中国】可视化作品:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent 删除geo地图可视化数据python本文标签: 地图(八)利用python绘制散点地图
版权声明:本文标题:地图(八)利用python绘制散点地图 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748041614a2245570.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论