joypy简介
joypy 是一个用于生成 Joy Division 风格的图表的 Python 包。它专注于绘制Joyplots(也称为 Ridgeline Plots 或者 Mountain Plots)。Joyplot 是一种在有限的垂直空间内展示多组数据分布情况的图表,特别适用于展示多个变量或类别的分布,同时保持每个类别或变量的分布可比较。它们通过堆叠或重叠的密度图(通常是核密度估计图)来展示数据。joypy类似于小提琴图(violin plots),但小提琴图通常不会重叠,而 Joyplots 会将不同组的分布重叠在一起,以提供一个紧凑且连续的可视化效果。
为什么要使用峰峦图?
- 平滑展示数据分布:与传统的条形图或直方图相比,山脊线图提供了一种更平滑、更直观的方式来展示数据的分布情况。
- 比较能力:山脊线图非常适合比较多个分布的形状和大小,清晰地展示不同组之间的变化和趋势。
- 空间效率:通过在单个图中堆叠,山脊线图可以有效地利用空间,避免了创建多个单独的密度图。
- 美观性:山脊线图在视觉上吸引人,用不同的颜色和样式区分不同的组,使得数据更加生动和直观。
- 趋势识别:可以轻松识别多个群体数据中的共同模式和异常值。
- 适用于大量数据集:山脊线图适用于展示大量数据集,而不会显得拥挤或不清晰。
主要特点
- 易于使用:joypy的API设计简单明了,用户可以轻松地创建Joyplots图表。
- 多样化的图表样式:用户可以通过调整参数来创建不同样式的Joyplots图表,例如修改颜色、线条宽度和透明度等。
- 支持多种数据类型:joypy支持多种数据类型,包括pandas DataFrame、numpy数组和Python列表等。
- 高度可定制化:用户可以使用matplotlib的基础功能来进一步自定义Joyplots图表,例如添加标签、修改图例和调整坐标轴等。
使用场景
- 比较不同组的数据分布:例如,如果你有不同地区的人口年龄分布数据,可以使用 Joy Plot 来直观比较这些分布。
- 时间序列分析:如果数据随时间变化,Joy Plot 可以帮助展示这种趋势,例如展示一周内每天的温度变化。
注意事项
- 大量数据:对于大规模数据集,Joy Plot 可能会变得难以解读,特别是当线条过多重叠时。
- 解读方式:虽然 Joy Plot 在视觉上很吸引人,但对于不熟悉这种类型图表的观众,可能需要一些解释。
joypy的使用
要安装 joypy,可以使用 pip:pip install joypy
def joyplot(data, column=None, by=None, grid=False, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, figsize=None, hist=False, bins=10, fade=False, ylim='max', fill=True, linecolor=None, overlap=1, background=None, labels=None, xlabels=True, ylabels=True, range_style='all', x_range=None, title=None, colormap=None, color=None, normalize=True, floc=None, **kwds)
参数说明:
- data:DataFrame、Series 或嵌套集合
- column:字符串或序列。如果传入,将用于将数据限制为特定列的子集
- by:对象,可选。如果传入,用于形成单独的绘图组
- grid:布尔值,默认值为 True。是否显示轴网格线
- labels:布尔值或列表,默认值为 True。如果是列表,必须与 de 的大小相同
- xlabelsize:整数,默认值为 None。如果指定,则更改 x 轴标签的大小
- xrot:浮点数,默认值为 None。x 轴标签的旋转角度
- ylabelsize:整数,默认值为 None。如果指定,则更改 y 轴标签的大小
- yrot:浮点数,默认值为 None。y 轴标签的旋转角度
- ax:matplotlib 轴对象,默认值为 None
- figsize:元组。默认情况下,以英寸为单位创建图形的大小
- hist:布尔值,默认值为 False
- bins:整数,默认值为 10。要使用的直方图箱数
- color:用于绘图的颜色或颜色列表。可以是:
- 一个字符串或任何可以被 matplotlib 解释为颜色的内容;
- 一个颜色列表。有关更多详细信息,请参阅文档/示例。
- kwds:其他绘图关键字参数。传递给直方图/核密度估计(KDE)绘图函数
使用示例:
import pandas as pd import matplotlib.pyplot as plt from joypy import joyplot iris = pd.read_csv("seaborn-data/iris.csv") selected_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] fig, ax = plt.subplots() my_title = 'Distribution of features in the iris dataset' fig, axes = joyplot(data=iris, ax=ax, by='species', column=selected_cols, xlabelsize=14, ylabelsize=14, grid=True, hist=False, color=['#FF0066', '#9400D3','#002FA7', '#FFB900'], legend=True, title=my_title, alpha=0.86) plt.show()
参考链接: