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

如何将分箱条形图与折线图合并绘制在同一图表中?

如何将分箱条形图与折线图合并到同一图表中?

问题描述

需要在同一图表中展示两个数据集:一个用分箱条形图呈现,另一个用折线图呈现。单独绘制两种图表均正常,但合并时出现X轴错位,且无法移除分箱标签。

单独绘制分箱条形图的代码:

tobar = pd.melt(pd.DataFrame(np.random.randn(1000).cumsum()))
tobar["bins"] = pd.qcut(tobar.index, 20)

bp = sns.barplot(data=tobar, x="bins", y="value")

单独绘制折线图的代码:

toline = pd.melt(pd.DataFrame(np.random.randn(1000).cumsum()))

lp = sns.lineplot(data=toline, x=toline.index, y="value")

合并尝试的代码(X轴混乱):

fig, ax = plt.subplots()
ax2 = ax.twinx()
bp = sns.barplot(data=tobar, x="bins", y="value", ax=ax)
lp = sns.lineplot(data=toline, x=toline.index, y="value", ax=ax2)
bp.set(xlabel=None)

解决方案

问题核心是条形图X轴为分类类型(分箱区间),折线图X轴为连续索引,两者轴类型不匹配导致错位;同时移除标签的方式不正确。以下是修正后的实现:

步骤1:预处理数据,统一X轴映射

先对两个数据集按分箱做聚合,确保每个分箱对应一个数据点,同时用连续的位置索引替代分类分箱作为X轴:

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

# 生成并处理条形图数据:按分箱计算均值(可替换为中位数等统计量)
tobar = pd.melt(pd.DataFrame(np.random.randn(1000).cumsum()))
tobar["bins"] = pd.qcut(tobar.index, 20)
bar_data = tobar.groupby("bins")["value"].mean().reset_index()

# 生成并处理折线图数据:按分箱取区间末尾值(可根据需求替换为均值/中位数)
toline = pd.melt(pd.DataFrame(np.random.randn(1000).cumsum()))
toline["bins"] = pd.qcut(toline.index, 20)
line_data = toline.groupby("bins")["value"].last().reset_index()

步骤2:对齐绘制并移除分箱标签

用连续位置索引作为X轴,确保两个图表对齐,同时通过set_xticks和set_xticklabels移除分箱标签:

fig, ax = plt.subplots(figsize=(12, 6))

# 绘制分箱条形图,X轴用0-19的连续位置
bp = sns.barplot(data=bar_data, x=np.arange(len(bar_data)), y="value", ax=ax)

# 双Y轴绘制折线图,X轴与条形图完全对齐
ax2 = ax.twinx()
lp = sns.lineplot(data=line_data, x=np.arange(len(line_data)), y="value", ax=ax2, color="#ff3333", marker="o")

# 彻底移除分箱的X轴标签和刻度
ax.set_xticks([])
ax.set_xticklabels([])

# 设置轴标签与标题
ax.set_ylabel("条形图数值")
ax2.set_ylabel("折线图数值")
plt.title("分箱条形图与折线图合并展示")

plt.tight_layout()
plt.show()

关键说明

  • 统一X轴为连续位置索引,解决分类轴与连续轴的错位问题
  • 对折线图数据按分箱聚合,确保每个柱子对应一个折线数据点
  • 使用ax.set_xticks([])和ax.set_xticklabels([])彻底清除分箱标签
  • 双Y轴(twinx)适配两个数据集可能存在的数值范围差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26