python绘图——在等间距投影线绘制台风标志符号

python——在等间距投影线绘制台风标志符号

在研究台风的路径或者通过其他信号来表征台风的发展时,通常可以在图上添加台风的符号使得图片要素更加多元化。本文介绍如何在等间距投影下,绘制台风符号,结果如下所示:

在这里插入图片描述

1 、通过python代码实现

  • 首先定义一个台风的符号函数,这里已经封装完了,可以直接拿去用:
def get_hurricane():
    u = np.array([  [2.444,7.553],
                    [0.513,7.046],
                    [-1.243,5.433],
                    [-2.353,2.975],
                    [-2.578,0.092],
                    [-2.075,-1.795],
                    [-0.336,-2.870],
                    [2.609,-2.016]  ])
    u[:,0] -= 0.098
    codes = [1] + [2]*(len(u)-2) + [2] 
    u = np.append(u, -u[::-1], axis=0)
    codes += codes

    return mpath.Path(3*u, codes, closed=False)
  • 通过打点的方式,将对应的台风符号通过marker的方式,打在每一个经纬度坐标上
    x、y:填入你自己的经纬度数据,一个经度、一个纬度就是一个网格点。相当于以lon为横轴,lat为纵轴的二维坐标系;我下面的示例中是人造的经纬度数据(偷懒了。。。
    s:可以调整台风标志的大小,
    edgecolors:调整标志的边缘颜色,facecolors同理
    alpha:调整标志的透明度
ax.scatter(x,y,s=50**2, marker=hurricane, 
            edgecolors="#d62728", facecolors='none', linewidth=2,
            transform=ccrs.PlateCarree(),alpha=0.9)

下面是一个完整示例,不需要导入经纬度相关数据,只要安装了相关的库,就可以直接在脚本中运行实现

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 20 22:25:11 2023

@author: jianpu

@blog :  https://blog.csdn.net/weixin_44237337?spm=1000.2115.3001.5343

@email: 211311040008@hhu.edu.cn

introduction : keep learning althongh walk slowly
"""

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import matplotlib.path as mpath
import numpy as np
import cartopy.crs as ccrs
import cartopy.feature as cfeature

def get_hurricane():
    u = np.array([  [2.444,7.553],
                    [0.513,7.046],
                    [-1.243,5.433],
                    [-2.353,2.975],
                    [-2.578,0.092],
                    [-2.075,-1.795],
                    [-0.336,-2.870],
                    [2.609,-2.016]  ])
    u[:,0] -= 0.098
    codes = [1] + [2]*(len(u)-2) + [2] 
    u = np.append(u, -u[::-1], axis=0)
    codes += codes

    return mpath.Path(3*u, codes, closed=False)

hurricane = get_hurricane()

x = np.linspace(105,180,10)
y = np.linspace(0,10,10)

box = [100,181,-20,20]

fig=plt.figure(figsize=(20,15))#设置一个画板,将其返还给fig
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree(180))
ax.coastlines()
ax.set_extent(box,crs=ccrs.PlateCarree())
ax.gridlines(draw_labels=True,xlocs=[100,120,140,160,180,200])
ax.add_feature(cfeature.OCEAN)

ax.scatter(x,y,s=50**2, marker=hurricane, 
            edgecolors="#d62728", facecolors='none', linewidth=2,
            transform=ccrs.PlateCarree(),alpha=0.9)
ax.scatter(x,-y,s=50**2, marker=hurricane, 
            edgecolors="b", facecolors='none', linewidth=2,
            transform=ccrs.PlateCarree(),alpha=0.9)
plt.show()

2、通过PPT实现

后来,等我把代码码出来,我才发现自己给他搞复杂了。正经人谁给敲代码啊,直接用ppt做岂不是更简单。
直接插入文本框,输入一个6,一个9,让将这两个文本重叠在一块,使用ctrl+G合并,这样一个台风符号就出来了。
接下来,将要添加台风符号的空间分布图,直接导出放到PPT里,然后将台风符号调整适当位置即可。。。。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样简单好调整,但是对于经纬度的选择需要自己提取仔细看一下,一般的示意图可能不用在意太多,但是对于特别的空间pattern还是提取看好经纬度位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

简朴-ocean

继续进步

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

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

打赏作者

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

抵扣说明:

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

余额充值