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

如何创建含多组折线图与独立直方图的组合可视化图表?

实现共享X轴的折线图+直方图组合图表

可以通过Matplotlib的子图布局结合Seaborn快速实现需求,核心是让两个子图共享X轴,分别绘制折线图与直方图,具体实现如下:

1. 准备示例数据

先模拟符合需求的数据集(实际使用时替换为你的真实数据):

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 生成折线图数据:变体A/B/C的epsilon随V变化
np.random.seed(42)
V_values = np.linspace(0, 10, 50)
df_lines = pd.DataFrame({
    'V': np.tile(V_values, 3),
    'epsilon': np.concatenate([
        V_values**0.5 + np.random.normal(0, 0.2, 50),  # 变体A
        V_values**0.6 + np.random.normal(0, 0.2, 50),  # 变体B
        V_values**0.4 + np.random.normal(0, 0.2, 50)   # 变体C
    ]),
    'variant': np.repeat(['A', 'B', 'C'], 50)
})

# 生成直方图数据:V的采集点分布
df_hist = pd.DataFrame({
    'V': np.random.choice(V_values, size=2000, p=np.where(V_values > 5, 0.03, 0.017))
})

2. 创建共享X轴的组合图表

# 创建两个子图,共享X轴,设置高度比例(折线图占比更高)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True, gridspec_kw={'height_ratios': [3, 1]})

# 上方子图:绘制各变体的性能折线图
sns.lineplot(data=df_lines, x='V', y='epsilon', hue='variant', ax=ax1)
ax1.set_title('各设计变体的性能变化')
ax1.set_ylabel('epsilon')
ax1.set_xlabel('')  # 隐藏X轴标签,避免与下方子图重复

# 下方子图:绘制V值的采集点分布直方图
sns.histplot(data=df_hist, x='V', bins=20, ax=ax2, color='gray')
ax2.set_ylabel('采集点数量H')
ax2.set_xlabel('V')

# 调整子图间距,优化显示效果
plt.tight_layout()
plt.show()

关键细节说明

  • sharex=True:强制两个子图共享X轴,确保刻度完全对齐
  • gridspec_kw:调整上下子图的高度比例,让折线图作为核心展示区更突出
  • 直方图的bins参数:可根据X轴数据的粒度调整,保证与折线图的X轴精度匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:11:00