python - 如何使用 Seaborn 在 x 轴上绘制月份和在 y 轴上绘制降雨量?
问题描述
我有一个来自 Kaggle 的一个多世纪以来印度每月降雨量的数据集:https ://www.kaggle.com/ravisane1/monthly-rainfall-data-india-of-a-century 。我已经使用 melt 将月份从列转换为行
rain_data_by_month = rain_data.melt(id_vars=["State", "District","Year"],
var_name="Month",
value_name="Rainfall")
现在我想在 X 轴上绘制月份图,在 Y 轴上绘制总降雨量图。所以我首先做了一个
rdf = rain_data_by_month.groupby(['Month'])['Rainfall'].sum().reset_index()
我怎样才能让 seaborn 按照我上面描述的方式绘制 rdf?谢谢!
解决方案
- 使用
seaborn.barplot
. - kaggle:india_monthly_rainfall_data.csv
- 除非您指定顺序,否则 API 不知道如何对月份进行排序。
- 用于
pandas.Categorical
对月份列进行排序并使用calendar
模块来获取月份的排序list
,或list
手动创建。
- 用于
- 请参阅俄勒冈州波特兰市的天气可视化:1940 - 2020
- 请参阅绘制每日最高和最低温度- 这也可用于降雨。
import pandas as pd
import seaborn as sns
import calendar
# load data
df = pd.read_csv('data/india_monthly_rainfall_data.csv')
# melt
dfm = df.melt(id_vars=["State", "District","Year"], var_name="Month", value_name="Rainfall")
# groupby sum
rdf = dfm.groupby(['Month'])['Rainfall'].sum().reset_index()
# ordered
rdf.Month = pd.Categorical(rdf.Month, categories=list(calendar.month_abbr)[1:], ordered=True)
# display(rdf)
Month Rainfall
Apr 2.15743e+06
Aug 1.52092e+07
Dec 6.44887e+05
Feb 9.17824e+05
Jan 7.38981e+05
Jul 1.65285e+07
Jun 1.02515e+07
Mar 1.17930e+06
May 4.09921e+06
Nov 1.56662e+06
Oct 4.33708e+06
Sep 1.00620e+07
# plot
p = sns.barplot('Month', 'Rainfall', data=rdf)
p.set_ylabel('Rainfall (mm)')
p.set_title(f'1901 - 2002: Total Cumulative Monthly Rainfall')
推荐阅读
- c# - 如何组合多个 Func<> 委托
- php - 如何在 Laravel web.php 路由中使用 php 箭头函数
- javascript - 如何将等待与“$.get”一起使用?
- php - 当代码在云中运行时,我下载文件的 php 脚本只是在浏览器中显示它,但在我的本地服务器上运行良好
- ios - 如何使用 SwiftyJSON 解析类型不明确的数据?
- r - 如何在R中绑定多个列
- python - 根据另一个数据集中的元素位置过滤熊猫数据帧的快速方法
- javascript - 从每月或每周或每天或议程更改视图会使应用程序对大日历做出反应
- java - 反应堆跳转到错误的调度程序?
- sql-server - 如何从我的查询中的另一行获取值