You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按检测月份在地图上绘制鱼类分组位点

按月份分组绘制鱼类检测位点地图的实现方案

数据预处理(核心步骤)

先从Dates列提取月份,建立月份与颜色的映射关系:

import pandas as pd

# 读取示例数据(替换为你的实际数据读取逻辑)
data = [
    [49.302005, -67.684971, "2019-08-06"],
    [49.302031, -67.684960, "2019-08-12"],
    [49.302039, -67.684983, "2019-08-21"],
    [49.302039, -67.684979, "2019-08-30"],
    [49.302041, -67.684980, "2019-09-03"],
    [49.302041, -67.684983, "2019-09-10"],
    [49.302042, -67.684979, "2019-09-18"],
    [49.302043, -67.684980, "2019-09-25"],
    [49.302045, -67.684980, "2019-10-01"],
    [49.302045, -67.684983, "2019-10-09"],
    [49.302048, -67.684979, "2019-10-14"],
    [49.302049, -67.684981, "2019-10-21"],
    [49.302049, -67.684982, "2019-10-29"],
]
df = pd.DataFrame(data, columns=["LAT", "LON", "Dates"])

# 转换日期格式并提取月份
df["Dates"] = pd.to_datetime(df["Dates"])
df["Month"] = df["Dates"].dt.month

# 定义月份-颜色映射
month_color_map = {8: "blue", 9: "red", 10: "yellow"}
df["Color"] = df["Month"].map(month_color_map)

方案1:交互式地图(Folium)

适合网页展示,支持缩放、点击查看位点详情:

import folium

# 计算地图中心坐标(所有位点的平均经纬度)
center_lat = df["LAT"].mean()
center_lon = df["LON"].mean()

# 创建地图实例
m = folium.Map(location=[center_lat, center_lon], zoom_start=18)

# 遍历每个位点添加标记
for idx, row in df.iterrows():
    folium.CircleMarker(
        location=[row["LAT"], row["LON"]],
        radius=6,
        color=row["Color"],
        fill=True,
        fill_color=row["Color"],
        fill_opacity=0.8,
        popup=f"日期: {row['Dates'].strftime('%Y-%m-%d')}<br>月份: {row['Month']}"
    ).add_to(m)

# 添加手动图例
legend_html = """
<div style="position: fixed; bottom: 50px; left: 50px; z-index:9999; font-size:14px; background:white; padding:8px; border-radius:4px;">
<b>月份颜色图例</b><br>
8月: <span style="color:blue;">●</span><br>
9月: <span style="color:red;">●</span><br>
10月: <span style="color:yellow;">●</span>
</div>
"""
m.get_root().html.add_child(folium.Element(legend_html))

# 保存地图
m.save("鱼类季节性位移地图.html")

方案2:静态地图(Matplotlib + Contextily)

适合论文、报告的静态输出,可直接导出高清图片:

import matplotlib.pyplot as plt
import contextily as ctx
from pyproj import Transformer

# 转换地理坐标(WGS84)为Web墨卡托(适配底图)
transformer = Transformer.from_crs("EPSG:4326", "EPSG:3857", always_xy=True)
df["x"], df["y"] = transformer.transform(df["LON"], df["LAT"])

# 创建画布
fig, ax = plt.subplots(figsize=(10, 8))

# 按月份分组绘制散点
for month, group in df.groupby("Month"):
    ax.scatter(
        group["x"], group["y"],
        color=month_color_map[month],
        s=100, alpha=0.7,
        label=f"{month}月"
    )

# 添加开源底图
ctx.add_basemap(ax, source=ctx.providers.OpenStreetMap.Mapnik)

# 隐藏坐标轴刻度,优化地图展示
ax.set_axis_off()

# 添加图例和标题
ax.legend(title="检测月份", loc="upper right")
ax.set_title("鱼类海底检测位点季节性位移分布")

# 保存图片
plt.savefig("鱼类季节性位移分布图.png", dpi=300, bbox_inches="tight")
plt.show()

内容的提问来源于stack exchange,提问作者toms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:15:25