前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python可视化 | 热带气旋统计分析-环状图

Python可视化 | 热带气旋统计分析-环状图

作者头像
郭好奇同学
发布2021-12-06 12:45:51
1.2K0
发布2021-12-06 12:45:51
举报
文章被收录于专栏:好奇心Log

前言

Python中常用来表示百分比的绘图形式就是饼图,使用matplotlib中的plt.pie即可完成。 这种绘图过于单一,由其在默认配色下显得不够美观。

由此想到了对饼图进行改造,形成更加美观的环状图。其关键要点就是在原来饼图的基础上画一个半径更小的白底同心圆。 可以使用plt.Circle((0,0),0.70,fc='white')类似方法。

为了更贴近实际使用,本篇文章获取相关台风数据进行简单的统计分析,并使用环状图进行可视化展示。

数据介绍

中国气象局(CMA)的台风最佳路径数据集(BST),BST是之后对历史台风路径进行校正后发布的,其经纬度、强度、气压具有更高的可靠性,但是时间分辨率为6小时,部分3小时,这一点不如观测数据。 下载地址:http://tcdata.typhoon.org.cn 原始数据为txt格式,为了便于处理,此处已处理成csv,格式如下。

txt转换成csv的程序大家可以自己思考一下。这里提示一下,原来的txt格式中,每条新记录开头第一列都是66666,第三列是本次气旋过程共记录了多少行。感兴趣的小伙伴们可以根据这些自己尝试写一下。

没能搞定或者着急要数据的可以看文末的代码及数据获取方式。

导入模块

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

定义获取强度函数

代码语言:javascript
复制
def intensity(i):
    df1 = df[df['number']==i]
    wsmax = max(df1['wind'])
    return list(set(df1[df1['wind'].isin([wsmax])]['level']))[0]

创建数组

代码语言:javascript
复制
TS = np.array([])    # 存放热带风暴
STS = np.array([])   # 存放强热带风暴s
TY = np.array([])    # 存放台风
STY = np.array([])   # 存放强台风
SSTY = np.array([])  # 存放超强台风

2000-2019年逐年热带气旋强度统计

代码语言:javascript
复制
for year in range(2000,2020):
    level = []
    df = pd.read_csv(f'./data/CH{year}BST.csv')
    numlist = list(set(df['number']))
    for num in numlist:
        level.append(intensity(num))
    TS = np.append(TS,level.count('热带风暴'))     
    STS = np.append(STS,level.count('强热带风暴'))  
    TY = np.append(TY,level.count('台风'))
    STY = np.append(STY,level.count('强台风')) 
    SSTY = np.append(SSTY,level.count('超强台风'))

fig, ax = plt.subplots(figsize=(12,15))

labels = ['TS','STS','TY','STY','SSTY']
explode = (0.05, 0.05, 0.05, 0.05, 0.05,)
colors = ['#66b3ff','#99ff99','#fff566','#ffc069','#ff7875']
for i in range(20):
    size = []
    size.append(TS[i])
    size.append(STS[i])
    size.append(TY[i])
    size.append(STY[i])
    size.append(SSTY[i])
    plt.subplot(5,4,i+1)
    # draw pie
    wedges, texts, autotexts = plt.pie(
        size,
        explode=explode, 
        autopct='%1.1f%%',
        colors=colors,
        shadow=True
    )
    # draw circle
    centre_circle = plt.Circle((0,0),0.70,fc='white')
    fig = plt.gcf()
    fig.gca().add_artist(centre_circle)
    
    plt.title(str(2000+i),fontsize=15)
    if i==11:
        plt.legend(wedges,
                   labels,
                   fontsize=12,
                   title="",
                   loc="center left",
                   bbox_to_anchor=(0.91, 0, 0.3, 1),
                  frameon=False)
plt.savefig('./typhoon_pie.png')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 好奇心Log 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据介绍
  • 导入模块
  • 定义获取强度函数
  • 创建数组
  • 2000-2019年逐年热带气旋强度统计
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档