Python气象处理绘图第五弹–散点回归图
前言
在进行气象数据处理时,除了关注各个指标的时空变化外,常常我们还会利用统计学对于数据之间的关系进行分析。利用python中的seaborn资源包可以进行很多的统计分析。
一、气象格点数据预处理为所需的DataFrame数据
seaborn官网所给出的例子常常用的是dataframe形式的数据,具有多重索引;而气象数据往往以Dataarray形式存储的。因此我们需要对气象格点数据进行预处理,并转换成相应的dataframe。
- 数据预处理并降维合并(np.hstack((A,B,C,D),np.vstack((A,B,C,D))
- 数据导出为表格形式
t1=pd.DataFrame(t1)
t1.to_excel('m.xlsx', # 路径和文件名
sheet_name='tb1', # sheet 的名字
float_format='%.2f', # 保留两位小数
na_rep='我是空值')
- 利用表格详细处理异常值
- 新定义dataframe索引,并可以进行不同类型的提取
import numpy as np
import matplotlib.pyplot as plt
df= pd.read_csv('m.csv')
df1 = df.set_index(['RCM','SEASON'])#设置两层索引方式
Y=df1.loc[('CN05','MAM'),'tas']#提取CNO5和MAM对应的tas值
X=df1.loc[('CN05','MAM'),'e']#提取CNO5和MAM对应的e值
x=np.array(X[:])#将series数据转换为array
y=np.array(Y[:])
二、散点回归图绘制
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
2.读入数据
代码如下(示例):
data=sns.load_dataset("tips")
data.head(5)
3.绘制图形
- 局部加权线性回归(lowess=True)
g = sns.lmplot(x = "total_bill", y = "tip", col='sex',data=data,row='smoker',aspect=1,lowess=True,
sharey=True,#lowess=True,
ci=None, palette=None,#lowess=True,
height=3.5, scatter_kws={"s":2, "alpha":1},line_kws={'lw': 2, 'color': '#00060B'},
)
- 多项式回归(order=n)
g = sns.lmplot(x = "total_bill", y = "tip", col='sex',data=data,row='smoker',aspect=1,order=3,
sharey=True,#lowess=True,
ci=None, palette=None,#lowess=True,
height=3.5, scatter_kws={"s":2, "alpha":1},line_kws={'lw': 2, 'color': '#00060B'},
)
此处order和lowess两者是互相冲突的两种拟合方式,此外还有logx(对数线性回归模型)、robust(稳健线性回归)、Logistic(逻辑回归)详细参考回归模型图lmplot
3.利用 FacetGrid 结构图个性化绘制多子图Seaborn 可视化进阶之 FacetGrid 结构图
seaborn.FacetGrid(data, *, row=None, col=None, hue=None,col_wrap=None, sharex=True, sharey=True, height=3, aspect=1,palette=None, row_order=None, col_order=None, hue_order=None,hue_kws=None, dropna=False, legend_out=True, despine=True,margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None)
官网介绍
sns.set_theme(style="whitegrid",font='Times New Roman',font_scale=1)#设置图片类型格式
with sns.axes_style("white"):
g = sns.FacetGrid(data, col="sex", row="smoker"
)
g.map(sns.regplot, "total_bill", "tip", order=3,scatter_kws={"s":1, "alpha":1},line_kws={'lw': 2, 'color': '#00060B'})
sns.set_theme(style="whitegrid",font='Times New Roman',font_scale=1)#设置图片类型格式
#https://blog.csdn.net/i_poison_Mind/article/details/115422624
with sns.axes_style("white"):
g = sns.FacetGrid(data, col="sex", row="smoker",margin_titles=True)
g.map(sns.regplot, "total_bill", "tip", order=3,scatter_kws={"s":1, "alpha":1},line_kws={'lw': 2, 'color': '#00060B'})
#https://mp.weixin.qq.com/s/nYxmqMmBb41VaiRtY3GCMA
g.set_titles(col_template="{col_name}",
row_template="{row_name}")
g.set(xticks=[10,20,30,40],yticks=[-5,-2.5,0,2.5,5,7.5,10])#自定义x,y轴标签
g.set(ylabel=None) # remove the axis label
g.set(ylabel='tip(yuan)')#重新设置y轴title
g.set(xlabel=None) # remove the axis label
g.set(xlabel='total bill(yuan)')#重新设置x轴title
g.set_axis_labels("Total bill (US Dollars)","Tip")#和前面四行相同效果
g.fig.subplots_adjust(wspace=0.15,hspace=0.1)# 子图和子图之间的间隔
#设置分辨率
g.fig.set_dpi(100)
总结
以上就是这次对于散点回归图的学习,其中主要有两种方式lmplot和regplot进行绘制,它们使用方法各有不同。绘制完简单的图之后,可以应用facegrid进行个性化绘制图形,拟绘制更加精美的图。