Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >台风路径可视化 | 强台风“天兔”移动轨迹图(Chiikawa版)

台风路径可视化 | 强台风“天兔”移动轨迹图(Chiikawa版)

作者头像
用户11172986
发布于 2024-11-25 08:35:20
发布于 2024-11-25 08:35:20
54406
代码可运行
举报
文章被收录于专栏:气python风雨气python风雨
运行总次数:6
代码可运行

台风路径可视化 | 强台风“天兔”移动轨迹图(Chiikawa版)

前言

大家好!最近,2024年第25号台风天兔引起了网友们的广泛关注,因为它有一个特别的名字——“ウサギ”(Usagi),直译过来就是“兔子”。其本义是指天兔星座。 由于这个名字与《Chiikawa》漫画中的可爱角色“乌萨奇”(Usagi)同名,网友们亲切地称其为“乌萨奇台风”。这不仅增加了台风话题的趣味性,也让许多人对这次台风产生了更多的关注。

Image Name

为了更好地理解和展示这次台风的路径,我们决定用 Python 可视化台风“天兔”的路径,并且用《Chiikawa》漫画中的乌萨奇头像作为台风图标,为数据可视化增添一些趣味性。让我们一起动手吧

项目目标

我们的目标是:

  1. 收集台风“天兔”的历史路径数据。
  2. 使用 Python 的 Matplotlib 和 cartopy 工具包绘制台风路径图。
  3. 将《Chiikawa》漫画中的角色“乌萨奇”头像用作台风图标,让地图更加生动有趣。
  4. 将乌萨奇头像的图片进行抠图处理
  5. 通过本文档,帮助大家掌握使用 Python 进行地理信息数据可视化的基础方法。

数据准备

首先,我们需要收集台风“天兔”的路径数据。这些数据通常可以从气象网站或相关机构提供的公开数据集中获得。数据应包含日期、时间、经度、纬度等关键信息。博主通过爬虫在中央气象台的数据中爬取了数据并放置到project文件夹下

如何爬取则去看看往期文章

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from PIL import Image
import numpy as np

# 读取 Excel 文件
file_path = '/home/mw/project/2024_TY2425.xlsx'
data = pd.read_excel(file_path)

# 查看数据前几行
print(data.head())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   tc_num name_cn name_en       dateUTC       dateCST  vmax  grade   lat  \
0    2425      天兔   USAGI  202411111800  202411120200    18   热带风暴  12.8   
1    2425      天兔   USAGI  202411112100  202411120500    18   热带风暴  13.0   
2    2425      天兔   USAGI  202411120000  202411120800    18   热带风暴  13.2   
3    2425      天兔   USAGI  202411120300  202411121100    25  强热带风暴  13.9   
4    2425      天兔   USAGI  202411120600  202411121400    25  强热带风暴  14.0   

     lon  mslp      attr  
0  135.0   998  analysis  
1  134.5   998  analysis  
2  134.1   998  analysis  
3  132.6   985  analysis  
4  132.0   985  analysis

绘制台风路径

我们将使用 Python 中的 Matplotlib 库与cartopy进行可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import urllib.request
import cartopy.crs as ccrs
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from meteva.base.tool.plot_tools import add_china_map_2basemap
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
from cartopy.feature import NaturalEarthFeature
lons = data['lon'].values
lats = data['lat'].values

# 定义绘图范围(可以根据实际需要调整)
lon_min, lon_max = min(lons) - 5, max(lons) + 5
lat_min, lat_max = min(lats) - 5, max(lats) + 5

# 创建一个新的图形
fig = plt.figure(figsize=(12,10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
plt.rcParams.update({'font.size': 16})
# 设置绘图范围
ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=ccrs.PlateCarree())

# 添加经纬度刻度
ax.set_xticks(np.arange(lon_min, lon_max+1, 5), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(lat_min, lat_max+1, 5), crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())

# 绘制路径
ax.plot(lons, lats, marker='o', linestyle='-', color='red')

# 设置标题和轴标签
ax.set_title('台风路径')
ax.set_xlabel('经度')
ax.set_ylabel('纬度')

# 下载并加载头像图片
avatar_url = 'https://c-ssl.duitang.com/uploads/blog/202402/09/JOSqvMj5SWDxxeJ.jpeg'
with urllib.request.urlopen(avatar_url) as url:
    avatar_image = Image.open(url)
    avatar_array = np.array(avatar_image)

# 每隔五个点绘制一个乌萨奇头像
for i in range(len(lons)):
    if i % 5 == 0:  # 每隔五个点绘制一次
        imagebox = OffsetImage(avatar_array, zoom=0.05)
        ab = AnnotationBbox(imagebox, (lons[i], lats[i]), frameon=False)
        ax.add_artist(ab)

# 显示网格
ax.grid(True)

# 添加中国地图
add_china_map_2basemap(ax, name="nation", edgecolor='k', lw=0.5, encoding='gbk', grid0=None)  # "国界"
land = NaturalEarthFeature('physical', 'land', '10m', edgecolor='face', facecolor='lightgreen')
ocean = NaturalEarthFeature('physical', 'ocean', '10m', edgecolor='face', facecolor='lightblue')
ax.add_feature(land)
ax.add_feature(ocean)
# 调整布局以适应图像
plt.tight_layout()

# 显示图形
plt.show()

头像图片边缘在图中还是稍显违和,那么无敌的Python一定有抠图库

安装抠图库rembg

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!pip install rembg -i https://pypi.mirrors.ustc.edu.cn/simple/

拷贝预训练模型

由于训练模型下载缓慢,博主将其上传为数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!cp /home/mw/input/rembg2522/u2net.onnx /home/mw/.u2net/

开始抠图

核心代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rembg import remove  
input_path = '/home/mw/project/usagi.jpeg'  
output_path = 'output.png'  
with open(input_path, 'rb') as i:  
    with open(output_path, 'wb') as o:  
        input = i.read()  
        output = remove(input)  
        o.write(output)  
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from PIL import Image
from rembg import remove
from IPython.display import display

input_path = '/home/mw/project/usagi.jpeg'
output_path = 'output.png'
comparison_path = 'comparison.png'

# 读取原始图片
with open(input_path, 'rb') as i:
    input_data = i.read()

# 执行抠图操作
output_data = remove(input_data)

# 将处理后的数据写入到输出文件
with open(output_path, 'wb') as o:
    o.write(output_data)

# 加载原始图片和处理后的图片
input_image = Image.open(input_path)
output_image = Image.open(output_path)

# 创建一个新图像,宽度是两个图像宽度之和,高度取两者中的最大值
width = input_image.width + output_image.width
height = max(input_image.height, output_image.height)
comparison_image = Image.new('RGB', (width, height))

# 将原始图片粘贴到左侧
comparison_image.paste(input_image, (0, 0))

# 将处理后的图片粘贴到右侧
comparison_image.paste(output_image, (input_image.width, 0))

# 保存对比图片
comparison_image.save(comparison_path)

# 在 Jupyter Notebook 中显示图片
display(comparison_image)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import urllib.request
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
from cartopy.feature import NaturalEarthFeature
# 定义绘图范围(可以根据实际需要调整)
lon_min, lon_max = min(lons) - 5, max(lons) + 5
lat_min, lat_max = min(lats) - 5, max(lats) + 5

# 创建一个新的图形
fig = plt.figure(figsize=(12,10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
plt.rcParams.update({'font.size': 16})
# 设置绘图范围
ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=ccrs.PlateCarree())
# 添加经纬度刻度
ax.set_xticks(np.arange(lon_min, lon_max+1, 5), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(lat_min, lat_max+1, 5), crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())

# 绘制路径
plt.plot(lons, lats, marker='o', linestyle='-', color='red')

# 设置标题和轴标签
plt.title('台风路径')
plt.xlabel('经度')
plt.ylabel('纬度')


avatar_image = Image.open('/home/mw/project/output.png')
avatar_array = np.array(avatar_image)

# 每隔五个点绘制一个乌萨奇头像
for i in range(len(lons)):
    if i % 5 == 0:  # 每隔五个点绘制一次
        imagebox = OffsetImage(avatar_array, zoom=0.04)
        ab = AnnotationBbox(imagebox, (lons[i], lats[i]), frameon=False)
        ax.add_artist(ab)

# 显示网格
ax.grid(True)

# 添加中国地图
add_china_map_2basemap(ax, name="nation", edgecolor='k', lw=0.5, encoding='gbk', grid0=None)  # "国界"
land = NaturalEarthFeature('physical', 'land', '10m', edgecolor='face', facecolor='lightgreen')
ocean = NaturalEarthFeature('physical', 'ocean', '10m', edgecolor='face', facecolor='lightblue')
ax.add_feature(land)
ax.add_feature(ocean)
# 调整布局以适应图像
plt.tight_layout()

# 显示图形
plt.show()






小结

通过本文的介绍,我们不仅学会了如何使用 Python 的 Matplotlib 和cartopy库来绘制地图和台风路径,还学会了如何将外部图像(如《Chiikawa》漫画中的乌萨奇头像)添加到地图中,让地图更加生动有趣。 另外还学习了如何使用Python进行抠图 这种方法不仅适用于台风路径的展示,还可以应用于其他需要地理信息可视化的场景。希望这篇文章能激发你对数据可视化领域的兴趣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python气象数据处理 | 克里金(Kriging)插值与可视化
克里金法(Kriging) 是依据协方差函数对随机过程/随机场进行空间建模和预测(插值)的回归算法。在特定的随机过程,例如固有平稳过程中,克里金法能够给出最优线性无偏估计(Best Linear Unbiased Prediction, BLUP),因此在地统计学中也被称为空间最优无偏估计器(spatial BLUP)。
郭好奇同学
2021/11/29
10.8K1
Python气象数据处理 | 克里金(Kriging)插值与可视化
Python可视化 | 三维图形迁移
在前面推送中我们提到了通过collection功能而在3D地图中添加地图的方法,也短暂提到了栅格与填色两种图形样式的降维方法。但是从matplotlib这两个函数的底层有一定的局限性,比如下面这两张图的侧面填色就无法绘出:
郭好奇同学
2021/05/28
2K0
Python可视化 | 三维图形迁移
Python可视化 | WRF模式模拟数据后处理(二)
导入模块 import numpy as np from netCDF4 import Dataset import matplotlib.pyplot as plt from matplotlib.cm import get_cmap from matplotlib.colors import from_levels_and_colors import cartopy.crs as crs import cartopy.feature as cfeature from cartopy.feature i
郭好奇同学
2021/08/26
4K0
Python可视化 | WRF模式模拟数据后处理(二)
WRFOUT 涡度平流和温度平流计算与可视化
涡度平流和温度平流是两种常见的气象诊断量,可以帮助我们更好地理解大气运动和热力学过程。 以下代码将计算上述气象诊断量并可视化。
用户11172986
2024/06/20
5800
WRFOUT 涡度平流和温度平流计算与可视化
Satpy基础系列教程(2)-TROPOMI L2数据处理
1.使用Satpy读取TROPOMI数据;2.讨论使用pcolormesh和imshow画图的区别和注意事项。
气象学家
2020/02/26
2.6K0
Python可视化 | WRF模式模拟数据后处理(一)
动画在公众号中不太好放,感兴趣的大家可以去和鲸社区上手玩儿一下。代码获取在好奇心Log公众号后台回复wrf绘图
郭好奇同学
2021/08/26
6.8K2
Python可视化 | WRF模式模拟数据后处理(一)
数据处理与可视化 | 站点插值格点+空间区域掩膜
前两天写了插值+空间掩膜的推文,不过因为数据问题删除了。 后台很多朋友留言说有需要,还是想学习一下,因此自己造了个数据再把这篇文章推一遍。
MeteoAI
2021/02/07
2.4K1
Python气象绘图教程(十三)—Cartopy_4
本节提要:关于子图的一些问题、使用path添加示意框线、Cartopy台风实例本土化
气象学家
2020/06/17
9.9K2
Python气象绘图教程(十三)—Cartopy_4
数据处理 | EOF用法及可视化实例
EOF分析在气象分析中十分常见,幸运的是有前辈已经利用Python实现了EOF分析并且发布在github。
郭好奇同学
2021/05/28
2.9K0
数据处理 | EOF用法及可视化实例
Python可视化 | CMA热带气旋最佳路径数据集读取与绘制
以前在简书分享过一个路径绘制的方法,然而对于更多情况的路径绘制来说(比如台风路径),每次的路径长度都是不一致的,同时也需要从一个数据文件里很复杂的读取。这次分享一个可以方便读取CMA热带气旋最佳路径数据集的方法。
郭好奇同学
2021/05/28
2.6K1
Python可视化 | CMA热带气旋最佳路径数据集读取与绘制
python可视化 | 地理桑基图的绘制方法
我回答目前常用的库包不能直接绘制这样的桑基图,我错了,应该回答是目前常用的库包不能绘制这样漂亮些的桑基图。
郭好奇同学
2021/05/28
1.8K0
python可视化 | 地理桑基图的绘制方法
Python兰伯特投影中国区域等值线图(含南海小地图)
自定义兰伯特投影: 原作者:“坎坷”大佬 PlateCarree (无坐标转换)作图: 代码调试作者:气象水文科研猫 注:因小编时间有限,代码未进行精简。 import numpy as np i
bugsuse
2021/01/04
7.7K1
Python兰伯特投影中国区域等值线图(含南海小地图)
python绘图 | 多种台风路径可视化实现方法
中国气象局(CMA)的台风最佳路径数据集(BST),BST是之后对历史台风路径进行校正后发布的,其经纬度、强度、气压具有更高的可靠性,但是时间分辨率为6小时,部分3小时,这一点不如观测数据。下载地址:http://tcdata.typhoon.org.cn/
郭好奇同学
2020/10/29
1.1K1
气象常用库 | cartopy常用用法总结
10.在上一题基础上,添加国境线,并指定线宽为0.1(不推荐使用,因为该默认参数会使得我国部分领土丢失)
自学气象人
2022/11/14
1.6K0
气象常用库 | cartopy常用用法总结
读者答疑 | python怎么计算流函数
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/08/29
3570
读者答疑 | python怎么计算流函数
Python绘制地图专用库(Cartopy)
地图绘制 大家在绘制栅格地图的时候有可能还在使用ArcGIS进行出图,但是ArcGIS出图比较慢,而且批量出图的时候又比较麻烦。 今天给大家介绍一个Python中用于地图绘制的库,Cartopy,这个库跟basemap非常相似,不过basemap现在已经不再更新。所以大家使用Python绘制地图还是使用Cartopy比较好。 Cartopy简介 Cartopy是一个Python软件包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。 网址:https://scitools.org.uk/carto
GIS与遥感开发平台
2022/04/29
2.8K0
Python绘制地图专用库(Cartopy)
如何使用 Python 更加精确地计算两地距离
在地理信息处理中,计算两点之间的距离、方位角以及从一个点出发给定距离和方位角求解另一个点的位置等问题是非常常见的需求。Python 提供了多种方式来实现这些功能,其中 pygc 是一个特别强大的库,它使用 Vincenty 的公式来精确地进行大圆相关的计算。
用户11172986
2025/02/08
1880
如何使用 Python 更加精确地计算两地距离
利用Python对气象降水场做EOF分析
链接 | https://www.yxybiubiubiu.com/2020/06/01/f1-5-1-1/
MeteoAI
2020/06/29
8K3
利用Python对气象降水场做EOF分析
聊一聊我常用的6种绘制地图的方法
今天来讲一讲在日常工作生活中我常用的几种绘制地图的方法,下面我将介绍下面这些可视化库的地图绘制方法,当然绘制漂亮的可视化地图还有很多优秀的类库,没有办法一一列举
周萝卜
2021/12/08
3.9K0
聊一聊我常用的6种绘制地图的方法
重磅!Python台风路径还能这样画
读者来信,想优化一版台风路径绘制 在检索了半天终于找到一个库,tcmarkers。
用户11172986
2024/06/20
4740
重磅!Python台风路径还能这样画
推荐阅读
相关推荐
Python气象数据处理 | 克里金(Kriging)插值与可视化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验