在分析了单个变量以及两个数值型或两个分类型变量之间的关系后,一项常见的分析任务是了解数值型测量值如何在不同组或类别之间变化。例如,不同职位(分类型)的平均工资(数值型)有何不同?或者客户消费(数值型)如何根据会员等级(分类型)而变化?这种分析有助于找出各组在分布、集中趋势和变异性方面的显著差异。可视化对于这种比较特别有效。尽管计算每组的均值或中位数等汇总统计量能提供量化概览,但图表能更丰富、直观地呈现潜在的分布情况。我们将重点介绍两种比较数值变量在不同类别间分布的有力可视化方法:分组箱线图和提琴图。分组箱线图箱线图常用于概括单个数值变量的分布。它们显示中位数、四分位数(四分位距,IQR)和潜在异常值。通过将多个箱线图并排显示,每个图对应一个分类变量的一个类别,可以直接比较各组的这些汇总统计量。使用Seaborn创建分组箱线图很简单。你可以将分类变量指定给x轴(或y轴),将数值变量指定给另一个轴。import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 示例数据生成(请替换为您的实际数据) np.random.seed(42) data = { 'Category': np.random.choice(['Alpha', 'Beta', 'Gamma'], size=150), 'Value': np.concatenate([ np.random.normal(50, 15, 50), # Alpha类别 np.random.normal(65, 10, 50), # Beta类别 np.random.normal(55, 20, 50) # Gamma类别 ]) } df = pd.DataFrame(data) # 创建分组箱线图 plt.figure(figsize=(8, 5)) # 设置图表大小以提高可读性 sns.boxplot(x='Category', y='Value', data=df, palette=['#74c0fc', '#ffa94d', '#69db7c']) # 使用蓝色、橙色、绿色 # 添加图表增强 plt.title('数值在不同类别上的分布') plt.xlabel('类别类型') plt.ylabel('测量值') plt.grid(axis='y', linestyle='--', alpha=0.7) # 添加水平网格线 plt.show() {"layout": {"title": "数值在不同类别上的分布", "xaxis": {"title": "类别类型"}, "yaxis": {"title": "测量值", "gridcolor": "#dee2e6", "zeroline": false}, "boxmode": "group", "legend": {"traceorder": "reversed"}, "template": "plotly_white", "autosize": true}, "data": [{"type": "box", "name": "Alpha", "y": [50.04, 60.45, 41.7, 70.1, 55.22, 44.86, 31.47, 61.43, 47.59, 50.6, 52.25, 43.34, 45.1, 49.15, 63.8, 21.49, 58.47, 40.93, 53.02, 52.8, 32.23, 47.36, 39.92, 54.49, 55.11, 50.64, 64.87, 50.86, 35.94, 63.84, 44.69, 49.21, 48.88, 31.98, 63.28, 51.81, 66.67, 41.72, 53.75, 37.21, 46.53, 38.17, 57.49, 59.07, 60.68, 58.26, 48.85, 42.88, 53.77, 42.39], "marker": {"color": "#74c0fc"}}, {"type": "box", "name": "Beta", "y": [62.66, 70.76, 60.08, 52.92, 69.7, 65.86, 75.46, 58.95, 62.91, 65.74, 52.54, 57.29, 77.15, 70.45, 64.43, 55.18, 70.69, 65.43, 67.48, 60.22, 66.61, 57.97, 73.43, 58.47, 59.27, 71.88, 62.36, 63.49, 69.51, 64.53, 56.61, 57.66, 57.86, 69.36, 51.3, 60.99, 67.55, 68.63, 64.77, 72.2, 61.27, 67.06, 65.6, 70.17, 56.41, 61.57, 60.51, 67.43, 53.83, 67.97], "marker": {"color": "#ffa94d"}}, {"type": "box", "name": "Gamma", "y": [71.1, 53.83, 61.16, 68.91, 83.44, 40.83, 61.32, 34.86, 44.98, 44.27, 44.14, 39.73, 60.72, 21.58, 48.01, 35.28, 55.86, 47.89, 50.78, 67.27, 69.86, 62.62, 54.03, 86.51, 58.69, 47.19, 74.97, 50.31, 54.24, 57.66, 42.9, 37.85, 70.73, 40.11, 36.38, 39.16, 57.75, 43.78, 54.73, 37.51, 48.82, 48.59, 57.33, 52.18, 67.72, 41.11, 51.5, 34.47, 82.81, 61.26], "marker": {"color": "#69db7c"}}]}一个分组箱线图,比较了数值型“值”在三种“类别”类型(Alpha、Beta 和 Gamma)上的分布。Beta 似乎比 Alpha 和 Gamma 具有更高的中位数和更小的变异性(较小的 IQR)。Gamma 显示出最大的分散程度,并且中位数略高于 Alpha。解读分组箱线图时,请注意:中位数差异: 比较箱体内的中心线。各组的典型值是否有显著差异?分散程度差异(IQR): 比较箱体的高度(IQR)。数值变量在不同类别间的变异性是否有显著不同?箱体重叠: 显著重叠可能表示组间差异不那么明显,而重叠较少则表示分布不同。异常值: 观察每个类别中异常值(触须外的点)的存在和位置。某些组是否有更多极端值?提琴图提琴图是一种替代方法,通常能提供更多信息,用于比较不同类别间的分布。它们将箱线图的汇总统计量与两侧绘制的核密度估计(KDE)结合起来。这提供了对分布“形状”的洞察,展现了箱线图可能掩盖的多峰性(多个峰值)等特征。提琴在任何给定值处的宽度表示数据点在该值附近的密度。内部可选地显示一个迷你箱线图、四分位数或仅显示中位数点。import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 复用箱线图示例中的样本数据 np.random.seed(42) data = { 'Category': np.random.choice(['Alpha', 'Beta', 'Gamma'], size=150), 'Value': np.concatenate([ np.random.normal(50, 15, 50), # Alpha类别 np.random.normal(65, 10, 50), # Beta类别 np.random.normal(55, 20, 50) # Gamma类别 ]) } df = pd.DataFrame(data) # 创建分组提琴图 plt.figure(figsize=(8, 5)) sns.violinplot(x='Category', y='Value', data=df, palette=['#74c0fc', '#ffa94d', '#69db7c'], inner='quartile') # 内部显示四分位数 # 添加图表增强 plt.title('数值在不同类别上的分布形状') plt.xlabel('类别类型') plt.ylabel('测量值') plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show(){"layout": {"title": "数值在不同类别上的分布形状", "xaxis": {"title": "类别类型"}, "yaxis": {"title": "测量值", "gridcolor": "#dee2e6", "zeroline": false}, "violinmode": "group", "legend": {"traceorder": "reversed"}, "template": "plotly_white", "autosize": true}, "data": [{"type": "violin", "name": "Alpha", "y": [50.04, 60.45, 41.7, 70.1, 55.22, 44.86, 31.47, 61.43, 47.59, 50.6, 52.25, 43.34, 45.1, 49.15, 63.8, 21.49, 58.47, 40.93, 53.02, 52.8, 32.23, 47.36, 39.92, 54.49, 55.11, 50.64, 64.87, 50.86, 35.94, 63.84, 44.69, 49.21, 48.88, 31.98, 63.28, 51.81, 66.67, 41.72, 53.75, 37.21, 46.53, 38.17, 57.49, 59.07, 60.68, 58.26, 48.85, 42.88, 53.77, 42.39], "box": {"visible": true}, "meanline": {"visible": false}, "points": false, "spanmode": "hard", "marker": {"color": "#74c0fc"}}, {"type": "violin", "name": "Beta", "y": [62.66, 70.76, 60.08, 52.92, 69.7, 65.86, 75.46, 58.95, 62.91, 65.74, 52.54, 57.29, 77.15, 70.45, 64.43, 55.18, 70.69, 65.43, 67.48, 60.22, 66.61, 57.97, 73.43, 58.47, 59.27, 71.88, 62.36, 63.49, 69.51, 64.53, 56.61, 57.66, 57.86, 69.36, 51.3, 60.99, 67.55, 68.63, 64.77, 72.2, 61.27, 67.06, 65.6, 70.17, 56.41, 61.57, 60.51, 67.43, 53.83, 67.97], "box": {"visible": true}, "meanline": {"visible": false}, "points": false, "spanmode": "hard", "marker": {"color": "#ffa94d"}}, {"type": "violin", "name": "Gamma", "y": [71.1, 53.83, 61.16, 68.91, 83.44, 40.83, 61.32, 34.86, 44.98, 44.27, 44.14, 39.73, 60.72, 21.58, 48.01, 35.28, 55.86, 47.89, 50.78, 67.27, 69.86, 62.62, 54.03, 86.51, 58.69, 47.19, 74.97, 50.31, 54.24, 57.66, 42.9, 37.85, 70.73, 40.11, 36.38, 39.16, 57.75, 43.78, 54.73, 37.51, 48.82, 48.59, 57.33, 52.18, 67.72, 41.11, 51.5, 34.47, 82.81, 61.26], "box": {"visible": true}, "meanline": {"visible": false}, "points": false, "spanmode": "hard", "marker": {"color": "#69db7c"}}]}一个分组提琴图,显示了 Alpha、Beta 和 Gamma 类别中“值”的分布形状。该图确认了 Beta 具有更高的集中趋势和更紧密的分布。形状也表明 Gamma 可能比 Alpha 分布更分散一些,即使它们的中位数相对接近。所有分布看起来大致是单峰的。解读提琴图时,请考虑:形状: 观察每个提琴的整体形状。它是对称的、偏斜的、平坦的(均匀的)还是多峰的?比较不同类别间的形状。宽度: 最宽的部分表示数据点最集中的地方。结合信息: 利用密度形状以及内部箱线图(如果显示)来同时获得对集中趋势、分散程度和分布形状的全面视图。箱线图与提琴图的选择箱线图 非常适合快速比较多个组的汇总统计量(中位数、四分位数、异常值)。它们通常比提琴图更简洁,尤其是在类别众多时。提琴图 提供了关于分布形状的更多细节,包括密度和潜在的多峰性。当了解每个类别内分布的“方式”与汇总统计量同等重要时,它们通常更受青睐。然而,当类别过多或分布复杂时,它们可能会变得视觉上复杂。这两种图表都是有价值的工具,用于观察数值变量和分类变量之间的关系。通过可视化这些比较,你可以更透彻地理解不同组在定量测量方面的表现,识别出仅查看汇总数据可能遗漏的模式。这种理解通常是进行更正式的统计检验或特征工程的起点。