python 根据经纬度绘制点图 极投影

参考了python cartopy手动导入地图数据绘制底图/python地图上绘制散点图:Downloading:warnings/散点图添加图里标签_python add_feature-CSDN博客

 点的颜色按照时间显示

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 13 11:32:48 2023

"""

import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import cartopy.feature as cfeature
import matplotlib.ticker as mticker
import matplotlib.path as mpath
import pandas as pd
from matplotlib.dates import date2num, DateFormatter
import matplotlib.dates as mdates

from matplotlib.colors import Normalize

# 转换时间格式r'C:\Users\Desktop\csv\all_files1min_nan.csv'
df = pd.read_csv(r'C:\Users\Desktop\csv\all_files_nan.csv')

df['time'] = pd.to_datetime(df['time'])

# 设置时间列为索引
df.set_index('time', inplace=True)

# 按小时计算平均值
df = df.resample('H').mean()

# 取消索引
df = df.reset_index()
df.dropna(axis=0, inplace=True)

fig = plt.figure(figsize=(12, 10),dpi=300)
proj =ccrs.NorthPolarStereo(central_longitude=0)#设置地图投影
#在圆柱投影中proj = ccrs.PlateCarree(central_longitude=xx)
leftlon, rightlon, lowerlat, upperlat = (-180,180,75,90)#经纬度范围

img_extent = [leftlon, rightlon, lowerlat, upperlat]

f1_ax1 = fig.add_axes([0.2, 0.3, 0.5, 0.5],projection = ccrs.NorthPolarStereo(central_longitude=0))#绘制地图位置

f1_ax1.set_extent(img_extent, ccrs.PlateCarree())
# f1_ax1.add_feature(cfeature.COASTLINE)
# f1_ax1.add_feature(cfeature.OCEAN)
# f1_ax1.add_feature(cfeature.LAND)
# 添加网格线和海岸线
# f1_ax1.gridlines(draw_labels=True)
f1_ax1.coastlines()
g1=f1_ax1.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=1, color='gray',linestyle='--')
g1.xlocator = mticker.FixedLocator(np.linspace(-180,180,13))
g1.ylocator = mticker.FixedLocator(np.linspace(60, 90,4))


theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.44
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)
f1_ax1.set_boundary(circle, transform=f1_ax1.transAxes)

# 绘制极投影图
# plt.figure(figsize=(8, 8))

# 遍历DataFrame的行
for index, row in df.iterrows():
    # 将时间转换为数值
    time_value = date2num(row['time'])
    # 绘制散点,颜色按时间
    sc=f1_ax1.scatter(row['lon'], row['lat'], c=time_value, cmap='viridis', s=10,vmin=date2num(df['time']).min(), vmax=date2num(df['time']).max(),transform=ccrs.Geodetic())

# 添加colorbar
# 添加colorbar
cbar = plt.colorbar(sc, label='Date and Time')
# 将colorbar上的标签显示为日期和时间
date_format = mdates.DateFormatter('%b %d %Y') 
# %H:%M:%S
cbar.ax.yaxis.set_major_formatter(date_format)
# cbar.set_ticklabels(df['time'])
# 自定义日期格式化器

plt.show()

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是一只白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值