You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn figure-level绘图适配子图:解决ECDF图并排展示问题

解决Seaborn ECDF图子图布局与x轴统一问题

核心问题原因

seaborn.displot()是Figure级绘图函数,它会自动创建新画布,直接传入plt.subplots()生成的ax参数不会生效,这就是你之前尝试失败的原因。要实现子图布局,应改用Axes级的seaborn.ecdfplot()函数,它可以直接绑定到指定的子图坐标轴上。

实现代码示例

假设你的DataFrame名为df,行程时长列是duration,分组列是travelmode,代码如下:

import seaborn as sns
import matplotlib.pyplot as plt

# 创建1行2列的子图布局,设置画布大小
fig, (ax_left, ax_right) = plt.subplots(nrows=1, ncols=2, figsize=(14, 6))

# 绘制整体行程时长的ECDF图
sns.ecdfplot(data=df, x="duration", ax=ax_left)
ax_left.set_title("整体行程时长ECDF")
ax_left.set_xlabel("行程时长")
ax_left.set_ylabel("累积概率")

# 绘制按travelmode分组的ECDF图
sns.ecdfplot(data=df, x="duration", hue="travelmode", ax=ax_right)
ax_right.set_title("按出行方式分组的ECDF")
ax_right.set_xlabel("行程时长")
ax_right.set_ylabel("累积概率")

# 统一两张图的x轴范围,确保刻度完全一致
x_min = df["duration"].min()
x_max = df["duration"].max()
ax_left.set_xlim(x_min, x_max)
ax_right.set_xlim(x_min, x_max)

# 可选:手动设置相同的x轴刻度(如需更精细控制)
# shared_ticks = [0, 10, 20, 30, 40, 50]
# ax_left.set_xticks(shared_ticks)
# ax_right.set_xticks(shared_ticks)

# 调整布局,避免标签重叠
plt.tight_layout()
plt.show()

关键说明

  1. Axes级函数适配子图:ecdfplot是针对坐标轴的绘图函数,通过ax参数可指定绘制的子图,完美适配plt.subplots()创建的布局。
  2. 统一x轴的两种方式:
    • 用数据的最小/最大值设置xlim,确保两张图的x轴范围完全一致;
    • 手动指定相同的xticks,让刻度点完全对应,对比更直观。
  3. 布局优化:plt.tight_layout()会自动调整子图间距,避免标题、标签互相遮挡。

内容的提问来源于stack exchange,提问作者arilwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:55:17