前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘图系列(2):利用 seaborn 绘制箱线图等图形

绘图系列(2):利用 seaborn 绘制箱线图等图形

作者头像
bugsuse
发布2020-04-21 16:44:22
1K0
发布2020-04-21 16:44:22
举报
文章被收录于专栏:气象杂货铺气象杂货铺

基于 SPC 的强风暴历史数据,仅简单分析历年的龙卷风分布情况。主要用到 pandas 处理 csv 数据,并利用 matplotlib,seaborn绘制箱线图,小提琴图,条形图,散点图等图形。

seaborn 是基于 matplotlib 的可视化库,主要应用于统计分析可视化,而且在统计分析可视化上非常好用且非常强大。

示例也给出了子图的绘制,大部分语句都给出了注释,数据同样见最后链接。

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

sns.set(style='darkgrid', color_codes = True)

data = pd.read_csv(r'F:\SPC\stormevents\legacy\Stormdata_2012.csv')
data2 = pd.read_csv(r'F:\SPC\stormevents\legacy\Stormdata_2013.csv')

tor = data[~data['TOR_F_SCALE'].isnull()]
tor2 = data2[~data2['TOR_F_SCALE'].isnull()]

# 合并两个 DataFrame
tora = pd.concat([tor, tor2])

fig, ax = plt.subplots(2, 2, figsize = (16, 8))

# 绘制箱线图
sns.boxplot(x = tora.TOR_F_SCALE, y = tora.TOR_WIDTH, order=["EF0", "EF1", "EF2", "EF3", "EF4"], palette='vlag', ax = ax[0, 0])

# 类似箱线图,但是将每个点绘制到图中
sns.swarmplot(x = tora.TOR_F_SCALE, y = tora.TOR_WIDTH, size = 2, color = '.3', linewidth = 0, ax = ax[0, 1])

# 箱线图和核密度估计曲线整合
sns.violinplot(x = tora.TOR_F_SCALE, y = tora.TOR_LENGTH, order=["EF0", "EF1", "EF2", "EF3", "EF4"], palette='vlag', ax = ax [1, 0])

plt.scatter(tora.TOR_LENGTH, tora.TOR_WIDTH, s = 12, axes = ax[1, 1])

# 设置X和Y轴的 label
ax[1, 1].set_xlabel('Tornado Length')
ax[1, 1].set_ylabel('Tornado Width')

#  保存图,设置图形分辨率 dpi, 将保存图形的空白区域最小化 bbox_inches
plt.savefig(r'F:\subplots.jpeg', dpi = 400, bbox_inches = 'tight')

fig, ax = plt.subplots()

# 绘制散点图,拟合线性相关曲线,并添加核密度估计曲线
sns.jointplot(tora.TOR_LENGTH, tora.TOR_WIDTH, kind = 'reg', color = 'r', size = 8)

plt.savefig(r'F:\jointplot.jpeg', dpi = 400, bbox_inches = 'tight')

# 以 STATE 列为基础,统计 TOR_F_SCALE 列的独一无二数据及其数目
fws = tora.groupby('STATE')['TOR_F_SCALE'].value_counts()
fwsu = fws.unstack()

fig, ax = plt.subplots(figsize = (16, 9))

sns.set_color_codes('pastel')
sns.barplot(fwsu.sum(axis = 1), fwsu.index, color = 'b', label = 'Total')

sns.set_color_codes('muted')
sns.barplot(fwsu.EF3 + fwsu.EF4, fwsu.index, color = 'b', label = 'EF3+')

# 设置 Y 轴标签及属性
#ax.yaxis.set_ticklabels(fwsu.index, fontsize = 8) 
ax.legend(ncol = 3, loc="lower right", frameon = True)
ax.set_xlabel('Total Tornadoes of State in U.S.')
ax.set_ylabel('')
plt.savefig(r'F:\tornadoes_bar.jpeg', dpi = 400, bbox_inches = 'tight')
plt.show()

不同强度的龙卷风的宽度也存在着差异,EF2级以下的龙卷风的宽度变化不是非常明显,但是EF3+龙卷风的宽度是比较显著的。EF2-以下龙卷风长度变化分布较EF3+龙卷风长度分布集中。

龙卷风的宽度和长度分布比较集中,宽度主要在 1000 以下,而长度在 20 以下。图中存在的长度和宽度的离散点可能是异常点。

美国龙卷主要分布在大平原的几个州,EF3+龙卷也主要分布在这几个州。


链接: https://pan.baidu.com/s/1pKXSXEb 密码: eb7f

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

本文分享自 气象杂货铺 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档