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

求助:柱状图上叠加折线图时折线无法显示的问题

解决柱状图上叠加折线图不显示的问题

嘿,我明白你碰到的麻烦了——想把折线图叠在柱状图上,但折线愣是没出来对吧?这问题其实挺常见的,主要是两个原因:一是你没让折线图和柱状图共用同一个坐标轴,二是ratio的数值范围(0-1)和柱状图的计数(上千)差得太远,就算显示了也几乎看不到。

先给你完整的解决方案,一步步来:

1. 先整理好你的DataFrame

看起来你给出的DataFrame格式有点小问题,我先帮你修正并把年份列设为索引,这样x轴才能正确显示年份:

import pandas as pd
import matplotlib.pyplot as plt

# 构建正确的DataFrame
data = {
    'meh': [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016],
    'fiches': [1412, 1356, 1394, 1352, 1398, 1261, 1144, 1203, 1024, 1197],
    'another_col': [1338, 1324, 1298, 1275, 1325, 1215, 845, 1167, 1004, 1180],
    'ratio': [0.947592, 0.976401, 0.931133, 0.943047, 0.947783, 0.963521, 0.738636, 0.970075, 0.980469, 0.985798]
}
graph = pd.DataFrame(data).set_index('meh')

2. 绘制共用坐标轴的双y轴图

核心是让折线图绑定到柱状图的坐标轴上,同时用双y轴适配不同的数值范围:

# 第一步:绘制柱状图,获取主坐标轴
ax = graph[['fiches', 'another_col']].plot(kind='bar', color=['#666666','#999999'], figsize=(10,6))
ax.set_ylabel('Counts')  # 主y轴标签

# 第二步:创建次坐标轴,绘制折线图
ax2 = ax.twinx()  # 生成和主轴共享x轴的次轴
graph['ratio'].plot(kind='line', color='red', linestyle='-', marker='o', ax=ax2)
ax2.set_ylabel('Ratio')  # 次y轴标签
ax2.set_ylim(0, 1.1)  # 手动调整次轴范围,让折线显示更清晰

# 最后美化一下
plt.title('Yearly Counts & Ratio')
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

为什么你的原代码不行?

你之前的代码里,第二个plot()没有指定ax=ax参数,所以pandas默认新建了一个独立的绘图窗口,折线图和柱状图根本不在同一个图里。就算你强制把它们放一个轴,ratio的小数值也会被柱状图的大数值压到底部,几乎看不见——双y轴就是解决这个问题的最佳方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:48