点击下方公众号,回复资料,收获惊喜
1、前言
seaborn是一款非常强大的画图工具,可以画很多种图,除了截图中展示的,下面还有很多,大家可以尝试一下其他的。今天我们用的只是其中一个:distplot。
2、画图
前面的数据准备和提取工作,跟前一篇趋势图一样,我们直接从画图开始。
代码:
代码语言:javascript复制path1 =r"remapbiled_tas_yearly_EC-Earth3_ssp126_r1i1p1f1_gr_201501-210012.nc"
cmip6 = xarray.open_dataset(path1).tas.loc["2005":"2015",:,:]
fig = plt.figure(figsize=(3,3),dpi=60)#画布
ax = fig.add_axes([1,1,1.5,1.5])#画层
sns.distplot(cmip6,#数据
color='red',#概率密度线的颜色
ax=ax,
label="tas-temp",#蓝色线条的名称
)
这样,最简单的PDFs就画好了,横坐标是nc文件中对应的温度值,纵坐标为概率,但是这个图太丑了,实在拿不出手,所以接下来美化一下。
当增加参数kde = True时,图片没有变化,kde表示是否绘制高斯核密度估计值,默认是Ture,如果为False,则图中的曲线就消失了,且纵坐标发生了变化,请注意看效果。
而我们想保留曲线,把下面的直方图去掉,需要添加调整参数:kde = True,同时添加参数hist=False,代码变成如下:
代码语言:javascript复制sns.distplot(cmip6,#数据
color='red',#概率密度线的颜色
ax=ax,
label="tas-temp",#蓝色线条的名称
kde=True,
hist=False
)
效果:
然后,我们想把这条线加粗一下,需要增加参数:kde_kws=dict(linewidth=5),
代码如下:
代码语言:javascript复制sns.distplot(cmip6,#数据
color='red',#概率密度线的颜色
ax=ax,
label="tas-temp",#蓝色线条的名称,画legend时需要
kde=True,
hist=False,
kde_kws=dict(linewidth=5),
)
效果:
当前x轴的label是“tas”,其实我们没有命名过这个参数,那么这个x轴的标签是从哪里来的呢?答案就是,它是distplot自动从我们的cmip6这个气象要素中提取值是对应的变量名称,我们这个nc文件中温度值对应的变量名称就叫tas,接下来我们尝试改变一下,需添加参数axlabel = "Temperature:K"。
代码如下:
代码语言:javascript复制sns.distplot(cmip6,#数据
color='red',#概率密度线的颜色
ax=ax,
label="tas-temp",#蓝色线条的名称,画legend时需要
kde=True,
hist=False,
kde_kws=dict(linewidth=5),
axlabel = "Temperature:K"
)
效果:
做了以上几处改动,其实效果依然不是很好,本来想尝试把纵坐标的label也改了,但是笔者看完seaborn关于distplot的官方说明,很遗憾未能找到相关参数(可能是本人英文能力有限,未能全部看明白其意义)。而且虽然设置了横坐标的label,但是没有办法调整字体大小,为了统一起见,不再采用axlabel这个参数,还是决定采用ax中set_xlabel和set_ylabel,这两个是比较方便的。
增加以下两行代码:
代码语言:javascript复制ax.set_ylabel( "Probability density", fontsize=20, labelpad=10 )
ax.set_xlabel( "Temperature:K",fontsize=20 ,labelpad=10)
然后效果就比开始的好一些了:
接下来,再来调整一下x和y轴的刻度,增加代码:
代码语言:javascript复制ax.minorticks_on() #打开辅刻度线
ax.tick_params(which='major',width=2) #主刻度线宽度
ax.tick_params(which='major', length=12)#主刻度线长度
ax.tick_params(which='minor', length=6)#辅刻度线长度
此处设置了主刻度线宽度为2,长度12,以及辅刻度线长度为6。
横坐标和纵坐标的刻度线同时进行了调整,然后调整刻度字体大小:
代码语言:javascript复制ax.tick_params(labelsize=16)
然后再给这张图增加一个标签:
代码语言:javascript复制ax.set_title( "Year Period:2005-2015",loc='center', fontsize=20 )
最终效果就是这样,当然还可以继续美化。