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

如何在Matplotlib同窗口中叠加绘制折线图/散点图与柱状图?

在Matplotlib/Pandas中叠加不同类型图表的实现方法

嘿,这两个问题本质上都是在同一个绘图轴(Axes)上叠加不同类型的可视化元素,核心思路就是复用同一个轴对象——不管你是用Pandas的便捷绘图接口,还是原生Matplotlib的函数,都能轻松实现。我给你分场景举具体的代码例子:

1. 散点图与柱状图互相叠加

不管是先画散点再叠柱状,还是先画柱状再叠散点,关键都是通过ax参数指定同一个轴对象。

示例1:先画柱状图,再叠加散点图

import pandas as pd
import matplotlib.pyplot as plt

# 构造测试数据
df = pd.DataFrame({
    '类别': ['A', 'B', 'C', 'D'],
    '柱状数据': [12, 25, 18, 30],
    '散点数据': [15, 22, 20, 28]
})

# 第一步:绘制柱状图,获取轴对象
ax = df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB', alpha=0.8)

# 第二步:在同一个轴上叠加散点图
df.plot(kind='scatter', x='类别', y='散点数据', color='#FF4500', s=120, ax=ax)

# 美化图表
plt.title('柱状图叠加散点图')
plt.ylabel('数值')
plt.show()

示例2:先画散点图,再叠加柱状图

# 第一步:绘制散点图,获取轴对象
ax = df.plot(kind='scatter', x='类别', y='散点数据', color='#FF4500', s=120)

# 第二步:在同一个轴上叠加柱状图(调整透明度避免遮挡)
df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB', alpha=0.6, ax=ax)

plt.title('散点图叠加柱状图')
plt.ylabel('数值')
plt.show()

2. 折线图叠加柱状图

用plot(x,y)画完折线图后,同样可以通过获取当前轴对象来叠加柱状图,两种实现方式:

方式1:原生Matplotlib函数组合

import matplotlib.pyplot as plt

# 测试数据
x = [1, 2, 3, 4, 5]
y_line = [6, 8, 7, 9, 10]
y_bar = [3, 5, 4, 6, 7]

# 先画折线图
plt.plot(x, y_line, color='#2E8B57', marker='o', linewidth=2, label='折线数据')

# 获取当前轴,叠加柱状图
current_ax = plt.gca()
current_ax.bar(x, y_bar, color='#FFA500', alpha=0.5, label='柱状数据')

# 添加图例和标签
plt.legend()
plt.title('折线图叠加柱状图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()

方式2:Pandas绘图接口组合

import pandas as pd

df = pd.DataFrame({
    'x': x,
    '折线数据': y_line,
    '柱状数据': y_bar
})

# 先画折线图,获取轴对象
ax = df.plot(x='x', y='折线数据', color='#2E8B57', marker='o', linewidth=2)

# 叠加柱状图
df.plot(x='x', y='柱状数据', kind='bar', color='#FFA500', alpha=0.5, ax=ax)

plt.legend()
plt.title('折线图叠加柱状图')
plt.show()

额外小技巧:处理Y轴范围差异大的情况

如果两种数据的数值范围相差很大,直接叠加会导致其中一个图表被压缩得看不清,这时候可以用双Y轴:

# 先画柱状图在左侧Y轴
ax1 = df.plot(kind='bar', x='类别', y='柱状数据', color='#87CEEB')
ax1.set_ylabel('柱状数据数值')

# 创建右侧Y轴,叠加散点图
ax2 = ax1.twinx()
ax2.scatter(df['类别'], df['散点数据']*10, color='#FF4500', s=120)
ax2.set_ylabel('散点数据数值(放大10倍)')

plt.title('双Y轴叠加示例')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:16:16