山脊图(Ridge Plot),也被称为Joy Plot,是一种数据可视化的方法,用于展示一个或多个组的数据分布。这种图表通过平滑的密度曲线来表示每个组的数据分布,这些曲线沿垂直轴堆叠排列,从而产生了类似山脊的视觉效果。这种特殊的布局使得山脊图非常适合于比较不同组之间的数据分布情况。
制作山脊图的基础是核密度估计(Kernel Density Estimation,KDE),这是一种非参数的方式来估计概率密度函数。通过核密度估计,我们可以从数据中提取出每个组的概率密度函数,然后用平滑的曲线来表示这些函数。
与传统的条形图或直方图相比,山脊图提供了更丰富的信息。首先,它不仅可以展示数据的分布情况,还可以展示数据的密度。其次,由于山脊图使用了平滑的曲线来表示数据分布,因此它可以更好地揭示数据的细节,尤其是在数据的边缘部分。此外,山脊图还可以很容易地扩展到多个维度,这使得它非常适合于处理高维数据。
总的来说,山脊图是一种非常有用的数据可视化工具,它可以帮助我们更好地理解和比较不同组之间的数据分布情况。同时,它也可以为数据分析和机器学习等领域的研究人员提供有力的支持。
我们可以使用python中的joypy库十分方便的绘制山脊线图。
下面我们将使用某站点2018年全年的逐日温度数据绘制日平均温度、日最高温度、日最低温度随月份变化的山脊线图。
#导入相关库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#导入joypy库中的joyplot函数,用于创建山脊线图
from joypy import joyplot
plt.rcParams['font.sans-serif'] = ['simsun'] # 显示中文
data = pd.read_csv("wendu_year.csv",encoding='gbk') #读取数据
data['YYYYMMDD']=pd.to_datetime(data['YYYYMMDD']) #将时间列转换为日期时间类型
data=data.set_index(['YYYYMMDD']) #将时间列设置为索引
# print(data)
ax, fig = joyplot(
data=data, #读入数据
by='Month', #按照月份分组
column=['Tmean', 'Tmax','Tmin'], #选择三列温度数据
grid=True, #显示网格
hist=False, #不显示直方图
color=['b', 'y','c'], # 设置不同的颜色,分别对于三列温度数据
legend=True, #显示图例
alpha=0.7, #设置透明度
overlap=0.6, #设置数据重叠度
figsize=(10,6) #设置画布大小
)
plt.title('逐日温度分布情况图', fontsize=10)
plt.xlabel('温度 (°C)') #设置横轴标签
plt.grid(axis='x', linestyle='--', linewidth=0.5, alpha=0.5) #设置网格属性
#plt.savefig('山脊图.png',dpi=400)
plt.show()
欢迎关注公众号水文康的研究所